revival
驱动牛犊
驱动牛犊
  • 注册日期2004-07-01
  • 最后登录2010-08-04
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:999回复:0

请教设备插拔时,Driver执行过程

楼主#
更多 发布于:2004-09-16 10:59
本人的的一款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
新手上路
游客

返回顶部