【USB】windows热插拔通知接口分析

这篇具有很好参考价值的文章主要介绍了【USB】windows热插拔通知接口分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口介绍

概述

  • window提供了RegisterDeviceNotificationW方法,可以用来监听设备的热插拔事件。文章来源地址https://www.toymoban.com/news/detail-448062.html

    HDEVNOTIFY RegisterDeviceNotificationW(
      [in] HANDLE hRecipient,
      [in] LPVOID NotificationFilter,
      [in] DWORD  Flags
    );
    
    • hRecipient,表示用来接收通知的窗口或者服务。
    • NotificationFilter,过滤器,用来过滤设备通知。
    • Flags,用来说明hRecipient是个窗口还是服务。
    • 通知必须绑定到窗口或者服务,也就是说在监听之前,你必须先创建一个窗口或者服务。

过滤器

介绍

  • NotificationFilter其基本结构为DEV_BROADCAST_HDR,具体结构根据dbch_devicetype字段值的不同而不同,
    typedef struct _DEV_BROADCAST_HDR {
      DWORD dbch_size;
      DWORD dbch_devicetype;
      DWORD dbch_reserved;
    } DEV_BROADCAST_HDR;
    
  • dbch_devicetype字段可能的值如下:
    【USB】windows热插拔通知接口分析

举例

  • 我们以dbch_devicetype的值是DBT_DEVTYP_DEVICEINTERFACE为例,其对应的NotificationFilter是DEV_BROADCAST_DEVICEINTERFACE_A,如下:
    typedef struct _DEV_BROADCAST_DEVICEINTERFACE_A {
      DWORD dbcc_size;
      DWORD dbcc_devicetype;
      DWORD dbcc_reserved;
      GUID  dbcc_classguid;
      char  dbcc_name[1];
    } DEV_BROADCAST_DEVICEINTERFACE_A;
    
  • dbcc_classguid这个是GUID用来表示我们所关注的事件。那么什么是GUID?其全称为globally unique identifier,就像它的名字一样,GUID是一个系统级全局的唯一标识符。
  • USB相关的GUID有如下一些:
    • GUID_DEVINTERFACE_USB_DEVICE表示连接到HUB的USB设备。
    • GUID_DEVINTERFACE_USB_HOST_CONTROLLER表示USB主机控制器。
    • GUID_DEVINTERFACE_USB_HUB表示USB HUB。

接收通知

  • 上面都是在说如何监听热插拔通知,那么我们监听好了之后,到底怎么样接收插拔通知,以及如何解析这些通知呢?
  • 上面我们说了,监听通知时必须绑定到窗口或者服务。也就是和 RegisterDeviceNotificationW这个接口的hRecipient参数有关系。所以我们需要了解一些窗口相关的知识。

创建窗口

  • 首先我们需要通过接口RegisterClassA创建一个类。该接口包含如下参数:
    typedef struct tagWNDCLASSA {
      UINT      style;
      WNDPROC   lpfnWndProc;
      int       cbClsExtra;
      int       cbWndExtra;
      HINSTANCE hInstance;
      HICON     hIcon;
      HCURSOR   hCursor;
      HBRUSH    hbrBackground;
      LPCSTR    lpszMenuName;
      LPCSTR    lpszClassName;
    } WNDCLASSA, *PWNDCLASSA, *NPWNDCLASSA, *LPWNDCLASSA;
    
    • lpfnWndProc,这个参数是窗口的回调函数。也就是是说如果有通知消息发给窗口,那么就会调用该回调来处理。也就是说我们上面订阅的通知会被发送给该函数处理。
    • hInstance,该窗口所属的实例。
    • lpszClassName, 窗口类名,这个很重要。我们创建好这个类之后,后面才能基于这个类创建窗口。
  • 接着我们就可以通过CreateWindowEx接口创建一个窗口,该接口会返回一个 HWND ,可用于上面注册设备通知的接口。

参考文档

  • RegisterDeviceNotificationW function (winuser.h)
  • Windows监听USB热插拔事件
  • 硬件检测:安装、停用
  • GUID structure (guiddef.h)
  • GUIDs
  • GUID_DEVINTERFACE_USB_DEVICE

