程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++調整進程的特權的實現方法

C++調整進程的特權的實現方法

編輯:關於C++

通過OpenProcess(PROCESS_ALL_ACCESS,FALSE,dId)獲取ID較低進程的句柄時可能會得到錯誤代碼,這些進程都是保持系統活動的系統服務。一個普通用戶進程不允許執行針對系統服務的所有操作。如果一個程序意外終止了一個系統服務,那麼整個系統都將崩潰。因此,一個進程只有擁有確切的訪問權限才會有適當的特權 。

由於多種原因,調試器必須擁有大量的權限來完成他的工作。改變進程的特權可以通過以下三個簡單的基本步驟:

1.首先,必須打開進程的訪問令牌(accesstoken),使用advapi32.dll中的函數OpenProcessToken()。

2.如果上一步正確完成,接下來就是准備TOKEN_PRIVILEGES結構,該結構包含有關要請求的特權的信息。這個工作需要advapi32.dll中的另一個函數LookupPrivilegeValue()的幫助。特權通過名稱來指定。SDK文檔winnt.h定義了27中特權名稱和其對應的符號名稱。例如,調試權限的符號名稱為:SE_DEBUG_NAME,該名稱和字符串“SeDebugPrivilege”等效。

3.如果上一步正確完成,就可以使用進程的令牌句柄(TokenHandle)來調用AdjustTokenPrivileges()函數以初始化TOKEN_PRIVILEGES結構。該函數也是advapi32.dll導出的。

4.如果OpenProcessToken()調用成功,要記得關閉其返回的令牌句柄(TokenHandle)。w2k_dbg.dll包含一個dbgPrivilegeSet()函數,該函數合並了這幾個步驟,還有w2k_dbg.dll中的另一個函數:dbgPrivilegeDebug()。此函數是dbgPrivilegeSet()的一個外包函數,為了便於設定調試特權。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved