当前位置: 首页 > article >正文

Windows 蓝牙驱动开发-安装蓝牙设备

蓝牙配置文件驱动程序有两种安装类型:

  • 客户端安装,在此类安装中,远程设备播发其服务,并且计算机与之连接。 示例包括:鼠标、键盘和打印机;
  • 服务器端安装,在此类安装中,计算机播发服务,并且远程设备可以连接到计算机以使用这些服务;

例如,供应商可以创作服务器端安装,使移动设备能够打印到附加到计算机的打印机。这两种安装类型需要不同的安装过程。

安装客户端配置文件驱动程序

想要使用启用蓝牙的设备的用户将设备置于计算机范围内,并使用客户端配置文件驱动程序的以下安装序列启动从计算机到远程设备的连接。

  • 在“控制面板”中选择“添加蓝牙设备”以查找计算机范围内的所有设备;
  • 选择要与之配对的设备;
  • 将设备与本地无线电配对,这可能涉及也可能不涉及 PIN 交换;
  • 本地无线电会发出 SDP 查询,以识别远程设备上支持的服务;
  • “找到新硬件向导”将搜索本地硬盘驱动器和 Windows Update 上的相应驱动程序;
  • 如果“找到新硬件向导”找不到适用于设备的驱动程序,它会提示用户插入配置文件驱动程序安装介质,其中包含配置文件驱动程序的设备安装信息文件(INF 文件);

安装服务器端配置文件驱动程序

蓝牙驱动程序堆栈支持蓝牙 SIG 定义的服务 GUID,以及蓝牙 SIG 未定义的自定义 GUID。

随 Microsoft Windows SDK 一起提供的 guidgen.exe 工具可用于创建自定义 GUID。

必须编写用户模式安装应用程序,以公开远程蓝牙设备可以使用的计算机功能。

安装应用程序必须与蓝牙驱动程序堆栈通信,才能为要公开的功能创建服务 GUID。 供应商在应用程序及其设备安装 INF 文件中指定服务 GUID。

安装应用程序必须调用用户模式 API BluetoothSetLocalServiceInfo。 在应用程序可以调用此 API 之前,应用程序必须具有 SE_LOAD_DRIVER_NAME 安全特权。 下面的代码示例演示如何获取此特权。 请注意,该示例不演示错误处理。

HANDLE procToken;
LUID luid;
TOKEN_PRIVILEGES tp;

OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &procToken);

LookupPrivilegeValue(NULL, SE_LOAD_DRIVER_NAME, &luid);

Tp.PrivilegeCount = 1;
Tp.privileges[0].Luid = luid;
Tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(procToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD)NULL)

配置文件驱动程序 INF 文件

配置文件驱动程序的 INF 文件包含有关客户端安装蓝牙设备的信息。 对于服务器端安装,INF 文件会指定与安装应用程序创建的服务 GUID 对应的设备 ID。 所有蓝牙设备都是蓝牙类的成员。 蓝牙类安装程序 (Bthci.dll) 可协助安装配置文件驱动程序。

即插即用 ID

蓝牙驱动程序堆栈会根据以下模板生成硬件 ID:

  • BTHENUM\{ ServiceGUID}_VID& nnnnnnnn
  • BTHENUM\{ ServiceGUID}_VID& nnnnnnnn_PID& nnnn
  • BTHENUM\{ ServiceGUID}_LOCALMFG& nnnn

蓝牙驱动程序堆栈会根据以下模板生成兼容的 ID:

  • BTHENUM\{ ServiceGUID}

ServiceGUID 是扩展为 128 位 GUID 的 16 位 GUID,由蓝牙规范定义。 例如,{00001124-0000-1000-8000-00805F9B34FB} 对应于 HID 设备。

  • VID& 后面的八位数字对应于供应商 ID 代码;
  • PID& 后面的四位数字对应于产品 ID 代码;
  • LOCALMFG& 后面的四位数字对应于本地蓝牙无线电制造商;
  • VID/PID 和 LOCALMFG 标记彼此独立;

最通用的设备 ID 本身是 ServiceGUID。 例如:

BTHENUM\{00001124-0000-1000-8000-00805F9B34FB}

通过在远程设备和 INF 文件中使用即插即用 ID,可以将蓝牙驱动程序堆栈限制为加载配置文件驱动程序和软件,以便仅在特定版本的远程设备上运行。 仅当设备发布堆栈可以使用 SDP 检测到的即插即用 ID 时,蓝牙驱动程序堆栈才会生成 VID/PID 对。 例如:

BTHENUM\{00001124-0000-1000-8000-00805F9B34FB}_VID& nnnnnnnn_PID& nnnn

可以通过在 INF 文件中的设备 ID 中指定 LOCALMFG 标记,将蓝牙驱动程序堆栈限制为加载配置文件驱动程序和软件,以便仅在特定的本地蓝牙无线电上运行。 例如:

BTHENUM\{00001124-0000-1000-8000-00805F9B34FB}_LOCALMFG& nnnn

 


http://www.kler.cn/a/505768.html

相关文章:

  • ImageSharp图形库学习
  • jenkins-系统配置概述
  • c++领域展开第十二幕——类和对象(STL简介——简单了解STL)超详细!!!!
  • 蓝桥与力扣刷题(709 转换成小写字母)
  • 在 Azure 100 学生订阅中新建 Ubuntu VPS 并通过 Docker 部署 pSQL 服务器
  • C#,图片分层(Layer Bitmap)绘制,反色、高斯模糊及凹凸贴图等处理的高速算法与源程序
  • java 设计模式 工厂模式
  • JavaScript前端高效性能优化策略:防抖和节流的详细介绍
  • 【JavaWeb】JavaWeb入门之Tomcat详解
  • CNCF云原生计算基金会
  • Yolo 对象检测系列更新无止境,Ultralytics 发布 Yolov11 更快,更强
  • 0115java面经
  • 【Rust自学】12.7. 使用环境变量
  • SpringBoot开发——Spring Boot 自动化测试框架的高效运用
  • Java并发编程——线程池(基础,使用,拒绝策略,命名,提交方式,状态)
  • Mybatis-底层是如何解决sql注入增删改查操作--删除操作
  • VUE请求返回二进制文件流下载文件例子
  • doc、pdf转markdown
  • STM32H7通过CUBEMX初始化移植LWIP,DHCP建立RAW TCP服务器,不停发成功
  • Spring MVC复杂数据绑定-绑定集合
  • VUE3 + Ant Design Vue4 开发笔记
  • MySQL表的增删改查(进阶)-下篇
  • 【Qt】QThread总结
  • flutter R库对图片资源进行自动管理
  • c#删除文件和目录到回收站
  • 【Linux系统编程】—— 自动化构建工具Makefile指南