при сборке компонента в Release mode, ведёт себя странно:
при загрузке в сплоере работает, но по рефрешу не инициализируется снова, в Debug mode работает нормально.
Обе функции используют как входной параметр const GUID* InterfaceClassGuid, мне нужно получить
доступ для чтения к USB drive, в ветке HKLM\System\CurrentControlSet\Enum\USBStror\Нужный_Ключ\Id\ClassGUID
я вижу {4D36E967-E325-11CE-BFC1-08002BE10318}, SetupDiGetClassDevs получая этот GUID, возвращает
S_OK, однако, когда я пытаюсь получить заполненную структуру DeviceInterfaceData при помощи SetupDiEnumDeviceInterfaces вместо неё
я получаю "No more data is avaiable".
Куда копать ? Что нужно использовать как const GUID* InterfaceClassGuid ?
10x
Пример рабочего кода10.01.05 19:16 Автор: leo <Леонид Юрьев> Статус: Elderman Отредактировано 10.01.05 19:24 Количество правок: 1
при сборке компонента в Release mode, ведёт себя странно:
при загрузке в сплоере работает, но по рефрешу не инициализируется снова, в Debug mode работает нормально.
это просто мой GUID, где он определен - не важно. см MSDN и PlatformSDK на предмет "DEFINE_GUID".
> вообще реально посредство таких манипуляций добраться до > серийного номера usb drive'a ?
вполне реально добраться до file-handle к устройству (экземпляру класса), а потом через IOCTL (если такой предусмотрен) получить subj.
а как узнать GUID конкретного подключенного устройства ?11.01.05 00:24 Автор: eug Статус: Незарегистрированный пользователь Отредактировано 11.01.05 00:27 Количество правок: 1
> это просто мой GUID, где он определен - не важно. см MSDN и > PlatformSDK на предмет "DEFINE_GUID".
а как узнать GUID конкретного подключенного устройства ?
а то я всё реджистри уже облазил, и нахожу только GUID для классов устройств
[подобные в постах выше]
> вполне реально добраться до file-handle к устройству > (экземпляру класса), а потом через IOCTL (если такой > предусмотрен) получить subj. подскажите чайнику, плиз, вот у меня выводится:
DevInfoDetail->DevicePath =
\\?\usbstor#disk&ven_lg&prod_x-tick_2.0&rev_1.00#7&328699db&1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b} - что это за зверь, что из этого стринга можно понять ?
особенно интересует #7&328699db&1
file-handle - это то, что возвращает такой вот вызов:
HANDLE hUsbDevice = CreateFile ( DevInfoDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); ?
А не у всякого устройства есть GUID11.01.05 12:32 Автор: amirul <Serge> Статус: The Elderman
Есть GUID интерфейса. А это уже от драйвера зависит, будет ли устройство создавать простой симлинк или интерфейс. А GUID интерфейса для конкретного устройства всегда жестко задан и одинаков на всех машинах. Как пример, ты же не спрашиваешь как в винде называется com-порт, потому как имена одинаковые, с GUID-ом интерфейса то же самое, просто функции другие.
> подскажите чайнику, плиз, вот у меня выводится: > DevInfoDetail->DevicePath = > \\?\usbstor#disk&ven_lg∏_x-tick_2.0&rev_1.00#7&328699db > &1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b} > - что это за зверь, что из этого стринга можно понять ? > особенно интересует #7&328699db&1 Понять из этого стринга можно только то, что микрософт не хочет, чтобы ты обращался к нему напрямую, а использовал функции для работы с интерфейсами. Чтобы понять как работать с интерфейсами смотри DDK samle-ы из каталога:
NTDDK\src\general\toaster
В частности создание интерфейса из драйвера: функция Bus_AddDevice в файле bus\pnp.c
Ну и работа с интерфейсами из третьего кольца - подкаталог exe
Успехов
> file-handle - это то, что возвращает такой вот вызов: > HANDLE hUsbDevice = CreateFile (> DevInfoDetail->DevicePath, GENERIC_READ | GENERIC_WRITE,
> FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0,
> NULL); ?
Да
большое спасибо11.01.05 12:55 Автор: eug Статус: Незарегистрированный пользователь
если вместо {4D36E967-E325-11CE-BFC1-08002BE10318}, использовать {53f56307-b6bf-11d0-94f2-00a0c91efb8b},
то всё становится на свои места.
кто-нибудь может прояснить почему ?