OpenProcessToken
要對一個任意進程(包括系統安全進程和服務進程)進行指定了寫相關的訪問權的OpenProcess操作,只要當前進程具有SeDeDebug權限就可以了。要是一個用戶是Administrator或是被給予了相應的權限,就可以具有該權限。可是,就算我們用Administrator帳號對一個系統安全進程執行
EN-US" >OpenProcess(PROCESS_ALL_Access,FALSE, dwProcessID)還是會遇到“訪問拒絕”的錯誤。什麼原因呢?原來在默認的情況下進程的一些訪問權限是沒有被置為可用狀態(即Enabled)的,所以我們要做的首先是使這些權限可用。與此相關的一些APIbidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">函數有OpenProcessToken、LookupPrivilegevalue、AdjustTokenPrivileges。我們要修改一個進程的訪問令牌,首先要獲得進程訪問令牌的句柄,這可以通過OpenProcessToken得到,函數的原型如下:
BOOL OpenProcessToken(
HANDLE ProcessHandle, //要修改訪問權限的進程句柄
DWord DesiredAccess, //指定你要進行的操作類型
PHANDLE TokenHandle //返回的訪問令牌指針
);
成功返回非0;-SA; mso-fareast-font-family: 宋體">
第一參數是要修改訪問權限的進程句柄;
第三個參數就是返回的訪問令牌指針;
第二個參數指定你要進行的操作類型,如要修改令牌我們要指定第二個參數為TOKEN_ADJUST_PRIVILEGES(其它一些參數可參考Platform SDK)。通過這個函數我們就可以得到當前進程的訪問令牌的句柄(指定函數的第一個參數為GetCurrentProcess()就可以了)。接著我們可以調用AdjustTokenPrivilegesso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">對這個訪問令牌進行修改。
包含頭文件Winbase.h