MFC关机函数

 1 //关机函数
 2 BOOL CShutdownDlg::SystemShutdown(void){ 
 3     HANDLE hToken;  
 4     TOKEN_PRIVILEGES tkp;//设置访问特权变量  
 5     //OpenProcessToken 获取进程的访问令牌  
 6     if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken))  
 7     {  
 8         MessageBox("获取访问令牌失败!");  
 9         return FALSE;  
10     }  
11     // LookupPrivilegeValue查看系统的特权值  
12     LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);  
13     tkp.PrivilegeCount = 1; // 指定特权数组个数1  
14     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;//启用特权  
15     // AdjustTokenPrivileges的作用是通知Windows NT修改本进程的权利  
16     AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);//启用当前访问令牌的特权  
17     if (GetLastError() != ERROR_SUCCESS) //失败  
18     {  
19         MessageBox("获取权限失败!");  
20         return FALSE;  
21     }  
22     if (!ExitWindowsEx(EWX_SHUTDOWN, 0)) //参数在这里设置。EWX_SHUTDOWN 为正常关机,强行退出为WINDOWSEWX_FORCE。  
23         return FALSE;  
24     return TRUE;  
25 }

 

posted @ 2014-10-21 13:23  kim_berley  阅读(660)  评论(0编辑  收藏  举报