重要
本文面向程序员。 如果你的客户遇到蓝牙设备安装问题,请参阅 在 Windows 中配对蓝牙设备
蓝牙配置文件驱动程序有两种安装类型:
- 远程设备发布其服务,计算机连接到该设备的客户端安装。 示例包括:鼠标、键盘和打印机。
- 服务器端安装是指计算机播发服务,远程设备可以连接到计算机以使用这些服务。 例如,供应商可以创建服务器端安装程序,使移动设备能够连接到计算机的打印机并进行打印。
这两种安装类型需要不同的安装过程。
安装客户端侧个人档案驱动程序
想要使用启用蓝牙的设备的用户将设备置于计算机范围内,并使用客户端配置文件驱动程序的以下安装顺序启动从计算机到远程设备的连接。
- 在控制面板中选择“添加蓝牙设备”,以查找计算机范围内的所有设备。
- 选择要配对的设备。
- 将设备与本地无线电配对,这可能或不涉及 PIN 交换。
- 本地无线电发出服务发现协议(SDP)查询,以识别远程设备上支持的服务。
- “找到的新硬件向导”将搜索本地硬盘和 Windows 更新上的相应驱动程序。
- 如果 “找到的新硬件向导 ”找不到适用于设备的驱动程序,它会提示用户插入配置文件驱动程序安装介质,其中包含配置文件驱动程序的设备安装信息文件(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)可帮助安装配置文件驱动程序。
有关创建和分发 INF 文件和安装驱动程序的详细信息,请参阅 创建 INF 文件 和 INF 文件节和指令。
即插即用 ID
蓝牙驱动程序堆栈根据以下模板生成硬件 ID:
- BTHENUM\{ ServiceGUID}_VID& nnnnnnnn
- BTHENUM\{ ServiceGUID}_VID& nnnnnnnn_PID& nnnn
- BTHENUM\{ ServiceGUID}_LOCALMFG& nnnn
蓝牙驱动程序堆栈根据以下模板生成兼容的 ID:
- BTHENUM\{ ServiceGUID}
ServiceGUID 是一个 16 位 GUID,扩展为 128 位 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& nnnnnn
蓝牙驱动程序堆栈可以被限制为仅加载配置文件驱动程序和软件,以便仅在特定的本地蓝牙收发器上运行,这可以通过在 INF 文件中的设备 ID 中指定 LOCALMFG 标记来实现。 例如:
BTHENUM\{00001124-0000-1000-8000-00805F9B34FB}_LOCALMFG& nnnn