阅读:842回复:3
Driver Unload 例程问题!
小弟刚学驱动。问题弱智大家不要笑啊 :)
我的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语句,各位大哥,是哪里出了问题啊 ,因该怎么写啊? |
|
|
沙发#
发布于:2002-05-30 10:42
不出错才怪,这代码看起来就象死机的代码,调用IoDeleteDevice,你必须保证删除的东西都是你创建的东西,看了你里面一大堆的NextDeviceObject,RealDeviceObject,不知道在什么地方赋的值,具体是个什么设备,你就这么理直气壮的删了?
|
|
板凳#
发布于:2002-05-30 13:02
DriverUnload只需释放你分配的资源就好了。
IoDeleteDevice放到IRP_MJ_PNP::IRP_MN_REMOVE_DEVICE中处理。 |
|
|
地板#
发布于:2002-05-30 13:47
善哉善哉
|
|
|