我正在開發一個驅動程序,它在windows中掛鉤了一些函數(強化驅動程序將阻止某些操作)。問題是,我想記錄哪個用戶試圖運行這些操作。如何在內核模式鉤子中獲取調用者SID? (windows)
例如,我已經在ZwSetValueKey上設置了一個鉤子來過濾註冊表寫入。
該鉤子完美工作,但我不知道如何獲得調用者SID。我發現我可以使用ExGetPreviousMode來確定調用者的模式(即用戶模式還是內核模式)。但是,如果調用者處於用戶模式,我不確定如何確定SID。
謝謝。
我正在開發一個驅動程序,它在windows中掛鉤了一些函數(強化驅動程序將阻止某些操作)。問題是,我想記錄哪個用戶試圖運行這些操作。如何在內核模式鉤子中獲取調用者SID? (windows)
例如,我已經在ZwSetValueKey上設置了一個鉤子來過濾註冊表寫入。
該鉤子完美工作,但我不知道如何獲得調用者SID。我發現我可以使用ExGetPreviousMode來確定調用者的模式(即用戶模式還是內核模式)。但是,如果調用者處於用戶模式,我不確定如何確定SID。
謝謝。
如果這是用戶模式,您需要從GetCurrentProcess
或GetCurrentThread
開始,然後撥打GetProcessToken
或GetThreadToken
。這會得到一個訪問令牌,從中直接得到SID can be extracted。在內核模型中,有PsGetCurrentProcess
和ZwOpenProcessTokenEx
等線程。
下面是用戶空間的等效問題:How to get Calling-Process Windows User Access Token。
我還沒有測試過這個,但我希望它能讓你開始。
最好使用線程令牌代替進程令牌(因爲模擬),但主要思想是相同的。謝謝。 – DiGMi