0

我目前正在寻找一种方法来列出远程蓝牙设备公开的服务并启用它们。

通常我会使用 WindowsAPI 函数(或更可能是已知的包装器之一)来列出服务并通过 GUID (SetServiceEnable) 启用它们。

问题是,该设备公开了两个具有相同 GUID 的服务!

因此,使用 windowsAPI 函数只能启用这些服务之一。无法启用其他服务。

我想也许 WMI 可以解决问题,但我还是 WMI 的新手,找不到任何

Windows 本身能够通过服务菜单同时启用、不启用或启用特定服务。

更新 我要解决的问题是能够启用第一个或第二个服务。现在只有第一个服务(通常是我需要的服务),但我找不到启用第二个服务的解决方案(使用 Windows UI 除外)。

如果启用了这两个服务,我在 devicemanager (SPP) 中有两个 Commports。

4

1 回答 1

-1

由于我无法添加评论/问题(还没有 stackoverflow 的特权)。这是我最好的选择。

如果我理解正确的话,在服务记录中多次提供服务是无效的,对吧?您能否在蓝牙配对 UI 中右键单击设备并查看是否看到两个服务,并且您可以通过 Windows UI 启用它们?一旦启用它们,您是否会在设备管理器中看到该设备下的两个 PNP devnodes(按连接查看),它们具有您启用的两个服务的相应相反角色?(我不能尝试这个,因为我不知道我拥有的具有两个相同 UUID 的设备。)

您可能已经知道,当您在远程设备上启用服务时,您实际上并没有通过 Windows 蓝牙 API 在远程设备上启用该服务。您正在做的是告诉Windows中的核心蓝牙组件生成服务的相应相反角色。(这就是 BluetoothSetLocalServiceInfo 所做的。)例如,如果远程设备支持 A2DP 接收器,则通过启用该服务,桌面上的蓝牙服务将为该设备注册一个 A2DP 源服务,该服务会生成一个 PNP devnode 用于将 A2DP 源驱动程序匹配到安装在那个devnode上。通过禁用该服务,蓝牙服务将注销 A2DP 源 devnode 并且 PNP devnode 将被删除(有点像拔掉 USB 设备)。

根据您看到的重复配置文件,在远程设备的同一 mac 地址上匹配两个设备对象和驱动程序对象的实例可能没有意义。

我的回答(实际上并没有回答您的问题)是检查在这种情况下在桌面上启用这两项服务是否有效,并且您将使用桌面上的驱动程序。例如,A2DP 和 HFP 的捆绑将需要 A2DP 和 HFP 来同步某些行为,例如 AVDTP 挂起。根据实现和驱动程序,他们可能不会期望安装了两个 A2DP 驱动程序实例,从而导致本地驱动程序出现意外状态。

于 2012-07-02T08:22:14.200 回答