【问题标题】:WinAPI - CreateFile fails, invalid path for Bluetooth LE serviceWinAPI - CreateFile 失败,蓝牙 LE 服务的路径无效
【发布时间】:2025-12-10 06:00:02
【问题描述】:

我有一个小程序可以枚举 BLE 设备及其服务。 使用 SetupDiGetDeviceProperty 我能够获取这些 BLE 设备的子服务,或者更确切地说是它们的设备实例路径,如下所示:

BTHLEDevice{00001801-0000-1000-8000-00805f9b34fb}_dbc664e1783f\9&1b8d685b&c&0008

现在,如何将这个路径与 CreateFile 一起使用?我试过把“\\?\”放在开头,但是不行,CreateFile失败,GetLastError返回3,表示指定的路径不存在.

HANDLE handle = CreateFile(L"\\\\?\\BTHLEDevice{00001801-0000-1000-8000-00805f9b34fb}_dbc664e1783f\\9&1b8d685b&c&0008",
                        GENERIC_WRITE    | GENERIC_READ,
                        FILE_SHARE_WRITE | FILE_SHARE_READ,
                        NULL,
                        OPEN_EXISTING,
                        NULL,
                        NULL);
if (handle == INVALID_HANDLE_VALUE) printf("Error: 0x%X\n", GetLastError());

【问题讨论】:

  • 请出示您的代码
  • 这真的取决于你到底想看到什么。代码量比较大。
  • 一次调用CreateFile 就足够简单了。创建一个演示问题的简短示例不会有任何问题。如果您需要帮助,请提供 MCVE。
  • 好的,我在原帖中添加了sn-p
  • 还有为什么觉得ERROR_PATH_NOT_FOUND不应该出现

标签: windows winapi bluetooth-lowenergy


【解决方案1】:

原来由 DEVPKEY_Device_Children 给出的路径不适用于 CreateFile。 我能够通过按 GUID 枚举所有接口并输出它们的路径来验证这一点。问题解决了。

【讨论】:

  • 那么您是否设法创建了 BLE 设备的句柄?如果是这样,你是怎么做到的?
  • 记不太清了,好久不见了,看一下'SetupDiGetDeviceInterfaceDetail',我是用它来提取接口的路径的。