Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:843回复:3

Driver Unload 例程问题!

楼主#
更多 发布于:2002-05-30 10:27
小弟刚学驱动。问题弱智大家不要笑啊 :)
我的DEVICE_EXTENSION是这样的
typedef struct _DEVICE_EXTENSION {
    CSHORT Type;
    CSHORT Size;
    PDRIVER_OBJECT MyDriver;                
//pointer to my DriverObject
    PDEVICE_OBJECT NextDeviceObject;
    PDEVICE_OBJECT RealDeviceObject;
    BOOLEAN Attached;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
然后,我写了一个unload例程,如下
VOID
DriverUnload (
IN PDRIVER_OBJECT DriverObject ) {

PDEVICE_OBJECT pDevObj;
PDEVICE_EXTENSION pDevExt;

// Loop through each device controlled by Driver
pDevObj = DriverObject->DeviceObject;

// Dig out the Device Extension from the
// Device Object
while(pDevObj!=NULL)
{
pDevExt = (PDEVICE_EXTENSION) pDevObj->DeviceExtension;

pDevObj=pDevExt->NextDeviceObject;


   if (pDevExt!=NULL) IoDeleteDevice(pDevExt->RealDeviceObject);
}
IoDeleteDevice(pDevExt->NextDeviceObject);


}
一调试就机器就重起!怎么样都改过,除非不要IoDeleteDevice和while语句,各位大哥,是哪里出了问题啊
,因该怎么写啊?  


好好学习 天天向上
zgqzxr
驱动牛犊
驱动牛犊
  • 注册日期2002-05-20
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-30 13:47
善哉善哉
洪武沿门托钵日,淮阴胯下受辱时; 贫贱不改四海志,二十年后知雄雌。 ――毕业留题
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-30 13:02
DriverUnload只需释放你分配的资源就好了。
IoDeleteDevice放到IRP_MJ_PNP::IRP_MN_REMOVE_DEVICE中处理。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地板#
发布于:2002-05-30 10:42
不出错才怪,这代码看起来就象死机的代码,调用IoDeleteDevice,你必须保证删除的东西都是你创建的东西,看了你里面一大堆的NextDeviceObject,RealDeviceObject,不知道在什么地方赋的值,具体是个什么设备,你就这么理直气壮的删了?
游客

返回顶部