NT rebooten

Ich will NT mit einem C-Programm neu starten.
Die API-Funktionen
InitiateSystemShutdown() sowie ExitWindowsEx(EWX_REBOOT,0)
tun es aber nicht , hat jemand eine Lösung ?

Im Service-Pack befindet sich der Befehl „shutdown“, den kannst Du einfach mit system(„shutdown \RECHNER“); ausführen.
Der Nachteil ist natürlich, daß die Datei nicht standardmäßig vorhanden ist…

Im Service-Pack befindet sich der Befehl „shutdown“, den
kannst Du einfach mit system(„shutdown \RECHNER“); ausführen.
Der Nachteil ist natürlich, daß die Datei nicht standardmäßig
vorhanden ist…

Danke,

Ich kenne die shutdown.exe,wollte aber nicht auf sie zurückgreifen.(zu groß,zu ineffizient.)
habe mich inzwischen so beholfen(14kb):

#include

//#pragma hdrstop
//#pragma check_pointer(on)

BOOL SetCurrentPrivilege( LPCTSTR Privilege, BOOL bEnablePrivilege );

int main( int argc, char * argv[] )
{
int timeout = 0,force = 1,reboot = 1;//Sekunden,Schnelles Booten,Neustart

{
( SetCurrentPrivilege( SE_SHUTDOWN_NAME, TRUE ) );
}

{
InitiateSystemShutdown( NULL,NULL, (DWORD) timeout, force, reboot );
}

return 0;
}

BOOL SetCurrentPrivilege( LPCTSTR Privilege, BOOL bEnablePrivilege )
{
HANDLE hToken;
LUID luid;
TOKEN_PRIVILEGES tp, tpPrevious;
DWORD cbPrevious = sizeof( TOKEN_PRIVILEGES );
BOOL bSuccess = FALSE;

if ( ! LookupPrivilegeValue( NULL, Privilege, &luid ) )
return FALSE;

if( ! OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken ) )
return FALSE;

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = 0;

AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof( TOKEN_PRIVILEGES ), &tpPrevious, &cbPrevious );

if ( GetLastError() == ERROR_SUCCESS )
{
tpPrevious.PrivilegeCount = 1;
tpPrevious.Privileges[0].Luid = luid;

if ( bEnablePrivilege )
tpPrevious.Privileges[0].Attributes |= ( SE_PRIVILEGE_ENABLED );
else
tpPrevious.Privileges[0].Attributes &= ~( SE_PRIVILEGE_ENABLED );

AdjustTokenPrivileges( hToken, FALSE, &tpPrevious, cbPrevious, NULL, NULL );

if ( GetLastError() == ERROR_SUCCESS )
bSuccess=TRUE;
}

CloseHandle( hToken );
return bSuccess;
}