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