设备事件类型

若要确定处理 WM_DEVICECHANGE 消息时的设备事件类型,请检查 wParam 参数。 wParam 的值确定 lParam 参数中特定于事件的数据的含义。 通常,特定于事件的数据标识设备,并提供有关事件的其他详细信息。 此数据的格式取决于设备类型,但前几个字节的格式始终与 DEV_BROADCAST_HDR 结构相同。 若要确定数据的格式,请检查 dbch_devicetype 成员。

每当插入设备且设备可供使用时,系统就会广播类型为 DBT_DEVICEARRIVAL(即 wParam 设置为 DBT_DEVICEARRIVAL 的 WM_DEVICECHANGE 消息)。 应用程序通常检查设备类型,并在设备合适时立即开始使用设备。

系统广播 DBT_DEVICEQUERYREMOVE 设备事件,以请求删除设备的权限。 若要确定它是否需要设备,应用程序可以显示一个对话框来提示用户提供说明。 如果应用程序确定它需要设备,则可以通过返回 BROADCAST_QUERY_DENY 来拒绝此请求并取消删除。 如果应用程序不需要设备,则必须返回 TRUE。 如果任何应用程序或驱动程序取消了先前删除设备的请求,系统会立即发送 DBT_DEVICEQUERYREMOVEFAILED 消息。

系统在删除设备之前将 DBT_DEVICEREMOVEPENDING 设备事件广播为最后一条警告。 此时,应用程序无法取消删除,因此,如果应用程序正在使用设备,则必须为其删除做好准备,以防止数据丢失。 删除网络连接时,这一点尤其重要。 应用程序必须确定其任何打开的文件或管道是否位于该连接上。 通过将消息的事件特定数据中的网络资源标识符与以前为文件和管道获取的资源标识符进行比较,可以执行此操作。 当设备已删除且不再可用时,系统会广播 DBT_DEVICEREMOVECOMPLETE 设备事件。

系统广播 DBT_QUERYCHANGECONFIG 设备事件,以请求更改当前配置(停靠或取消停靠)的权限。 任何应用程序都可以返回 BROADCAST_QUERY_DENY 来拒绝请求并取消更改。 如果应用程序拒绝请求,系统将发送 DBT_CONFIGCHANGECANCELED 消息。 如果由于停靠或取消停靠而更改了当前配置,系统将发送 DBT_CONFIGCHANGED 消息。

每当发生特定于设备的事件时,系统就广播 DBT_DEVICETYPESPECIFIC 设备事件。

驱动程序可以创建自己的自定义事件类型。 自定义事件仅发送到已在特定设备上注册设备事件通知的应用程序,并且只能由内核模式驱动程序启动。 有关详细信息,请参阅 DBT_CUSTOMEVENT