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函數。