我写了一个重新启动的程序,98下没问题,2000下没反应

解决方案 »

  1.   

    把下面代码加在ExitWindowEx() 的前头,准备给分吧
    //999999999999999999999999999999999999999999999999999999
    HANDLE hToken; 
    TOKEN_PRIVILEGES tkp; 
     
    // Get a token for this process.  if (!OpenProcessToken(GetCurrentProcess(),         TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
    printf("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); 
    if (GetLastError() != ERROR_SUCCESS) 
    printf("AdjustTokenPrivileges"); 
    //99999999999999999999999999999999999999999999999999999999
      

  2.   

    int rtn_code = 0;
    HANDLE hToken; 
    TOKEN_PRIVILEGES tkp; // Get a token for this process. 
    if (!OpenProcessToken(GetCurrentProcess(), 
        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
    {
    rtn_code = 1;
    }// 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) 
    {
    rtn_code = 1;
    }// Shut down the system and force all applications to close. 
    if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)) 
    {
    rtn_code = 1;
    }
    /*
    //this is for reboot
    if (!ExitWindowsEx(EWX_REBOOT| EWX_FORCE, 0)) 
    {
    rtn_code = 1;
    }
    */
    return rtn_code;