Author: rharabien Date: Sat Nov 19 00:24:58 2011 New Revision: 54427
URL: http://svn.reactos.org/svn/reactos?rev=54427&view=rev Log: [SYSSETUP] - Close opened handles - Improve code a bit
Modified: trunk/reactos/dll/win32/syssetup/install.c
Modified: trunk/reactos/dll/win32/syssetup/install.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/install.... ============================================================================== --- trunk/reactos/dll/win32/syssetup/install.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/syssetup/install.c [iso-8859-1] Sat Nov 19 00:24:58 2011 @@ -44,57 +44,64 @@ /* FUNCTIONS ****************************************************************/
static VOID -DebugPrint(char* fmt,...) -{ - char buffer[512]; +FatalError(char *pszFmt,...) +{ + char szBuffer[512]; va_list ap;
- va_start(ap, fmt); - vsprintf(buffer, fmt, ap); + va_start(ap, pszFmt); + vsprintf(szBuffer, pszFmt, ap); va_end(ap);
LogItem(SYSSETUP_SEVERITY_FATAL_ERROR, L"Failed");
- strcat(buffer, "\nRebooting now!"); + strcat(szBuffer, "\nRebooting now!"); MessageBoxA(NULL, - buffer, + szBuffer, "ReactOS Setup", MB_OK); }
- -HRESULT CreateShellLink(LPCTSTR linkPath, LPCTSTR cmd, LPCTSTR arg, LPCTSTR dir, LPCTSTR iconPath, int icon_nr, LPCTSTR comment) -{ - IShellLink* psl; - IPersistFile* ppf; +static HRESULT +CreateShellLink( + LPCTSTR pszLinkPath, + LPCTSTR pszCmd, + LPCTSTR pszArg, + LPCTSTR pszDir, + LPCTSTR pszIconPath, + int iIconNr, + LPCTSTR pszComment) +{ + IShellLink *psl; + IPersistFile *ppf; #ifndef _UNICODE - WCHAR buffer[MAX_PATH]; + WCHAR wszBuf[MAX_PATH]; #endif /* _UNICODE */
HRESULT hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hr)) { - hr = psl->lpVtbl->SetPath(psl, cmd); - - if (arg) - { - hr = psl->lpVtbl->SetArguments(psl, arg); - } - - if (dir) - { - hr = psl->lpVtbl->SetWorkingDirectory(psl, dir); - } - - if (iconPath) - { - hr = psl->lpVtbl->SetIconLocation(psl, iconPath, icon_nr); - } - - if (comment) - { - hr = psl->lpVtbl->SetDescription(psl, comment); + hr = psl->lpVtbl->SetPath(psl, pszCmd); + + if (pszArg) + { + hr = psl->lpVtbl->SetArguments(psl, pszArg); + } + + if (pszDir) + { + hr = psl->lpVtbl->SetWorkingDirectory(psl, pszDir); + } + + if (pszIconPath) + { + hr = psl->lpVtbl->SetIconLocation(psl, pszIconPath, iIconNr); + } + + if (pszComment) + { + hr = psl->lpVtbl->SetDescription(psl, pszComment); }
hr = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile, (LPVOID*)&ppf); @@ -102,11 +109,11 @@ if (SUCCEEDED(hr)) { #ifdef _UNICODE - hr = ppf->lpVtbl->Save(ppf, linkPath, TRUE); + hr = ppf->lpVtbl->Save(ppf, pszLinkPath, TRUE); #else /* _UNICODE */ - MultiByteToWideChar(CP_ACP, 0, linkPath, -1, buffer, MAX_PATH); - - hr = ppf->lpVtbl->Save(ppf, buffer, TRUE); + MultiByteToWideChar(CP_ACP, 0, pszLinkPath, -1, wszBuf, MAX_PATH); + + hr = ppf->lpVtbl->Save(ppf, wszBuf, TRUE); #endif /* _UNICODE */
ppf->lpVtbl->Release(ppf); @@ -120,101 +127,105 @@
static BOOL -CreateShortcut(int csidl, LPCTSTR folder, UINT nIdName, LPCTSTR command, UINT nIdTitle, BOOL bCheckExistence, INT iIconNr) -{ - TCHAR path[MAX_PATH]; - TCHAR exeName[MAX_PATH]; - TCHAR title[256]; - TCHAR name[256]; - LPTSTR p = path; - TCHAR szWorkingDir[MAX_PATH]; - LPTSTR lpWorkingDir = NULL; +CreateShortcut( + int csidl, + LPCTSTR pszFolder, + UINT nIdName, + LPCTSTR pszCommand, + UINT nIdTitle, + BOOL bCheckExistence, + INT iIconNr) +{ + TCHAR szPath[MAX_PATH]; + TCHAR szExeName[MAX_PATH]; + TCHAR szTitle[256]; + TCHAR szName[256]; + LPTSTR Ptr = szPath; + TCHAR szWorkingDirBuf[MAX_PATH]; + LPTSTR pszWorkingDir = NULL; LPTSTR lpFilePart; DWORD dwLen;
- if (ExpandEnvironmentStrings(command, - path, - sizeof(path) / sizeof(path[0])) == 0) - { - _tcscpy(path, - command); + if (ExpandEnvironmentStrings(pszCommand, + szPath, + sizeof(szPath) / sizeof(szPath[0])) == 0) + { + _tcscpy(szPath, pszCommand); }
if (bCheckExistence) { - if ((_taccess(path, 0 )) == -1) + if ((_taccess(szPath, 0 )) == -1) /* Expected error, don't return FALSE */ return TRUE; }
- dwLen = GetFullPathName(path, - sizeof(szWorkingDir) / sizeof(szWorkingDir[0]), - szWorkingDir, + dwLen = GetFullPathName(szPath, + sizeof(szWorkingDirBuf) / sizeof(szWorkingDirBuf[0]), + szWorkingDirBuf, &lpFilePart); - if (dwLen != 0 && dwLen <= sizeof(szWorkingDir) / sizeof(szWorkingDir[0])) + if (dwLen != 0 && dwLen <= sizeof(szWorkingDirBuf) / sizeof(szWorkingDirBuf[0])) { /* Since those should only be called with (.exe) files, lpFilePart has not to be NULL */ ASSERT(lpFilePart != NULL);
/* Save the file name */ - _tcscpy(exeName, lpFilePart); + _tcscpy(szExeName, lpFilePart);
/* We're only interested in the path. Cut the file name off. Also remove the trailing backslash unless the working directory is only going to be a drive, ie. C:\ */ *(lpFilePart--) = _T('\0'); - if (!(lpFilePart - szWorkingDir == 2 && szWorkingDir[1] == _T(':') && - szWorkingDir[2] == _T('\'))) + if (!(lpFilePart - szWorkingDirBuf == 2 && szWorkingDirBuf[1] == _T(':') && + szWorkingDirBuf[2] == _T('\'))) { *lpFilePart = _T('\0'); }
- lpWorkingDir = szWorkingDir; - } - - - if (!SHGetSpecialFolderPath(0, path, csidl, TRUE)) + pszWorkingDir = szWorkingDirBuf; + } + + + if (!SHGetSpecialFolderPath(0, szPath, csidl, TRUE)) return FALSE;
- if (folder) - { - p = PathAddBackslash(p); - _tcscpy(p, folder); - } - - p = PathAddBackslash(p); - - if (!LoadString(hDllInstance, nIdName, name, sizeof(name)/sizeof(name[0]))) + if (pszFolder) + { + Ptr = PathAddBackslash(Ptr); + _tcscpy(Ptr, pszFolder); + } + + Ptr = PathAddBackslash(Ptr); + + if (!LoadString(hDllInstance, nIdName, szName, sizeof(szName)/sizeof(szName[0]))) return FALSE; - _tcscpy(p, name); - - if (!LoadString(hDllInstance, nIdTitle, title, sizeof(title)/sizeof(title[0]))) + _tcscpy(Ptr, szName); + + if (!LoadString(hDllInstance, nIdTitle, szTitle, sizeof(szTitle)/sizeof(szTitle[0]))) return FALSE;
// FIXME: we should pass 'command' straight in here, but shell32 doesn't expand it - return SUCCEEDED(CreateShellLink(path, exeName, _T(""), lpWorkingDir, exeName, iIconNr, title)); -} - + return SUCCEEDED(CreateShellLink(szPath, szExeName, _T(""), pszWorkingDir, szExeName, iIconNr, szTitle)); +}
static BOOL -CreateShortcutFolder(int csidl, UINT nID, LPTSTR name, int nameLen) -{ - TCHAR path[MAX_PATH]; +CreateShortcutFolder(int csidl, UINT nID, LPTSTR pszName, int cchNameLen) +{ + TCHAR szPath[MAX_PATH]; LPTSTR p;
- if (!SHGetSpecialFolderPath(0, path, csidl, TRUE)) + if (!SHGetSpecialFolderPath(0, szPath, csidl, TRUE)) return FALSE;
- if (!LoadString(hDllInstance, nID, name, nameLen)) + if (!LoadString(hDllInstance, nID, pszName, cchNameLen)) return FALSE;
- p = PathAddBackslash(path); - _tcscpy(p, name); - - return CreateDirectory(path, NULL) || GetLastError()==ERROR_ALREADY_EXISTS; -} - + p = PathAddBackslash(szPath); + _tcscpy(p, pszName); + + return CreateDirectory(szPath, NULL) || GetLastError()==ERROR_ALREADY_EXISTS; +}
static BOOL CreateRandomSid( @@ -243,7 +254,6 @@ return NT_SUCCESS(Status); }
- static VOID AppendRidToSid( OUT PSID *Dst, @@ -279,7 +289,6 @@ Dst); }
- static VOID CreateTempDir( IN LPCWSTR VarName) @@ -293,9 +302,9 @@ L"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", 0, KEY_QUERY_VALUE, - &hKey)) - { - DebugPrint("Error: %lu\n", GetLastError()); + &hKey) != ERROR_SUCCESS) + { + FatalError("Error: %lu\n", GetLastError()); return; }
@@ -306,11 +315,10 @@ NULL, NULL, (LPBYTE)szBuffer, - &dwLength)) - { - DebugPrint("Error: %lu\n", GetLastError()); - RegCloseKey(hKey); - return; + &dwLength) != ERROR_SUCCESS) + { + FatalError("Error: %lu\n", GetLastError()); + goto cleanup; }
/* Expand it */ @@ -318,9 +326,8 @@ szTempDir, MAX_PATH)) { - DebugPrint("Error: %lu\n", GetLastError()); - RegCloseKey(hKey); - return; + FatalError("Error: %lu\n", GetLastError()); + goto cleanup; }
/* Create profiles directory */ @@ -328,22 +335,21 @@ { if (GetLastError() != ERROR_ALREADY_EXISTS) { - DebugPrint("Error: %lu\n", GetLastError()); - RegCloseKey(hKey); - return; - } - } - + FatalError("Error: %lu\n", GetLastError()); + goto cleanup; + } + } + +cleanup: RegCloseKey(hKey); }
- -BOOL +static BOOL InstallSysSetupInfDevices(VOID) { INFCONTEXT InfContext; - WCHAR LineBuffer[256]; - DWORD LineLength; + WCHAR szLineBuffer[256]; + DWORD dwLineLength;
if (!SetupFindFirstLineW(hSysSetupInf, L"DeviceInfsToInstall", @@ -357,14 +363,14 @@ { if (!SetupGetStringFieldW(&InfContext, 0, - LineBuffer, - sizeof(LineBuffer)/sizeof(LineBuffer[0]), - &LineLength)) + szLineBuffer, + sizeof(szLineBuffer)/sizeof(szLineBuffer[0]), + &dwLineLength)) { return FALSE; }
- if (!SetupDiInstallClassW(NULL, LineBuffer, DI_QUIETINSTALL, NULL)) + if (!SetupDiInstallClassW(NULL, szLineBuffer, DI_QUIETINSTALL, NULL)) { return FALSE; } @@ -373,12 +379,13 @@
return TRUE; } -BOOL + +static BOOL InstallSysSetupInfComponents(VOID) { INFCONTEXT InfContext; - WCHAR NameBuffer[256]; - WCHAR SectionBuffer[256]; + WCHAR szNameBuffer[256]; + WCHAR szSectionBuffer[256]; HINF hComponentInf = INVALID_HANDLE_VALUE;
if (!SetupFindFirstLineW(hSysSetupInf, @@ -394,40 +401,40 @@ { if (!SetupGetStringFieldW(&InfContext, 1, // Get the component name - NameBuffer, - sizeof(NameBuffer)/sizeof(NameBuffer[0]), + szNameBuffer, + sizeof(szNameBuffer)/sizeof(szNameBuffer[0]), NULL)) { - DebugPrint("Error while trying to get component name \n"); + FatalError("Error while trying to get component name \n"); return FALSE; }
if (!SetupGetStringFieldW(&InfContext, 2, // Get the component install section - SectionBuffer, - sizeof(SectionBuffer)/sizeof(SectionBuffer[0]), + szSectionBuffer, + sizeof(szSectionBuffer)/sizeof(szSectionBuffer[0]), NULL)) { - DebugPrint("Error while trying to get component install section \n"); + FatalError("Error while trying to get component install section \n"); return FALSE; }
- DPRINT("Trying to execute install section '%S' from '%S' \n", SectionBuffer , NameBuffer); - - hComponentInf = SetupOpenInfFileW(NameBuffer, + DPRINT("Trying to execute install section '%S' from '%S' \n", szSectionBuffer, szNameBuffer); + + hComponentInf = SetupOpenInfFileW(szNameBuffer, NULL, INF_STYLE_WIN4, NULL);
if (hComponentInf == INVALID_HANDLE_VALUE) { - DebugPrint("SetupOpenInfFileW() failed to open '%S' (Error: %lu)\n", NameBuffer ,GetLastError()); + FatalError("SetupOpenInfFileW() failed to open '%S' (Error: %lu)\n", szNameBuffer, GetLastError()); return FALSE; }
if (!SetupInstallFromInfSectionW(NULL, hComponentInf, - SectionBuffer, + szSectionBuffer, SPINST_ALL, NULL, NULL, @@ -437,7 +444,7 @@ NULL, NULL)) { - DebugPrint("Error while trying to install : %S (Error: %lu)\n", NameBuffer, GetLastError()); + FatalError("Error while trying to install : %S (Error: %lu)\n", szNameBuffer, GetLastError()); SetupCloseInfFile(hComponentInf); return FALSE; } @@ -455,7 +462,7 @@ { SC_HANDLE hSCManager = NULL; SC_HANDLE hService = NULL; - BOOL ret = FALSE; + BOOL bRet = FALSE;
hSCManager = OpenSCManagerW(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE); if (hSCManager == NULL) @@ -474,35 +481,34 @@ goto cleanup; }
- ret = ChangeServiceConfigW(hService, + bRet = ChangeServiceConfigW(hService, SERVICE_NO_CHANGE, SERVICE_AUTO_START, SERVICE_NO_CHANGE, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - if (!ret) + if (!bRet) { DPRINT1("Unable to change the service configuration\n"); goto cleanup; }
- ret = StartServiceW(hService, 0, NULL); - if ((!ret) && (GetLastError() != ERROR_SERVICE_ALREADY_RUNNING)) + bRet = StartServiceW(hService, 0, NULL); + if (!bRet && (GetLastError() != ERROR_SERVICE_ALREADY_RUNNING)) { DPRINT1("Unable to start service\n"); goto cleanup; }
- ret = TRUE; + bRet = TRUE;
cleanup: if (hSCManager != NULL) CloseServiceHandle(hSCManager); if (hService != NULL) CloseServiceHandle(hService); - return ret; -} - + return bRet; +}
static INT_PTR CALLBACK StatusMessageWindowProc( @@ -527,7 +533,6 @@ } return FALSE; } -
static DWORD WINAPI ShowStatusMessageThread( @@ -568,7 +573,7 @@ LONG rc; DWORD dwType; DWORD cbData = 0; - LPWSTR Value; + LPWSTR pwszValue;
if (!pValue) return ERROR_INVALID_PARAMETER; @@ -579,29 +584,29 @@ return rc; if (dwType != REG_SZ) return ERROR_FILE_NOT_FOUND; - Value = HeapAlloc(GetProcessHeap(), 0, cbData + sizeof(WCHAR)); - if (!Value) + pwszValue = HeapAlloc(GetProcessHeap(), 0, cbData + sizeof(WCHAR)); + if (!pwszValue) return ERROR_NOT_ENOUGH_MEMORY; - rc = RegQueryValueExW(hKey, pszKey, NULL, NULL, (LPBYTE)Value, &cbData); + rc = RegQueryValueExW(hKey, pszKey, NULL, NULL, (LPBYTE)pwszValue, &cbData); if (rc != ERROR_SUCCESS) { - HeapFree(GetProcessHeap(), 0, Value); + HeapFree(GetProcessHeap(), 0, pwszValue); return rc; } /* NULL-terminate the string */ - Value[cbData / sizeof(WCHAR)] = '\0'; - - *pValue = Value; + pwszValue[cbData / sizeof(WCHAR)] = '\0'; + + *pValue = pwszValue; return ERROR_SUCCESS; }
static BOOL IsConsoleBoot(VOID) { - HKEY ControlKey = NULL; - LPWSTR SystemStartOptions = NULL; - LPWSTR CurrentOption, NextOption; /* Pointers into SystemStartOptions */ - BOOL ConsoleBoot = FALSE; + HKEY hControlKey = NULL; + LPWSTR pwszSystemStartOptions = NULL; + LPWSTR pwszCurrentOption, pwszNextOption; /* Pointers into SystemStartOptions */ + BOOL bConsoleBoot = FALSE; LONG rc;
rc = RegOpenKeyExW( @@ -609,33 +614,36 @@ L"SYSTEM\CurrentControlSet\Control", 0, KEY_QUERY_VALUE, - &ControlKey); - - rc = ReadRegSzKey(ControlKey, L"SystemStartOptions", &SystemStartOptions); + &hControlKey); if (rc != ERROR_SUCCESS) goto cleanup;
+ rc = ReadRegSzKey(hControlKey, L"SystemStartOptions", &pwszSystemStartOptions); + if (rc != ERROR_SUCCESS) + goto cleanup; + /* Check for CMDCONS in SystemStartOptions */ - CurrentOption = SystemStartOptions; - while (CurrentOption) - { - NextOption = wcschr(CurrentOption, L' '); - if (NextOption) - *NextOption = L'\0'; - if (wcsicmp(CurrentOption, L"CONSOLE") == 0) - { - DPRINT("Found %S. Switching to console boot\n", CurrentOption); - ConsoleBoot = TRUE; + pwszCurrentOption = pwszSystemStartOptions; + while (pwszCurrentOption) + { + pwszNextOption = wcschr(pwszCurrentOption, L' '); + if (pwszNextOption) + *pwszNextOption = L'\0'; + if (wcsicmp(pwszCurrentOption, L"CONSOLE") == 0) + { + DPRINT("Found %S. Switching to console boot\n", pwszCurrentOption); + bConsoleBoot = TRUE; goto cleanup; } - CurrentOption = NextOption ? NextOption + 1 : NULL; + pwszCurrentOption = pwszNextOption ? pwszNextOption + 1 : NULL; }
cleanup: - if (ControlKey != NULL) - RegCloseKey(ControlKey); - HeapFree(GetProcessHeap(), 0, SystemStartOptions); - return ConsoleBoot; + if (hControlKey != NULL) + RegCloseKey(hControlKey); + if (pwszSystemStartOptions) + HeapFree(GetProcessHeap(), 0, pwszSystemStartOptions); + return bConsoleBoot; }
static BOOL @@ -650,53 +658,58 @@ NULL); if (hSysSetupInf == INVALID_HANDLE_VALUE) { - DebugPrint("SetupOpenInfFileW() failed to open 'syssetup.inf' (Error: %lu)\n", GetLastError()); + FatalError("SetupOpenInfFileW() failed to open 'syssetup.inf' (Error: %lu)\n", GetLastError()); return FALSE; }
if (!InstallSysSetupInfDevices()) { - DebugPrint("InstallSysSetupInfDevices() failed!\n"); - SetupCloseInfFile(hSysSetupInf); - return FALSE; + FatalError("InstallSysSetupInfDevices() failed!\n"); + goto error; }
if(!InstallSysSetupInfComponents()) { - DebugPrint("InstallSysSetupInfComponents() failed!\n"); - SetupCloseInfFile(hSysSetupInf); - return FALSE; + FatalError("InstallSysSetupInfComponents() failed!\n"); + goto error; }
if (!IsConsoleBoot()) { - CreateThread( + HANDLE hThread; + + hThread = CreateThread( NULL, 0, ShowStatusMessageThread, (LPVOID)&hWnd, 0, NULL); + + if (hThread) + CloseHandle(hThread); }
if (!EnableUserModePnpManager()) { - DebugPrint("EnableUserModePnpManager() failed!\n"); - SetupCloseInfFile(hSysSetupInf); - EndDialog(hWnd, 0); - return FALSE; + FatalError("EnableUserModePnpManager() failed!\n"); + goto error; }
if (CMP_WaitNoPendingInstallEvents(INFINITE) != WAIT_OBJECT_0) { - DebugPrint("CMP_WaitNoPendingInstallEvents() failed!\n"); - SetupCloseInfFile(hSysSetupInf); - EndDialog(hWnd, 0); - return FALSE; + FatalError("CMP_WaitNoPendingInstallEvents() failed!\n"); + goto error; }
EndDialog(hWnd, 0); return TRUE; + +error: + if (hWnd) + EndDialog(hWnd, 0); + SetupCloseInfFile(hSysSetupInf); + return FALSE; }
DWORD WINAPI @@ -704,10 +717,10 @@ { STARTUPINFOW StartupInfo; PROCESS_INFORMATION ProcessInformation; - BOOL res; + BOOL bRes;
if (!CommonInstall()) - goto cleanup; + goto error; SetupCloseInfFile(hSysSetupInf);
/* Run the shell */ @@ -718,7 +731,7 @@ StartupInfo.dwFlags = 0; StartupInfo.cbReserved2 = 0; StartupInfo.lpReserved2 = 0; - res = CreateProcessW( + bRes = CreateProcessW( L"userinit.exe", NULL, NULL, @@ -729,12 +742,15 @@ NULL, &StartupInfo, &ProcessInformation); - if (!res) - goto cleanup; + if (!bRes) + goto error; + + CloseHandle(ProcessInformation.hThread); + CloseHandle(ProcessInformation.hProcess);
return 0;
-cleanup: +error: MessageBoxW( NULL, L"Failed to load LiveCD! You can shutdown your computer, or press ENTER to reboot.", @@ -855,34 +871,34 @@
if (!InitializeProfiles()) { - DebugPrint("InitializeProfiles() failed"); + FatalError("InitializeProfiles() failed"); return 0; }
if (!CreateShortcuts()) { - DebugPrint("InitializeProfiles() failed"); + FatalError("InitializeProfiles() failed"); return 0; }
/* Initialize the Security Account Manager (SAM) */ if (!SamInitializeSAM()) { - DebugPrint("SamInitializeSAM() failed!"); + FatalError("SamInitializeSAM() failed!"); return 0; }
/* Create the semi-random Domain-SID */ if (!CreateRandomSid(&DomainSid)) { - DebugPrint("Domain-SID creation failed!"); + FatalError("Domain-SID creation failed!"); return 0; }
/* Set the Domain SID (aka Computer SID) */ if (!SamSetDomainSid(DomainSid)) { - DebugPrint("SamSetDomainSid() failed!"); + FatalError("SamSetDomainSid() failed!"); RtlFreeSid(DomainSid); return 0; } @@ -939,7 +955,7 @@ LastError = GetLastError(); if (LastError != ERROR_USER_EXISTS) { - DebugPrint("SamCreateUser() failed!"); + FatalError("SamCreateUser() failed!"); RtlFreeSid(AdminSid); RtlFreeSid(DomainSid); return 0; @@ -962,7 +978,7 @@ ret = LogonUserW(L"Administrator", L"", L"", LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &hToken); if (!ret) { - DebugPrint("LogonUserW() failed!"); + FatalError("LogonUserW() failed!"); return 0; } ZeroMemory(&ProfileInfo, sizeof(PROFILEINFOW)); @@ -988,7 +1004,7 @@ /* Get shutdown privilege */ if (! OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) { - DebugPrint("OpenProcessToken() failed!"); + FatalError("OpenProcessToken() failed!"); return 0; } if (!LookupPrivilegeValue( @@ -996,7 +1012,7 @@ SE_SHUTDOWN_NAME, &privs.Privileges[0].Luid)) { - DebugPrint("LookupPrivilegeValue() failed!"); + FatalError("LookupPrivilegeValue() failed!"); return 0; } privs.PrivilegeCount = 1; @@ -1009,7 +1025,7 @@ (PTOKEN_PRIVILEGES)NULL, NULL) == 0) { - DebugPrint("AdjustTokenPrivileges() failed!"); + FatalError("AdjustTokenPrivileges() failed!"); return 0; }