阅读:998回复:0
请教设备插拔时,Driver执行过程
本人的的一款USB设备。本来想在拔出USB线时不显示意外拔出的对话框,昨天来逛了一圈,找到了一些主题。以为在QueryCapabilities时将设备性能的SurpriseRemovalOK = 1即可。
我的程序是在AddDevice中即获得设备性能的, NTSTATUS HandlePnPAddDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject ) ... QueryCapabilities(deviceExtension->TopOfStackDeviceObject, &deviceExtension->DeviceCapabilities); ... //此处观察已有deviceExtension->DeviceCapabilities.SurpriseRemovalOK = 1; } 并且在PnP的Dispath函数中对IRP_MN_QUERY_CAPABILITIES没再作处理,只是输出此时deviceExtension->DeviceCapabilities.SurpriseRemovalOK的值 switch (irpStack->MinorFunction) { 。。。 case IRP_MN_QUERY_CAPABILITIES: DbgPrint("SurpriseRemoval",deviceExtension->DeviceCapabilities.SurpriseRemovalOK) . . . } 随后发现这样做仍会弹出意外删除的对话框。 我进一步想看看拔电缆的过程,发现程序并不会走到上面minorFunction中对IRP_MN_SURPRISE_REMOVAL的处理代码中,只是走到了IRP_MN_REMOVE_DEVICE。这和我一开始的理解不太一样。呵呵 我是新手,刚接触不久,那位niu哥能指引一下?? 多谢。 :D |
|
|