给你一个我用于WIN2000的模块:BOOL CDracoDlg::HostShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//********************获取权限,关闭主机*********************
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return TRUE; 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); if (GetLastError() != ERROR_SUCCESS)
return TRUE; if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE| EWX_POWEROFF, 0))
return TRUE;
return TRUE;
}
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//********************获取权限,关闭主机*********************
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return TRUE; 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); if (GetLastError() != ERROR_SUCCESS)
return TRUE; if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE| EWX_POWEROFF, 0))
return TRUE;
return TRUE;
}
BOOL ExitWindowsEx(
UINT uFlags, // shutdown operation
DWORD dwReserved // reserved
);
ExitWindowEx(EWX_POWEROFF,0)