#include "device/bluetooth/bluetooth_init_win.h"
#include "base/threading/scoped_thread_priority.h"
namespace {
int FilterVisualCPPExceptions(DWORD exception_code) {
return HRESULT_FACILITY(exception_code) == FACILITY_VISUALCPP ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH;
}
}
namespace device {
namespace bluetooth_init_win {
bool HasBluetoothStack() {
static enum {
HBS_UNKNOWN,
HBS_YES,
HBS_NO,
} has_bluetooth_stack = HBS_UNKNOWN;
if (has_bluetooth_stack == HBS_UNKNOWN) {
SCOPED_MAY_LOAD_LIBRARY_AT_BACKGROUND_PRIORITY_REPEATEDLY();
HRESULT hr = E_FAIL;
__try {
hr = __HrLoadAllImportsForDll("bthprops.cpl");
} __except(FilterVisualCPPExceptions(::GetExceptionCode())) {
hr = E_FAIL;
}
has_bluetooth_stack = SUCCEEDED(hr) ? HBS_YES : HBS_NO;
}
return has_bluetooth_stack == HBS_YES;
}
}
}