自己定义了一个设备扩展,准备在adddevice()中调自己的函数初始化,卸载时在dispatchpnp处理IRP_MJ_PNP MN=REMOVE_DEVICE时调removedevice完成善后处理。可是只要我动了在设备扩展中分配了空间的结构的内容,如memset(),下次重...
全文
回复(5) 2002-04-01 20:20 来自版块 - 内核编程
表情
tanky我的设备扩展中有指针也有结构, 对于指针,我在adddevice中分配内存,在removedevice中释放内存,没有错误。 对于结构,只要我改变了它的内容,下次重启卸载就会出现错误。 如果是动了自定义的结构,就是页错误0Eh,如果是动了mutex,即调用 KeInitia...(2002-04-02 19:18)
jame.z你可能把设备扩展中的指针清空了,譬如MEMSET设成零,在卸装的时候又调用这个指针访问其表示的内容,结果产生缺页(0x0e)。(2002-04-02 11:25)
Tom_lyd你有没有响应IRP_MH_QUERY_REMOVE_DEVICE请求?在IRP_MN_REMOVE_DEVICE之前要先响应这个请求。 第二个,我曾碰到一个类似的问题是没有成功删除符号连接名,造成第二次启动时就出错 。(2002-04-02 11:19)
wilton也有可能是memset超出范围。 (2002-04-02 09:11)
guardee你在DEVICE_EXTENSION中包含的是结构还是结构指针??? 如果是结构那么这个内存是不用你手动释放的,如果是包含了一个结构指针,那么这个指针指向的内存就要在删除这个DEVICE_EXTENSION 对应的设备对象的时候释放这部分内存了!(2002-04-01 21:52)

返回顶部