Я не уверен, что мне не хватает, но пришло время спросить у более знающих людей, чем я. Я использую GUID HDC, который нашел здесь . Я пытаюсь открыть это в моем C ++ коде:
// note: devGuid is pointer of type struct GUID in the class this ctor belongs to
DeviceHelper::DeviceManager::DeviceManager(GUID devClassGuid) : devGuid(new GUID(devClassGuid)) {
hDevices = SetupDiGetClassDevs(&devClassGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if(INVALID_HANDLE_VALUE == hDevices) {
throw std::exception("Failure to get a handle to a list of device classes");
}
}
Этот вызов проходит, и hDevices содержит действительную ссылку. Тем не менее, когда я вызываю SetupDiEnumDeviceInterfaces (), он перебирает ничего:
// hDevices is assigned in the c-tor as is devGuid which is a pointer
DWORD index(0);
SP_DEVICE_INTERFACE_DATA devInterfaceData = {sizeof(SP_DEVICE_INTERFACE_DATA)};
while(SetupDiEnumDeviceInterfaces(hDevices, NULL, devGuid, index, &devInterfaceData)) {
// look for the HBA I want from parameters passed to the class function
// FindHba()
}
SetupDiEnumDeviceInterfaces () устанавливает код системной ошибки равным 249, что означает «больше нет элементов», но ничего не повторялось. Видимо, дескриптор указывает на пустой список. Что я получаю неправильно при вызове SetupDiGetClassDevs ()? Я подумал, что это может быть GUID, а не GUID «интерфейса» (т. Е. Слово «interface» отсутствует в названии). Итак, я попытался снять поразрядно - или с DIGCF_DEVICEINTERFACE, но это не помогло.
Мои знания о том, как использовать этот API, весьма ограничены, и сейчас я ничего не делаю, кроме того, что крутит свои колеса.
Спасибо за любую помощь.