为什么我的ExitWindowsEx(EWX_POWEROFF,0)不能关机,Error Code=1314,指定的登录会话不存在。可能已被终止。

解决方案 »

  1.   

    void ShutDown()
    { if  (dwVersion  <    0x80000000)  // for win2000 or later
    {
    TOKEN_PRIVILEGES tkp,tkpnewbutignored;
    HANDLE hdltokenhandle;
    LUID tmpluid;
    BOOL rc;
    DWORD lbufferneeded;
    HANDLE  hdlprocesshandle = GetCurrentProcess();
    rc = OpenProcessToken(hdlprocesshandle,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hdltokenhandle);
    rc = LookupPrivilegeValue("","SeShutdownPrivilege", &tmpluid);
    tkp.PrivilegeCount = 1; // one privilege to set
    tkp.Privileges[0].Luid = tmpluid;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    rc = AdjustTokenPrivileges(hdltokenhandle,FALSE,&tkp,sizeof(tkpnewbutignored),&tkpnewbutignored, &lbufferneeded);
    ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,  0);
    }
    else
    {
    ExitWindowsEx(EWX_SHUTDOWN,0);  // for win98
    }
    }
      

  2.   

    你所在的操作系统应该是W2K/NT/XP
    1314的错误是告诉你你没有权限.
    解决方法(在ExitWindowsEx函数前加上以下代码):
    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;  // one privilege to set    
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
     
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
    (PTOKEN_PRIVILEGES)NULL, 0);