windows-蓝牙驱动开发-蓝牙软件无线电开关函数原型

注意:从 Windows 8.1 开始,供应商不再需要在软件 DLL 中实现无线电开/关功能(对于蓝牙 4.0 无线电),因为操作系统现在可处理此功能。 即使存在,Windows 8.1 也会忽略任何此类 DLL。

对于 Windows 8,蓝牙无线电必须支持开/关软件功能。 为了让供应商获得更大的灵活性,蓝牙媒体无线电管理器支持插件,以允许用户公开此功能。

若要提供此 DLL 插件,必须完成两项操作。

必须创作 DLL,以导出正确的函数。必须在计算机上注册 DLL。 DLL 负责保留无线电状态,包括跨系统重启 DLL 必须导出两个函数:

BluetoothEnableRadio:无线电支持 DLL 会实现 BluetoothEnableRadio,使 Windows 能够打开或关闭无线电电源。

复制代码
DWORD WINAPI BluetoothEnableRadio(
   BOOL fEnable
);

fEnable:设置为 TRUE 可打开无线电电源。 设置为 FALSE 可关闭无线电电源。

返回值:如果当前状态更改为 fEnable 的状态,则返回 ERROR_SUCCESS。 否则,如果未更改当前状态,则返回 WIN32 错误代码。

IsBluetoothRadioEnabled:无线电支持 DLL 会实现 IsBluetoothRadioEnabled,使 Windows 能够确定无线电电源是否打开或关闭。

复制代码
DWORD WINAPI IsBluetoothRadioEnabled(
   BOOL* pfEnabled
);

pfEnabled:指向缓冲区的指针,描述无线电电源是打开还是关闭。

返回值:如果获取了当前状态,则返回 ERROR_SUCCESS。 pfEnabled 指向的值现在包含状态。 (true 或 false)。 否则,如果未获取当前状态,则返回 WIN32 错误代码。 pfEnabled 指向的值未定义,不应使用

DLL 注册

若要在菜单和控制面板小程序中启用软件无线电开关控件,必须注册此支持 DLL。 将以下注册表值设置为相关 DLL 的完整路径(可能包括环境变量)。

键:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Radio Support

值名称:"SupportDLL"

值数据:(路径)

示例:

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\BTHPORT\\Parameters\\Radio Support

"SupportDLL"="C:\Program Files\Fabrikam\BthSupport.dll"

需要在安全位置(如 C:\Program Files\Fabrikam)安装 DLL。

要求和建议

虽然这种设计允许灵活地控制硬件,但要求关闭状态不会导致无线电的传输/接收。 此外,建议关闭无线电电源以使其进入最低功率状态,以节省能源,并将其从总线中移除,以允许卸载蓝牙堆栈。

BluetoothEnableRadio 只能在发生无线电状态更改后返回结果。 此外,由于此 DLL 扩展旨在 Windows 内部提供统一无线电/关闭基础结构,因此应为 Windows 组件保留 DLL 的使用。 DLL 负责确保在以下情况下返回正确的结果:非 Windows 组件也使用 DLL,或者实现了一个硬件开关,该开关可以在蓝牙媒体无线电管理器的上下文外关闭无线电(例如,硬连接开关以关闭无线电)。

Windows 8 无线电管理要求 DLL 在本地服务帐户上下文中执行其指令。 在此上下文中,DLL 将在本地计算机上具有最低权限,这通常小于普通用户上下文的特权。

无线电支持 DLL 应执行适当的检查,以确保在执行任何操作之前存在相应的硬件。 如果在系统上找不到相应的硬件,无线电支持 DLL 应返回相应的错误代码。

蓝牙软件无线电示例源

注册表文件

Windows 注册表编辑器版本 5.00

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\BthServ

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\BthServ\\Parameters

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\BthServ\\Parameters\\Radio Support

"SupportDLL"=hex(2):25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,\

00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,\

72,00,73,00,75,00,70,00,70,00,6f,00,72,00,74,00,2e,00,64,00,6c,00,6c,00,00,\

00

MAKEFILE

复制代码
###### --------------------------------------------------------------------

######

###### Copyright(c) Microsoft Corp., 2012

######

###### --------------------------------------------------------------------

!ifdef NTMAKEENV

!INCLUDE $(NTMAKEENV)\makefile.def

!else # NTMAKEENV

!error - You forgot to set your build environment

!endif

RSupport.cpp

/*++ Copyright (c) Microsoft Corporation. All rights reserved.

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY

KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE

IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR

PURPOSE.

Module Name:

Rsupport.cpp

Abstract:

--*/

DWORD WINAPI IsBluetoothRadioEnabled(BOOL* pfEnabled)

{

// If the radio is enabled, set *pfEnabled = TRUE else set *pfEnabled = FALSE

return ERROR_SUCCESS;

}

DWORD WINAPI BluetoothEnableRadio(BOOL fEnable)

{

if (fEnabled)

{

// Enable the radio here

}

else

{

// Disable the radio here

}

return ERROR_SUCCESS;

}

RSupport.def

/*++

Copyright (c) Microsoft Corporation. All rights reserved.

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY

KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE

IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR

PURPOSE.

Module Name:

Rsupport.def

Abstract:

--*/

LIBRARY rsupport.dll

EXPORTS

BluetoothEnableRadio

IsBluetoothRadioEnabled

Sample SOURCES

#

# Copyright 2012 - Microsoft Corporation

#

TARGETNAME=rsupport

TARGETPATH=obj

TARGETTYPE=DYNLINK

UMTYPE=windows

USE_MSVCRT=1

TARGETLIBS= \

$(SDK_LIB_PATH)\kernel32.lib \

$(SDK_LIB_PATH)\user32.lib \

C_DEFINES=-DWIN32 -DUNICODE -D_UNICODE

SOURCES = RSupport.cpp
相关推荐
q***575034 分钟前
Redis服务安装自启动(Windows版)
数据库·windows·redis
A-刘晨阳5 小时前
【Windows压力测试工具】 - 使用微软官方工具进行压测 cpu、内存
运维·windows·测试工具·压力测试·cpustres·testlimit
EQ-雪梨蛋花汤5 小时前
【工具】如何使用 Windows BAT 批处理脚本递归删除指定后缀文件(附:完整代码,复制可用)
windows
sleP4o5 小时前
Windows 11 24H2 配置WSL2 + Docker
windows·docker·容器
潘晓可5 小时前
WSL - 解决虚拟专用网络连接下无法访问网络的问题
windows
张较瘦_6 小时前
Windows Docker使用实战教程
windows·docker·容器
邮专薛之谦11 小时前
Kotlin 全知识点复习+详细梳理
windows·kotlin·android studio·idea
自动化代码美学12 小时前
【Python3.13】官网学习之控制流
开发语言·windows·python·学习
q***333717 小时前
新版 WSL2 2.0 设置 Windows 和 WSL 镜像网络教程
windows
赖small强19 小时前
【Linux驱动开发】Linux MMC子系统技术分析报告 - 第二部分:协议实现与性能优化
linux·驱动开发·mmc