neustart????



  • also ich will mit winxp einen neustart machen aber wenn ich

    ExitWindowsEx(EWX_REBOOT, 0)

    benutze bleibts immer stehen

    also beendet alles!!dann kann ich nur noch den hintergrund sehen und nix mehr machen aber warum????



  • hi,
    vielleicht hast du nicht die noetigen rechte dazu. versuchs mal hiermit

    #include "stdafx.h"
    #include <windows.h>
    #include <winuser.h>
    #include <stdlib.h>
    
    bool Down() 
    	{ 
    
    		//Windows NT 
    		HANDLE hToken;
    		TOKEN_PRIVILEGES tkp;
    		OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
    		LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
    		tkp.PrivilegeCount=1;
    		tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
    		AdjustTokenPrivileges(hToken,false,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
    
    	    return ExitWindowsEx(EWX_POWEROFF ,0); 
    
    }
    
    int main()
    {
        Down();
    	return 0;
    }
    

    edit: Codetags hinzugefügt.



  • Du musst dir erst die Rechte holen. Aber das kauen wir jede Woche einmal durch. Und das Forum hat eine Suche. 🙄



  • ... die aber derzeit leider nicht funktioniert / deaktiviert ist 😞



  • nee die rechte hab ich geholt hab des exemple aus der msdn

    HANDLE hToken; 
       TOKEN_PRIVILEGES tkp; 
    
       // Get a token for this process. 
    
       if (!OpenProcessToken(GetCurrentProcess(), 
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
          return( FALSE ); 
    
       // 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); 
    
       if (GetLastError() != ERROR_SUCCESS) 
          return FALSE; 
    
       // Shut down the system and force all applications to close. 
    
       if (!ExitWindowsEx(EWX_REBOOT, 0)) 
          return FALSE; 
    
       return TRUE;
    


  • hat jemand ne idee warums nicht klappt



  • ich habs hinbekommen

    BOOL REBOOT()
    {
    
       HANDLE hToken; 
       TOKEN_PRIVILEGES tkp; 
       char buf[100];
    
       if (!OpenProcessToken(GetCurrentProcess(), 
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
          return( FALSE ); 
    
       LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, 
            &tkp.Privileges[0].Luid); 
    
       tkp.PrivilegeCount = 1;  // one privilege to set    
       tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    
       AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
            (PTOKEN_PRIVILEGES)NULL, 0); 
    
       if (GetLastError() != ERROR_SUCCESS) 
          return FALSE; 
    
       SetProcessShutdownParameters(400,0);
    
       if (!ExitWindowsEx(EWX_REBOOT,EWX_FORCE)) 
       {
          return FALSE; 
          MessageBox(NULL,"hat nicht gefunzt",0,0);
       }   
    
        return TRUE;
    }
    

    des isn neustart von xp



  • Also hat das SetProcessShutdownParameters und / oder EWX_FORCE gefehlt.

    btw: Zu dem MessageBox-Aufruf nach der return Anweisung dürfte er doch eigentlich gar nie kommen 🙄



  • lol stimmt



  • Super dass es klappt aber es geht eigentlich sehr viel einfacher. Auf meiner Webseite gibt's mal wieder 'nen Tipp.

    Gruß,
    Chris


Anmelden zum Antworten