//关闭或重启计算机
bool ClExitWindowsEx(UINT uFlags)
{ //先判断操作系统,如果为Nt,则行提升权限,才可再关机
OSVERSIONINFO OsVersionInfo;
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OsVersionInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&OsVersionInfo);
switch (OsVersionInfo.dwPlatformId)
{
case VER_PLATFORM_WIN32_WINDOWS://Win 95,98
break;
case VER_PLATFORM_WIN32_NT://Win \Nt\2000\xp
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; break; }//EWX_SHUTDOWN|EWX_FORCE|EWX_POWEROFFreturn ExitWindowsEx(uFlags,0);}