6

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

例如,我在 ZwSetValueKey 上添加了一个钩子,以过滤注册表写入。

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

谢谢。

4

2 回答 2

4

如果这是用户模式,您将从GetCurrentProcessor开始GetCurrentThread,然后调用GetProcessTokenor GetThreadToken。这将为您提供一个访问令牌,可以从中直接提取 SID。在内核模型中,线程有PsGetCurrentProcessandZwOpenProcessTokenEx等。

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

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

于 2012-11-07T21:45:49.477 回答
0

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

于 2018-09-27T13:05:46.080 回答