从内核驱动程序到达内核会话空间

时间:2014-03-21 11:43:52

标签: c windows kernel driver

我正在编写内核驱动程序,它应该在内核会话空间(win32k.sys)中读取(在某些情况下还会写入)一些内存地址。我已经阅读了另一个主题,例如在Windbg中我应该将上下文更改为随机用户进程以读取内核会话空间的内存(使用.process / p)。我怎么能在内核驱动程序中这样做?我应该创建一个与驱动程序通信的用户进程(这是我现在的想法,但我希望有更好的解决方案)或者有更简单的解决方案吗?

3 个答案:

答案 0 :(得分:2)

会话空间未映射到系统地址空间(驱动程序共享,如果未附加到任何进程)。那些为什么你在访问win32k时获得BSOD的原因。

您需要通过KeStackAttachProcess附加到EPROCESS才能执行此操作。您可以使用ZwQueryInformationProcess(ProcessSessionInformation)函数获取会话ID。

答案 1 :(得分:1)

内核内存空间在所有内核对象之间共享(就像DOS和早期Windows版本中的真实/不受保护的模式一样)。内核驱动程序可以访问内核空间中的任何地址,无论它是否属于他。

答案 2 :(得分:0)

您必须找到并附加到csrss进程! win32k.sys未加载到csrss的所有进程的系统地址空间中。

您应该将附加堆栈附加到csrss进程。