阅读:1387回复:5
设备扩展的问题
自己定义了一个设备扩展,准备在adddevice()中调自己的函数初始化,卸载时在dispatchpnp处理IRP_MJ_PNP MN=REMOVE_DEVICE时调removedevice完成善后处理。
可是只要我动了在设备扩展中分配了空间的结构的内容,如memset(),下次重启后,卸载时就会出现页错误PAGE FAULT(0EH)或者Kebugcheckex error=50,p2=0,p4=0的错误,不知是怎么回事。 |
|
沙发#
发布于:2002-04-01 21:52
你在DEVICE_EXTENSION中包含的是结构还是结构指针???
如果是结构那么这个内存是不用你手动释放的,如果是包含了一个结构指针,那么这个指针指向的内存就要在删除这个DEVICE_EXTENSION 对应的设备对象的时候释放这部分内存了! |
|
板凳#
发布于:2002-04-02 09:11
也有可能是memset超出范围。
|
|
地板#
发布于:2002-04-02 11:19
你有没有响应IRP_MH_QUERY_REMOVE_DEVICE请求?在IRP_MN_REMOVE_DEVICE之前要先响应这个请求。
第二个,我曾碰到一个类似的问题是没有成功删除符号连接名,造成第二次启动时就出错 。 |
|
|
地下室#
发布于:2002-04-02 11:25
你可能把设备扩展中的指针清空了,譬如MEMSET设成零,在卸装的时候又调用这个指针访问其表示的内容,结果产生缺页(0x0e)。
|
|
5楼#
发布于:2002-04-02 19:18
我的设备扩展中有指针也有结构,
对于指针,我在adddevice中分配内存,在removedevice中释放内存,没有错误。 对于结构,只要我改变了它的内容,下次重启卸载就会出现错误。 如果是动了自定义的结构,就是页错误0Eh,如果是动了mutex,即调用 KeInitializeMutex(),就会出现KeBugCheckEx error=50 总之就是修改了在设备扩展中分配了空间的内容就会出错 |
|