到了这里,关于【USB】windows热插拔通知接口分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • R730服务器热插拔换磁盘(raid阵列)

    r730服务器发现磁盘闪橙等,说明磁盘报警了,这时候我们就要换磁盘了。 由于本服务器磁盘是raid5的阵列磁盘,所以要采用热插拔的方式换磁盘。 这边要注意的是,不能关机的时候,直接来换磁盘。 因为关机换磁盘,那个更换的磁盘不能正常在线。 所以我们必须开机换磁盘

    2024年02月08日
    浏览(45)
  • 解析Sermant热插拔能力:服务运行时动态挂载JavaAgent和插件

    本文分享自华为云社区《服务运行时动态挂载JavaAgent和插件——Sermant热插拔能力解析》,作者:华为云高级软件工程师 栾文飞 Sermant是基于Java字节码增强技术的无代理服务网格,其利用Java字节码增强技术,为宿主应用程序提供服务治理功能,以解决大规模微服务场景中的服

    2024年02月21日
    浏览(35)
  • RK35XX系列(RK3568)Camera 热插拔功能 调试记录

    SOC:RK3568 system:Android12 kernel:kernel-4.19 芯片:NVP6158C xs9922 目前我的主板上NVP6158接入4路Camera走DVP通道,xs9922接入4路AHDCamera走mipi通道 RK kernel-4.19支持xs9922 nvp6158c驱动路径       drivers/media/i2c/xs9922/xs9922.c  drivers/media/i2c/nvp6158_drv/nvp6158_v4l2.c RK支持Camera热插拔复位机制,如果

    2024年02月13日
    浏览(38)
  • rk3588 双HDMI冲突问题与HDMI不能热插拔问题

    rk3588在开发时现在发现只能在插入HDMI时上电才能输出信号,而当开机之后,再插入HDMI显示器则无信号。 通过kernel显示,在开机后,插拔HMDI是有log提示的,说明内核能够检测到HDMI的插拔动作。 首先先排查软件问题,尝试重启显示进程 但还是无效果。 然后排查驱动问题,查

    2024年02月16日
    浏览(28)
  • 【深入理解SSD 实践】对NVMe SSD热插拔时,正确做法是怎样的?

    声明 主页 :元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 概念 SAS/SATA 和NVMe 区别 热插拔分类 热插拔基本原理

    2024年02月06日
    浏览(79)
  • linux 发行版中在容器内访问热插拔 U 盘的分区内容

    在 UOS 如何实现自动将 U 盘挂载到指定目录中?这篇文章中,我描述了 UOS 自动挂载 U 盘到指定目录的方式,现有的发行版处理逻辑大致相同。 当挂载位置确定后,容器内的业务逻辑要访问 U 盘分区中的内容,看上去只需要映射宿主机目录到容器内就万事大吉了,实际测试却

    2024年02月10日
    浏览(34)
  • 电池可热插拔拆卸对三防加固平板有什么意义|亿道三防onerugged

    今天我要和大家聊聊三防加固平板电脑中一个非常重要的功能——电池的可热插拔拆卸。是的,亿道三防onerugged系列产品具备这一亮点功能,给用户带来了极大的便利和灵活性。 首先,让我们来看看电池可热插拔拆卸的优势之一——双电池设计。亿道三防onerugged平板电脑采用

    2024年02月21日
    浏览(36)
  • 宁芝 NIZ 键盘开机需要重新插拔 USB 线才能使用

    宁芝 NIZ 键盘开机后无法识别到键盘,需要重新插拔 USB 线才能使用。 按住 Fn + BackSpaceE 键 5 秒,键盘会切换模式, 状态灯闪 1 次为 USB 接口;状态灯闪 2 次为 PS / 2 自动识别+ USB 手动识别(关机断电重启电脑后必须再插拔一下 USB 接口)

    2024年02月10日
    浏览(35)
  • RK3399平台入门到精通系列讲解(USB篇)UDC 层 usb_gadget_probe_driver 接口分析

    🚀返回总目录 UDC层的一项基本任务是向上层提供usb_gadget_probe_driver()接口函数。 上层调用者为composite.c中的int usb_composite_probe(struct usb_composite_driver *driver)函数,目的是usb_composite_driver 对usb_gadget_driver 进行继承。 在这里出现了关键的链表头 udc_list,该函数进行链表遍历,当发现

    2024年01月18日
    浏览(32)
  • 硬件知识积累 USB 接口 type - A type - B type - C 的介绍与功能说明 (简单介绍)

    1.1 USB 的定义 USB :   通用串行总线(英语: Universal Serial Bus,缩写:USB)是一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。最新一代是USB4,它的传输速

    2024年02月06日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包