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

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.lryc.cn/news/521458.html

相关文章:

  • element表格有横向滚动条时产生错位或者偏移(火狐浏览器)
  • C# 下 SQLite 并发操作与锁库问题的 5 种解决方案
  • 2025封禁指定国家ip-安装xtables-addons记录
  • 卷积神经02-CUDA+Pytorch环境安装
  • 高斯数据库与MySQL数据库的区别
  • 【 PID 算法 】PID 算法基础
  • 【AI】【RAG】如何通过WebUI部署与优化RAG问答系统
  • SpringBoot之OriginTrackedPropertiesLoader类源码学习
  • 51单片机 AT24C02(I2C总线)
  • Shell正则表达式与文本处理三剑客(grep、sed、awk)
  • Docker Desktop 中安装 MySQL 并开启远程访问的详细教程
  • 计算机网络 (39)TCP的运输连接管理
  • 麦田物语学习笔记:构建游戏的时间系统
  • Tauri教程-进阶篇-第二节 命令机制
  • candb++ windows11运行报错,找不到mfc140.dll
  • 提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息
  • vscode离线安装插件--终极解决方案
  • LabVIEW启动时Access Violation 0xC0000005错误
  • string(一)
  • 计算机网络 (41)文件传送协议
  • C++ STL之容器介绍(vector、list、set、map)
  • redisson 连接 redis5报错 ERR wrong number of arguments for ‘auth‘ command
  • LeetCode:131. 分割回文串
  • React-useState讲解
  • 混币器是什么,波卡跨链交易平台
  • 【PHP】双方接口通信校验服务
  • Web第一次作业
  • CentOS 6.8 安装 Nginx
  • 网络网络层ICMP协议
  • 当父级元素设置了flex 布局 ,两个子元素都设置了flex :1, 但是当子元素放不下的时候会溢出父元素怎么解决 (css 样式问题)