我正在写一个内核驱动程序,应该读取(在某些情况下,还写)在内核会话空间(Win32k.sys中)一些内存地址。 我读过的另一个话题,例如在WinDbg中,我应该改变的背景下,以随机的用户进程读取内核会话空间的内存(有.process / P)。 我该怎么做,在一个内核驱动程序? 我应该创建与驾驶员通信的用户进程(这是我现在的想法,但我希望有一个更好的解决方案),或者还有一个更简单的解决方案呢?
Answer 1:
会议空间不是在系统地址空间映射(即司机分享,如果不依附于任何处理)。 那些你为什么让BSOD在访问WIN32K。
你需要通过KeStackAttachProcess附加到EPROCESS来执行此操作。 你可以用ZwQueryInformationProcess(ProcessSessionInformation)函数的会话ID。
Answer 2:
内核内存空间中的所有内核对象(就像在DOS和早期的Windows版本一个真正的/无保护模式)的共享。 内核驱动程序可以在内核空间内访问任何地址,是否属于他与否。
Answer 3:
你必须找到并连接到CSRSS进程! Win32k.sys中不仅供CSRSS所有流程的系统地址空间加载。
你应该做堆栈重视CSRSS进程。
文章来源: Reach kernel session space from kernel driver