Разница между функциями SetupDIEnum ... - PullRequest
0 голосов
/ 08 апреля 2019

Я новичок в драйверах Windows, и в настоящее время я борюсь с функциями SetupApi. Я получил код библиотеки оболочки устройства USB от моего коллеги, которого я должен понять. Однако времени на вопросы очень мало, и я подал в отставку, чтобы помочь себе, пересмотрев код;).

В коде есть несколько функций, которые перечисляют USB-устройства, информацию об устройствах и интерфейсы устройств. Я запутался во всем этом перечислении.

Общим кодом в этих функциях является следующая строка:

deviceInfo = SetupDiGetClassDevs(NULL,
        NULL, NULL,
        DIGCF_ALLCLASSES | DIGCF_DEVICEINTERFACE);

Функция, которая определяет пути устройства, использует:

SetupDiEnumDeviceInterfaces(deviceInfo,
            NULL,
            &DRIVER_GUID,
            memberIndex,
            &interfaceData);

и

SetupDiGetDeviceInterfaceDetail(deviceInfo,
            &interfaceData,
            NULL, 0,
            &requiredLength,
            NULL);

в цикле while.

В то время как функция для получения версии драйвера использует:

SetupDiEnumDeviceInfo(devs, DeviceNo++, &devInfo)

и

SetupDiGetDeviceInfoListDetail(devs, &devInfoListDetail);

вместо.

Третья функция, которая определяет имена сервисов, использует:

devs = SetupDiGetClassDevs(NULL, "USB", NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);

в начале, а затем:

SetupDiGetDeviceInfoListDetail(devs, &devInfoListDetail);

а также

SetupDiGetDeviceRegistryProperty(devs, &devInfo, SPDRP_HARDWAREID, &DataT, (PBYTE)hardwareID, sizeof(hardwareID), &dwSize);

Я прогуглил установочный api doc и обнаружил, что между интерфейсами и информацией об устройствах есть разница. Это звучит очень разумно, но я упускаю пример этих списков и того, как они связаны друг с другом, чтобы я мог более конкретно следовать по пути через эти списки. Я имею в виду, получить список всех устройств, затем получить список всех интерфейсов, принадлежащих каждому устройству, а затем получить список драйверов для каждого из этих интерфейсов. Это должно выглядеть как дерево. Тем не менее, мой взгляд изнутри, и мне нравится смотреть изнутри.

Вот что я имел в виду, потерявшись во всем перечислении.

У кого-нибудь есть какая-нибудь ссылка или совет, как получить обзор, здесь?

...