要求一个c++关机的函数
- 提问者网友:辞取
- 2021-07-25 05:34
- 五星知识达人网友:长青诗
- 2021-07-25 05:46
在windows2000或者以上的系统中,出于安全的考虑,许多函数需要特定的权限才能够执行的
HANDLE htoken
TOKEN_PRIVILEGES tkp;
OSVERSIONINFO osvi;
osvi.dwSVersionInfoSize=sizeof(OSVERSIONINFO);
if (GetVersionEx(&osvi)==0)
return false;
if (osvi.dwPlatformID==VER_PLATFORM_WIN32_NT)
{
if (!openprocessToken(Getcurrentprocess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&htoken))
return false;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].luid);
tkp.PrivilegeCount=1;
tkp.Privileges(htoken,FALSE,&tkp,0,(Proken_privileges),0);
}
ExitWindowsEx(EWX_FORCE,0)
关机函数,就是最后的那个函数
- 1楼网友:玩世
- 2021-07-25 07:10
//关机 HANDLE hToken; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { AfxMessageBox(_T("OpenProcessToken Error.")); }
TOKEN_PRIVILEGES tkp; 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) { AfxMessageBox(_T("AdjustTokenPrivileges Error.")); }
if (!ExitWindowsEx(EWX_SHUTDOWN, 0)) { AfxMessageBox(_T("ExitWindowsEx Error.")); }