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;
}