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

來源:互聯網
上載者:User

通過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()的一個外包函數,為了便於設定調試特權。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.