LUP_FLUSHCACHE - это то, что вам нужно.И да, он всегда вернет сопряженное устройство (в дополнение к обнаруженному).Я имею в виду, что если устройство, сопряженное с WSALookup, возвращает его в список, даже если оно недоступно (выключено или находится вне диапазона).
https://docs.microsoft.com/en-us/windows/desktop/bluetooth/bluetooth-and-wsalookupservicebegin-for-device-inquiry
DWORD flags = LUP_RETURN_ADDR | LUP_RETURN_NAME | LUP_RES_SERVICE | LUP_CONTAINERS | LUP_RETURN_BLOB | LUP_RETURN_TYPE | LUP_FLUSHCACHE;
Но лучший способ обнаружитьУстройства должны использовать этот набор флагов.
DWORD flags = LUP_RETURN_ADDR | LUP_CONTAINERS | LUP_FLUSHCACHE;
Также рекомендуется предоставить дополнительную информацию (BTH_QUERY_DEVICE), чтобы вы могли установить таймаут обнаружения и другие параметры
BTH_QUERY_DEVICE qDev;
qDev.LAP = 0;
qDev.length = bTimeout; // Timeout in seconds
BLOB Blb;
Blb.cbSize = sizeof(BTH_QUERY_DEVICE);
Blb.pBlobData = (PBYTE)&qDev;
QuerySet.lpBlob = &Blb;
https://docs.microsoft.com/th-th/windows/desktop/api/ws2bth/ns-ws2bth-_bth_query_device
После обнаружения завершения (обратите внимание, что WSALookupServiceBegin занимает некоторое время (блоки) до обнаружения завершения), вы можете использовать BluetoothGetDeviceInfo для получения расширенной информации, такой как имя устройства и другая информация.
https://docs.microsoft.com/en-us/windows/desktop/api/bluetoothapis/nf-bluetoothapis-bluetoothgetdeviceinfo
Вы должны знать, что из-за некоторых ограничений Bluetooth разрешение имен может быть выполнено только после того, как обнаружение завершено.И эта операция может занять время.Поэтому, если вы позвоните в BluetoothGetDeviceInfo сразу после того, как обнаружение завершено, вы все равно можете получить пустое имя устройства для новых обнаруженных устройств (устройств, которые не были обнаружены ранее).
Не существует простого способа решить эту проблему, кроме перехода на WinRT APIили подождите некоторое время, прежде чем читать имя устройства.Вы также можете использовать сообщение WM_DEVICECHANGE, чтобы получить уведомление о разрешении имени устройства
https://docs.microsoft.com/en-us/windows/desktop/bluetooth/bluetooth-and-wm-devicechange-messages
И есть еще одна проблема: стек MS всегда возвращает спаренные устройства во время обнаружения, даже если они недоступны.