Što se tiče samog gašenja računara, to je najmanji problem:
Code:
void SystemShutDown( int mode )
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
AnsiString error;
// Get a token for this process.
if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
error = "OpenProcessToken";
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid );
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the 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 )
error = "AdjustTokenPrivileges";
switch( mode )
{
// 0 = Forcefully close apps, shutdown and leave system at shutoff point
case 0: if ( !ExitWindowsEx( EWX_SHUTDOWN | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
// 1 = Forcefully close apps, shutdown and reboot
case 1: if ( !ExitWindowsEx( EWX_REBOOT | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
// 2 = Forcefully close apps, and logoff
case 2: if ( !ExitWindowsEx( EWX_LOGOFF | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
// 3 = Forcefully close apps, shutdown and poweroff
case 3: if ( !ExitWindowsEx( EWX_POWEROFF | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
}
}
Što se tiče ostalog, podržavam savkicevo viđenje. Koristi GP i User grupe. To je prirodni mehanizam
kod Windowsa.
Sve ostalo su igre bez granica. Glupo je iz Aplikacije baviti se skrivanjem OS funkcionalnosti. To je
(uglavnom) unapred izgubljen rat, i van je svih principa.