admin管理员组

文章数量:1531469

一、前言
    在无操作系统的裸机中,或者类似如DOS这样操作系统中,应用程序和硬件的交互是非常简单的。如果没有操作系统,我们访问硬件空间可能只需一条指令就行,甚至可以访问任意的内存空间或者IO空间。但是在WINDOWS操作系统中,应
    用程序与硬件间被完全隔离开来,应用程序与软件的通信就必须依赖于依赖驱动程序。有点类似于现在的网上购物,卖家相当于硬件,而卖家相当于应用程序,淘宝等类似的购物网站相当于驱动程序,而卖家与买家之间的买卖就得依赖
    于淘宝等类似的购物网站。至于为什么要把硬件层和应用程序隔开,答案是——安全。允许应用程序随意访问硬件是一件很危险的事情,除了可能会造成蓝屏死机之类的问题,还会发生密码的安全性问题。那在我们日常开发过程当中哪
    些场景需要涉及到硬件与软件的交互呢?
    
二、应用程序与硬件交互的场景
    1.读取硬件信息
      当应用程序需要与硬件进行捆绑时,就需要获取对应的硬件信息,例如触摸框绑定、MCU绑定等等,需要读取出对应硬件的信息,并与预期的信息进行比较来判断是否进行了绑定。获取MCU版本号等等。
    
    2.与硬件进行通信
      应用程序与硬件进行通信,比单纯的读取硬件信息稍微复杂一点。例如通过MCU来进行定时开关机,首先需要根据对应的信息查找指定的MCU设备,然后将对应的定时开关机指定发送给MCU,MCU收到信息之后,发送信息给应用程序,告之
    定时开关机的指定是否设置成功。这其中包含了应用程序与硬件之间的通信。
    
    3.硬件的管理
      例如磁盘的管理,我们可以自己编写应用程序对磁盘进行一系列的管理,磁盘分区、磁盘大小等等。移动设备管理工具等等都可以实现。
      
    4.其他
      当然还有很多很多啦....
     
    那么,既然我们提到了这么多得应用场景,那我们如何来实现它们呢?那接下来就不得不提SetupDi这一系列API了。
    
三、SetupDi API

    1.HidD_GetHidGuid
      函数定义
      BOOL
      Hidd_GetHidGuid(
      &guidHID 指向GUID类型的指针
      );
      HID类设备是通过GUID类型值作标识的,调用函数HidD_GetHidGuid颗获得HID设备的标识

    2.SetupDiGetClassDevs
      函数定义
    HDEVINFO
    SetupDiGetClassDevs(
    const GUID *ClassGuid,//HID类设备是通过GUID类型值作标识的,如图1.图Guid示例,通过指向Guid的指针,获取对应的设备列表。
    PCTSTR Enumerator,
    HWND h

本文标签: 硬件应用程序绑定通信