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

DiG*_*GMi 6 windows hook kernel driver

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

例如,我在ZwSetValueKey上放了一个钩子来过滤注册表编写.

钩子工作得很好,但我不知道如何获得调用者SID.我发现我可以使用ExGetPreviousMode来确定调用者的模式(即用户模式还是内核模式).但是,如果调用者处于用户模式,我不确定如何确定SID.

谢谢.

eh9*_*eh9 4

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

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

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