BOOL MySystemShutdown( LPTSTR lpMsg ) { HANDLE hToken; TOKEN_PRIVILEGES tkp; BOOL fResult; // system shutdown flag // Get the current process token handle so we can get shutdown // privilege. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return FALSE; // Get the LUID for shutdown privilege. LookupPrivilegeValue(NULL,SE_REMOTE_SHUTDOWN_NAME , &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get shutdown privilege for this process. AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); // Cannot test the return value of AdjustTokenPrivileges. if (GetLastError() != ERROR_SUCCESS) return FALSE; // Display the shutdown dialog box and start the countdown. fResult = InitiateSystemShutdown( ("remote computer name "), // shut down remote computer lpMsg, // message for user 10, // time-out period, in seconds FALSE, // ask user to close apps TRUE); // reboot after shutdown int s = GetLastError(); CString ss; ss.Format("%d",s); AfxMessageBox(ss); if (!fResult) return FALSE; // Disable shutdown privilege. tkp.Privileges[0].Attributes = 0; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); return TRUE; }
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)