修改发送 DBT_DEVICEREMOVECOMPLETE 之前的时间

Modify time until DBT_DEVICEREMOVECOMPLETE is sent

有没有办法触发 Windows 的 USB 设备发现,以便更快地检测到已移除的设备?

我有一个 USB 串行调制解调器,我拔掉了它(USB 插头,不是串行的)。我想检测 DBT_DEVICEREMOVECOMPLETE 事件,该事件在检测到拔出时立即发送(这就是我的假设)。事件的检测按预期工作,有时在删除后 1 秒发送,有时在删除后几分钟发送。

有没有办法减少刷新间隔,或者有其他方法可以更快地发送此事件?

好吧,这里的问题是 DBT_DEVICEREMOVECOMPLETE 是在 Windows 确定它检测到删除后发送的,您无法影响它,至少在一般情况下不会。有多种因素使 Windows 更快或更慢地执行此操作(设备类型、当前 "data flow" 设备、设备本身),并且它在 OS 版本之间也有所不同。在某些情况下,我发现在某种程度上有帮助的是从注册表中删除对之前插入该 USB 端口的 USB 设备的引用(有各种实用程序)。

在极端情况下,由于这是一个 Windows 广播消息(非排队),在处理前一个消息之前不会再发送另一个消息。因此,您可能根本收不到它!要解决这个问题,请保持消息处理快速和简单,并且不要在调试时在那里设置断点。

另外,有一个单独的 Windows 和线程用于处理 USB 设备 arrival/removal 通知的特定目的可能会有所帮助。

但是,根据我的经验,轮询无济于事,因为主要问题似乎出在 Windows 用于检测删除的标准中。从该事件到您收到消息的时间很短。当然,在您的情况下,这可能不是真的 - 要找出答案,请使用像 SysInternals Process Monitor 这样的工具。根据您在那里看到的情况,您可能可以采取一些措施来加快速度。