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
相关文章:
Windows 蓝牙驱动开发-安装蓝牙设备
蓝牙配置文件驱动程序有两种安装类型: 客户端安装,在此类安装中,远程设备播发其服务,并且计算机与之连接。 示例包括:鼠标、键盘和打印机;服务器端安装,在此类安装中,计算机播发服务…...
element表格有横向滚动条时产生错位或者偏移(火狐浏览器)
问题图 解决方法:给表头增加竖向滚动条的宽度 // 解决拖拽表格滚动条,错位问题 ::v-deep .el-table__header-wrapper{padding-right: 20px!important; // 滚动条宽度 }效果图如下:...
C# 下 SQLite 并发操作与锁库问题的 5 种解决方案
开篇:你是否被 SQLite 并发锁库困扰? 在当今数字化的时代浪潮中,数据已然成为了企业与开发者们手中最为宝贵的资产之一。C# 作为一门广泛应用于各类软件开发的强大编程语言,常常需要与数据库进行紧密交互,以实现数据的…...
2025封禁指定国家ip-安装xtables-addons记录
如何安装和使用 安装lux仓库(该仓库包含xtables-addons所需的依赖环境) # wget http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm # rpm -ivh lux-release-7-1.noarch.rpm 安装xtables-addons。注意:必须先安装kmod-xtables-addons,再…...
卷积神经02-CUDA+Pytorch环境安装
卷积神经02-CUDAPytorch环境安装 在使用Python进行pytorch的使用过程中遇到各种各样的版本冲突问题,在此进行记录 0-核心知识脉络 1)根据自己电脑的CUDA版本安装对应版本的Pytorch,充分的使用GPU性能2)电脑要先安装【CUDA ToolKi…...
高斯数据库与MySQL数据库的区别
高斯数据库与MySQL数据库的区别 在当今数据驱动的时代,选择合适的数据库管理系统(DBMS)对于项目的成功至关重要。高斯数据库和MySQL作为两款广泛使用的数据库系统,各自具有独特的特点和优势,适用于不同的应用场景。本…...
【 PID 算法 】PID 算法基础
一、简介 PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。也就是说,PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。 顾名思义,…...
【AI】【RAG】如何通过WebUI部署与优化RAG问答系统
RAG(Retrieval-Augmented Generation)是一种通过知识库构建的问答系统,尽管它并非严格意义上的机器学习模型,但其高效构建专业问答体系的能力在实际应用中备受关注。本文将详细介绍如何通过WebUI部署RAG功能,以及提升RAG效果的关键技巧。 什么是RAG? RAG是一种结合检索技…...
SpringBoot之OriginTrackedPropertiesLoader类源码学习
源码解析 /*** 作用是从给定的资源(如文件或输入流)中加载 .properties 文件,* 并将属性键值对转换为带有来源信息(origin)的 OriginTrackedValue 对象。*/ public class OriginTrackedPropertiesLoader {private fin…...
51单片机 AT24C02(I2C总线)
存储器 随机存储 RAM 只读存储 ROM AT24C02芯片 是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息 存储材质:E2PROM 通讯接口:I2C总线 容量:256字节 I2C总线 一种通用的数据总线 两根通信线…...
Shell正则表达式与文本处理三剑客(grep、sed、awk)
一、正则表达式 Shell正则表达式分为两种: 基础正则表达式:BRE(basic regular express) 扩展正则表达式:ERE(extend regular express),扩展的表达式有、?、|和() 1.1 基本正则表…...
Docker Desktop 中安装 MySQL 并开启远程访问的详细教程
是在 Docker Desktop 中安装 MySQL 并开启远程访问的详细教程: 一、安装 MySQL 容器 拉取 MySQL 镜像: docker pull mysql:latest这将从 Docker Hub 上拉取最新版本的 MySQL 镜像。如果你想使用特定版本的 MySQL,可以将 latest 替换为具体…...
计算机网络 (39)TCP的运输连接管理
前言 TCP(传输控制协议)是一种面向连接的、可靠的传输协议,它在计算机网络中扮演着至关重要的角色。TCP的运输连接管理涉及连接建立、数据传送和连接释放三个阶段。 一、TCP的连接建立 TCP的连接建立采用三次握手机制,其过程如下&…...
麦田物语学习笔记:构建游戏的时间系统
基本流程 1.代码思路 (1)新建一个TimeManager.cs (2)创建枚举变量来表示四季,在TimeManager里需要的变量有: 游戏内的秒,分钟,小时,天,月,年;游戏内的季节;控制一个季节有多少个月;控制时间的暂停;计时器tikTime (3)在Settings里添加计时器的阈值,以及各个时间的进位 (4)初始化…...
Tauri教程-进阶篇-第二节 命令机制
“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第五章 Tauri的进阶教程 第二节…...
candb++ windows11运行报错,找不到mfc140.dll
解决问题记录 mfc140.dll下载 注意:放置位置别搞错了...
提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息
网络和IP地址计算器 https://www.sojson.com/convert/subnetmask.html提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息。 子网掩码转换 子网掩码 /26 的含义二进制表示:/26 表示前 26 位是网络部分,剩下的 6 位是主机部分。对应的子网掩码为 255…...
vscode离线安装插件--终极解决方案
目录 离线安装插件安装方法 vscode连接远程服务器中的docker远程连接python jupyter开发 离线安装插件 使用vscode开发过程中,有一些内网服务器没法连接外网,造成安装插件不方便,网络上很多文章提供了很多方法,比较常见的一种是&…...
LabVIEW启动时Access Violation 0xC0000005错误
问题描述 在启动LabVIEW时,可能出现程序崩溃并提示以下错误:Error 0xC0000005 (Access Violation) Access Violation错误通常是由于权限不足、文件冲突或驱动问题引起的。以下是解决此问题的全面优化方案: 解决步骤 1. 以管理员身份运行…...
string(一)
一、了解string 可以看成是字符顺序表。 二、string遍历方式 1、下标[ ] 重载了[] for(int i 0; i < s.size(); i) {cout << s[i]; } 2、迭代器 auto it s.begin(); while(it ! s.end()) {cout << *it;it; } 3、范围for for(auto ch : s) {cout <&l…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
