【问题标题】:List and enable disabled bluetooth-services with WMI?使用 WMI 列出并启用禁用的蓝牙服务?
【发布时间】:2012-05-31 07:51:19
【问题描述】:

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

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

问题是,设备暴露了两个具有相同 GUID 的服务!

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

我认为也许 WMI 可以解决问题,但我还是 WMI 新手,找不到任何东西

Windows 本身能够通过服务菜单启用这两者、无或特定服务。

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

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

【问题讨论】:

    标签: bluetooth wmi


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • Windows 本身能够通过 servicemenu 启用这两者,没有或特定的服务。 我没有查看 devicemanager。不幸的是,我现在正在度假,要到下周才能测试任何东西。顺便说一句:它是我们使用的 FTDI 蓝牙芯片,它公开了两个 SPP,称为 SPP 和 AToverSPP。另请参阅更新。
    • 那么我认为也有办法以编程方式做到这一点。但是为什么你认为 WMI 是你的解决方案呢?我可能会遗漏一些东西。
    • 我认为 WMI 可以通过一个的方式来做到这一点。但是在检查 Windows 蓝牙 API 时,我没有找到实现目标的方法。
    猜你喜欢
    • 2019-06-21
    • 2018-04-27
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2015-12-06
    • 2016-06-22
    相关资源
    最近更新 更多