如何在内核模式钩子中获取调用者SID? (视窗)

时间:2012-11-03 18:01:18

标签: windows kernel hook driver

我正在开发一个挂钩Windows中某些功能的驱动程序(强化驱动程序会阻止某些操作)。问题是,我想记录试图运行这些操作的用户。

例如,我在ZwSetValueKey上挂钩以过滤注册表编写。

钩子完美无缺,但我不知道如何获得呼叫者SID。我发现我可以使用ExGetPreviousMode确定调用者的模式(即用户模式或内核模式)。但是,如果呼叫者处于用户模式,我真的不确定如何确定SID。

感谢。

2 个答案:

答案 0 :(得分:4)

如果这是用户模式,您可以从GetCurrentProcessGetCurrentThread开始,然后拨打GetProcessTokenGetThreadToken。这将为您提供一个访问令牌,直接从SID can be extracted。在内核模型中,线程有PsGetCurrentProcessZwOpenProcessTokenEx等。

以下是用户空间的等效问题:How to get Calling-Process Windows User Access Token

我没有测试过这个,但我希望它可以让你开始。

答案 1 :(得分:0)

VOID SeCaptureSubjectContext( Out PSECURITY_SUBJECT_CONTEXT)可能是您正在寻找的内核模式API,至少在您有ntifs.h可用的情况下。