Я не уверен, что мне не хватает, но пришло время спросить у более знающих людей, чем я. Я использую 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 «интерфейса» (т. Е. В названии нет слова «интерфейс»). Итак, я попытался снять побитовое или с помощью DIGCF_DEVICEINTERFACE, но это не помогло.
Мои знания о том, как использовать этот API, довольно ограничены, и сейчас я ничего не делаю, кроме как крутить свои колеса.
Спасибо за любую помощь.