// Shutdown.cpp#include "stdafx.h"
#include "Shutdown.h"int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
ExitWindowsEx(EWX_REBOOT, EWX_FORCE);
return 0;
}不能重启系统,为什么?
#include "Shutdown.h"int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
ExitWindowsEx(EWX_REBOOT, EWX_FORCE);
return 0;
}不能重启系统,为什么?
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_REBOOT, EWX_FORCE);
另外在win98/me中,ExitWindowEx不能在Console application中使用。
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
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);
return 0;
}
{ if (dwVersion < 0x80000000)
{
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);
}
}