我正在开发一个在 Windows 中挂钩某些功能的驱动程序(会阻止某些操作的强化驱动程序)。问题是,我想记录谁是试图运行这些操作的用户。
例如,我在 ZwSetValueKey 上添加了一个钩子,以过滤注册表写入。
钩子完美运行,但我不知道如何获取调用者 SID。我发现我可以使用 ExGetPreviousMode 确定调用者的模式(即用户模式或内核模式)。但是如果调用者处于用户模式,我不确定如何确定 SID。
谢谢。
如果这是用户模式,您将从GetCurrentProcess
or开始GetCurrentThread
,然后调用GetProcessToken
or GetThreadToken
。这将为您提供一个访问令牌,可以从中直接提取 SID。在内核模型中,线程有PsGetCurrentProcess
andZwOpenProcessTokenEx
等。
这是用户空间的等效问题:How to get Calling-Process Windows User Access Token。
我还没有测试过这个,但我希望它能让你开始。
VOID SeCaptureSubjectContext( Out PSECURITY_SUBJECT_CONTEXT) 可能是您正在寻找的内核模式 API,至少如果您有 ntifs.h 可用。