2012-11-03 30 views
6

我正在開發一個驅動程序,它在windows中掛鉤了一些函數(強化驅動程序將阻止某些操作)。問題是,我想記錄哪個用戶試圖運行這些操作。如何在內核模式鉤子中獲取調用者SID? (windows)

例如,我已經在ZwSetValueKey上設置了一個鉤子來過濾註冊表寫入。

該鉤子完美工作,但我不知道如何獲得調用者SID。我發現我可以使用ExGetPreviousMode來確定調用者的模式(即用戶模式還是內核模式)。但是,如果調用者處於用戶模式,我不確定如何確定SID。

謝謝。

回答

4

如果這是用戶模式,您需要從GetCurrentProcessGetCurrentThread開始,然後撥打GetProcessTokenGetThreadToken。這會得到一個訪問令牌,從中直接得到SID can be extracted。在內核模型中,有PsGetCurrentProcessZwOpenProcessTokenEx等線程。

下面是用戶空間的等效問題:How to get Calling-Process Windows User Access Token

我還沒有測試過這個,但我希望它能讓你開始。

+1

最好使用線程令牌代替進程令牌(因爲模擬),但主要思想是相同的。謝謝。 – DiGMi

相關問題