mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 09:50:02 +00:00
53 lines
1.5 KiB
C
53 lines
1.5 KiB
C
![]() |
/*
|
||
|
* PROJECT: ReactOS Automatic Testing Utility
|
||
|
* LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation
|
||
|
* PURPOSE: Helper function for shutting down the system
|
||
|
* COPYRIGHT: Copyright 2008-2009 Colin Finck <colin@reactos.org>
|
||
|
*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
/**
|
||
|
* Shuts down the system.
|
||
|
*
|
||
|
* @return
|
||
|
* TRUE if everything went well, FALSE if there was a problem while trying to shut down the system.
|
||
|
*/
|
||
|
BOOL ShutdownSystem()
|
||
|
{
|
||
|
HANDLE hToken;
|
||
|
TOKEN_PRIVILEGES Privileges;
|
||
|
|
||
|
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
|
||
|
{
|
||
|
StringOut("OpenProcessToken failed\n");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/* Get the LUID for the Shutdown privilege */
|
||
|
if (!LookupPrivilegeValueW(NULL, SE_SHUTDOWN_NAME, &Privileges.Privileges[0].Luid))
|
||
|
{
|
||
|
StringOut("LookupPrivilegeValue failed\n");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/* Assign the Shutdown privilege to our process */
|
||
|
Privileges.PrivilegeCount = 1;
|
||
|
Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||
|
|
||
|
if (!AdjustTokenPrivileges(hToken, FALSE, &Privileges, 0, NULL, NULL))
|
||
|
{
|
||
|
StringOut("AdjustTokenPrivileges failed\n");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/* Finally shut down the system */
|
||
|
if(!ExitWindowsEx(EWX_POWEROFF, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED))
|
||
|
{
|
||
|
StringOut("ExitWindowsEx failed\n");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|