如何在内核模式下钩取(hook)Windows操作系统中的调用者SID?

6
我正在开发一个驱动程序,用于钩取Windows中的一些函数(硬化驱动程序,将阻止某些操作)。问题是,我想记录试图运行这些操作的用户是谁。
例如,我已经在ZwSetValueKey上放置了一个钩子,以过滤注册表写入。
钩子完美地工作,但我不知道如何获取调用者SID。我已经发现可以使用ExGetPreviousMode来确定调用者的模式(即用户模式或内核模式)。但如果调用方处于用户模式下,我不太确定如何确定SID。
谢谢。
2个回答

4
如果这是用户模式,您将从GetCurrentProcessGetCurrentThread开始,然后调用GetProcessTokenGetThreadToken。这将使您获得一个访问令牌,从中可以直接提取SID。在内核模式中,有PsGetCurrentProcessZwOpenProcessTokenEx等线程。

以下是用户空间的等效问题:如何获取调用进程的Windows用户访问令牌

我没有测试过这个,但我希望它能帮助您入门。


1
最好使用线程令牌而不是进程令牌(因为可以模拟身份),但主要思想是相同的。谢谢。 - Dig

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接