Perché appoggiarsi ad applicazioni esterne (nello specifico shutdown.exe) quando si possono usare le apposite API?
codice:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//Attende 30 secondi
Sleep(30000);
//Ottiene un token per il processo
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return 1;
//Ottiene il LUID per il privilegio SE_SHUTDOWN_NAME (necessario per spegnere il PC)
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//Ottiene il privilegio SE_SHUTDOWN_NAME
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
return 2;
//Arresta il sistema
if (!ExitWindowsEx(EWX_SHUTDOWN, 0))
return 3;
return 0;
}