Открыть устройство по GUID - PullRequest
2 голосов
/ 28 февраля 2011

Я пытаюсь получить доступ к физическому устройству с помощью пакета программного обеспечения от поставщика.

В более ранних версиях пакета программного обеспечения пользователь открывал устройство через символическое имя DOS:

hDevice= CreateFile("\\\\.\\DevName", 
    GENERIC_READ | GENERIC_WRITE, 
    0, NULL, OPEN_ExiSTING, 0, NULL);

Однако они выпустили новую версию, которая требует, чтобы устройство открывалось по GUID, а DEFINE_GUID включено в их заголовок.Это обновление также отключило старый способ открытия устройства.

Они не обновили свою документацию, чтобы показать, как открыть устройство по GUID, и я не смог найти ничего полезного с моим google-fu.

Наверняка где-то должен быть пример, показывающий, как открыть устройство с помощью GUID?

Ответы [ 2 ]

6 голосов
/ 25 марта 2011

Скорее всего, поставщик дал вам «GUID интерфейса устройства». Чтобы получить имя, которое вы можете использовать для CreateFile(), вам нужно перечислить все устройства с этим GUID. Это делается путем вызова SetupDiGetClassDevs() с флагом DIGCF_DEVICEINTERFACE. Результирующий список представлен дескриптором набора информации об устройстве (HDEVINFO). Затем вы передаете этот дескриптор в повторные вызовы SetupDiEnumDeviceInterfaces(), чтобы просмотреть список. Для каждого элемента списка вам нужно вызвать SetupDiGetDeviceInterfaceDetail(), чтобы получить соответствующий путь к устройству.

3 голосов
/ 25 марта 2011

Вы, наверное, уже поняли это, но WinObj довольно удобен для поиска по пространству имен менеджера объектов. Как только вы найдете название объекта, который вы ищете там, это должно быть довольно просто, чтобы получить право открытия.

...