iriszhu
驱动牛犊
驱动牛犊
  • 注册日期2003-10-06
  • 最后登录2009-05-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2365回复:5

问大家这两个例程的区别

楼主#
更多 发布于:2003-12-12 09:32
我在driverentry里面定义了:
pDriverObject->DriverUnload = DriverUnload;
然后在即插即用里面又定义了
case IRP_MN_REMOVE_DEVICE://删除设备(对象)
   return HandleRemoveDevice( pDO, pIrp );
这两个例程有什么区别呀;
我用softice跟踪,当在设备管理器里删除驱动的时候,调用的是即插即用里的HandleRemoveDevice;那什么时候调用DriverUnload哪?
lsmhg
禁止发言
禁止发言
  • 注册日期2002-10-12
  • 最后登录2016-01-19
  • 粉丝0
  • 关注0
  • 积分5989分
  • 威望29491点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-12 12:05
用户被禁言,该主题自动屏蔽!
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
板凳#
发布于:2003-12-12 12:18
我在driverentry里面定义了:
pDriverObject->DriverUnload = DriverUnload;
然后在即插即用里面又定义了
case IRP_MN_REMOVE_DEVICE://删除设备(对象)
   return HandleRemoveDevice( pDO, pIrp );
这两个例程有什么区别呀;
我用softice跟踪,当在设备管理器里删除驱动的时候,调用的是即插即用里的HandleRemoveDevice;那什么时候调用DriverUnload哪?


DriverUnload是在Driver被卸载的时候调用的。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-12-12 12:54
一个是device的,一个是driver的
iriszhu
驱动牛犊
驱动牛犊
  • 注册日期2003-10-06
  • 最后登录2009-05-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-12 14:28
我又跟踪了一遍,当是卸载设备的时候,只是发送了PNP的remove device消息,当卸载驱动程序的时候,一开始是进入pnp的处理函数,调用处理remove_device的过程,然后才调用DriverUnload函数
liuiang
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2007-11-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-13 13:50
我又跟踪了一遍,当是卸载设备的时候,只是发送了PNP的remove device消息,当卸载驱动程序的时候,一开始是进入pnp的处理函数,调用处理remove_device的过程,然后才调用DriverUnload函数


本来就是这个顺序的么,DriverUnload是与DriverEntry相对应的,
驱动被加载到内存中,运行DriverEnty,从内存中卸载驱动,
就会调用DriverUnload,而Remove_device是与AddDevice相对应的,
所以整过过程次序是:
DriverEntry    !驱动载入到内存中
AddDevice      !系统检测到设备,然后执行
Remove_device  !设备从系统中移除
DriverUnload   !驱动从内存中卸载

对于直接卸载驱动,肯定先会Remove_device,移除所有的应用
该驱动的设备,最后才能移除驱动。
被上帝遗忘的天使......
游客

返回顶部