阅读:1136回复:5
能不能在user的外部进程中创建一个buffer使kernal mode里的driver可以访问到
因为我听说kernal mode下的地址和user mode下的地址是不一样的,
怎么样才能让他们共享一块内存呢。 |
|
沙发#
发布于:2005-01-14 10:55
kernal mode下的地址在线性地址高端
user mode下的地址在线性地址低端 看http://www.driverdevelop.com/forum/html_85053.html?1105671287 |
|
|
板凳#
发布于:2005-01-14 15:40
必须先在核心驱动中创建再锁住,才能在用户模式中用。由于驱动运行在非确定进程上下文,用户进程的地址当前可能在物理内存中,但没有映射,所以访问不到
|
|
|
地板#
发布于:2005-01-14 16:02
必须先在核心驱动中创建再锁住,才能在用户模式中用。由于驱动运行在非确定进程上下文,用户进程的地址当前可能在物理内存中,但没有映射,所以访问不到 那么在driver里建立了这个kernal mode的buffer后怎么才能在user mode下调用它呢? 我的意思是比如在内核模式里用KeInitializeSynchronizationEvent建立了一个event以后,在win32程序里可以通过OpenEvent接口来打开这个event并可以通过SetEvent或ResetEvent来设置它的signaled状态。 那么相应的在win32里面有这样的接口来打开在kernal里建立的buffer吗? |
|
地下室#
发布于:2005-01-15 08:17
是可以的。
采用METHOD_NEITHER I/O 模式的IRP, 但是使用之前先用ProbeForRead()验证一下。 |
|
5楼#
发布于:2005-01-15 10:46
[quote]必须先在核心驱动中创建再锁住,才能在用户模式中用。由于驱动运行在非确定进程上下文,用户进程的地址当前可能在物理内存中,但没有映射,所以访问不到 那么在driver里建立了这个kernal mode的buffer后怎么才能在user mode下调用它呢? 我的意思是比如在内核模式里用KeInitializeSynchronizationEvent建立了一个event以后,在win32程序里可以通过OpenEvent接口来打开这个event并可以通过SetEvent或ResetEvent来设置它的signaled状态。 那么相应的在win32里面有这样的接口来打开在kernal里建立的buffer吗? [/quote] 最简单的方法,再次通过IOCTL让核心驱动代理,微软的NT4以前版本就是这样处理图形的,但效率上有问题,所以干脆在以后版本移到核心中了 |
|
|