阅读:1642回复:5
DeviceIoContol使用METHOD_OUT_DIRECT方式为什么会导致windows2000重启
我使用METHOD_OUT_DIRECT方式进行I/O操作,在用户模式下用VirtualAlloc分配了一块内存,指针名为Buffer(PVOID型),再将这个指针作为DeviceIoContol的OutBuffer参数传递给I/O管理器。在内核代码中,我使用MmGetSystemAddressForMdl()得到Buffer在系统空间的地址,然后在对这块内存的操作中,若只对一个字节写入,并不会出现问题,但是我若用一个循环,连续对这片内存写入,则导致Windows2000重启。为什么呀?!!!
|
|
沙发#
发布于:2001-12-06 09:20
不得而知
但是据文档说MmGetSystemAddressForMdl()在2000中已经荒废了 |
|
|
板凳#
发布于:2001-12-10 10:08
重起一般来说是存储区越界,你是否分配的空间太小了?
|
|
|
地板#
发布于:2001-12-11 13:14
你是在哪里用循环的?在驱动中,在应用程序中?把相关代码帖出来。
最大可能就是内存越界了! |
|
地下室#
发布于:2001-12-12 17:10
MmGetSystemAddressForMdl()在2000中应该还能用。好好检查程序中的其它部分。在内核中使用存储器一定要小心。
|
|
5楼#
发布于:2001-12-13 14:49
DeviceIoControl+BUFFER_OUT_DIRECT时,系统自动锁定用户态的虚拟内存对应的物理内存,并提供给内核驱动程序一个Mdl, 我们可以调用MmGetSystemAddressForMdl(Mdl)得到一个内核可以使用的虚拟内存地址。
看你的说明,应该是写的时候内存越界。 请检查irpSp->Parameters.DeviceIoControl.OutputBufferLength的大小。 |
|
|