提高權限 關閉系統

 

 1 void ElevationOfPrivilege()
 2 {  
 3     BOOL retn;    
 4     HANDLE hToken;    
 5     retn = OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);    
 6     if(retn != TRUE)    
 7     {    
 8         //cout<<"獲取令牌句柄失敗!"<<endl;    
 9         return;    
10     }    
11 
12     TOKEN_PRIVILEGES tp; //新特權結構體    
13     LUID Luid;    
14     retn = LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&Luid);    
15 
16     if(retn != TRUE)    
17     {    
18         //cout<<"獲取Luid失敗"<<endl;    
19         return;    
20     }    
21     //給TP和TP裏的LUID結構體賦值    
22     tp.PrivilegeCount = 1;    
23     tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;    
24     tp.Privileges[0].Luid = Luid;    
25 
26     AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);    
27     if(GetLastError() != ERROR_SUCCESS)    
28     {    
29         //cout<<"修改特權不徹底或失敗!"<<endl;
30     }    
31     else  
32     {    
33         //cout<<"修改爲功!"<<endl;    
34     }    
35 }
1 BOOL ExitWindowsEx(
2   UINT uFlags,
3   DWORD dwReason
4 );
 1 uFlags
 2 //
 3 //指定關閉的類型。此參數必須有下列值的組合:
 4 //EWX_FORCE
 5 //強制終止進程。當此標誌設置,Windows不會發送消息WM_QUERYENDSESSION和WM_ENDSESSION的消息給目前在系統中運行的程序。這可能會致使應用程序丟失數據。所以,你應該只在緊急狀況下使用此標誌。
 6 //EWX_LOGOFF
 7 //關閉全部進程,而後註銷用戶。
 8 //EWX_POWEROFF
 9 //關閉系統並關閉電源。該系統必須支持斷電。
10 //Windows要求:
11 //Windows NT中調用進程必須有 SE_SHUTDOWN_NAME 特權。
12 //Windows 9X中:能夠直接調用。
13 //EWX_REBOOT
14 //關閉系統,而後從新啓動系統。
15 //Windows要求:
16 //Windows NT中:調用進程必須有SE_SHUTDOWN_NAME特權。
17 //Windows 9X中:能夠直接調用。
18 //EWX_SHUTDOWN
19 //關閉系統,安全地關閉電源。全部文件緩衝區已經刷新到磁盤上,全部正在運行的進程已經中止。
20 //Windows要求:
21 //Windows NT中:調用進程必須有SE_SHUTDOWN_NAME特權。
22 //Windows 9X中:能夠直接調用。
23 //dwReserved
24 //
25 //系統保留,這參數被忽略。通常取0。
26 //返回值
27 //若是函數成功,返回值爲非零。
28 //若是函數失敗,返回值是零。想得到更多錯誤信息,請調用GetLastError函數。
相關文章
相關標籤/搜索