tanky
驱动牛犊
驱动牛犊
  • 注册日期2002-03-04
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1387回复:5

设备扩展的问题

楼主#
更多 发布于:2002-04-01 20:20
自己定义了一个设备扩展,准备在adddevice()中调自己的函数初始化,卸载时在dispatchpnp处理IRP_MJ_PNP MN=REMOVE_DEVICE时调removedevice完成善后处理。
可是只要我动了在设备扩展中分配了空间的结构的内容,如memset(),下次重启后,卸载时就会出现页错误PAGE FAULT(0EH)或者Kebugcheckex error=50,p2=0,p4=0的错误,不知是怎么回事。
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-01 21:52
你在DEVICE_EXTENSION中包含的是结构还是结构指针???
如果是结构那么这个内存是不用你手动释放的,如果是包含了一个结构指针,那么这个指针指向的内存就要在删除这个DEVICE_EXTENSION 对应的设备对象的时候释放这部分内存了!
wilton
驱动牛犊
驱动牛犊
  • 注册日期2001-04-23
  • 最后登录2005-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-02 09:11
也有可能是memset超出范围。
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-02 11:19
你有没有响应IRP_MH_QUERY_REMOVE_DEVICE请求?在IRP_MN_REMOVE_DEVICE之前要先响应这个请求。
第二个,我曾碰到一个类似的问题是没有成功删除符号连接名,造成第二次启动时就出错 。
Tom_lyd
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-02 11:25
你可能把设备扩展中的指针清空了,譬如MEMSET设成零,在卸装的时候又调用这个指针访问其表示的内容,结果产生缺页(0x0e)。
tanky
驱动牛犊
驱动牛犊
  • 注册日期2002-03-04
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-02 19:18
我的设备扩展中有指针也有结构,
对于指针,我在adddevice中分配内存,在removedevice中释放内存,没有错误。
对于结构,只要我改变了它的内容,下次重启卸载就会出现错误。
如果是动了自定义的结构,就是页错误0Eh,如果是动了mutex,即调用 KeInitializeMutex(),就会出现KeBugCheckEx error=50
总之就是修改了在设备扩展中分配了空间的内容就会出错
游客

返回顶部