Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2011, 19:05   #11
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
Для этого нужно знать имя устройства (уверены что система назвала устройство "\\\\.\\KBDRIVER"?). Чтобы узнать имя устройства можно воспользоваться SetupDiXxx.
Так а при вызове IoCreateDevice() в нее в том числе пихается разве не имя создаваемого устройства?
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 26.06.2011, 20:57   #12
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

насколько я понимаю IoCreateDevice, то до WinXP имя было обязательным для всех драйверов. сегодня имя в IoCreateDevice нужно только для BUS PDO, и только если есть потребность ограничинить драйвер при помощи DACL. также сегодня вся работа с драйвером должна реализовываться через интерфейс, который он предоставляет.

относительно вашей ситуации, то может быть это имя и сработает, хотя я сильно сомневаюсь.
f.hump вне форума Ответить с цитированием
Старый 26.06.2011, 21:17   #13
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
относительно вашей ситуации, то может быть это имя и сработает, хотя я сильно сомневаюсь.
Не сработает, т.к. я изначально пытался присваивать имя в IoCreateDevice()
Вот вы упоминали о SetupDi....
Цитата:
Чтобы узнать имя устройства можно воспользоваться SetupDiXxx.
Не могли бы вы привести пример получения имени устройства при помощи этих функций, а то мне пока не очень понятно как это сделать.
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 26.06.2011, 21:53   #14
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Да, тут уже было, про USB правда. Просто GUID нужно поменять на свои. и на выходе SetupDiGetDeviceInterfaceDetail (SP_DEVICE_INTERFACE_DETAIL_DATA) будет лежать нужный DevicePath.

Последний раз редактировалось f.hump; 26.06.2011 в 21:58.
f.hump вне форума Ответить с цитированием
Старый 26.06.2011, 22:24   #15
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Спасибо.
Правильно ли я понимаю, что GUID для моего случая надо генерировать самому?
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 26.06.2011, 22:45   #16
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

в целом, для своего драйвера нужно сгенерить свой GUID, это тот же GUID, который стоит в IoRegisterDeviceInterface.

оффтоп: хочется думать, что я ничего не имею против WDM драйверов, но наверное я уже привык к WDF, и рекомендую тем кто пишет драйвера переходить на WDF.
f.hump вне форума Ответить с цитированием
Старый 27.06.2011, 12:36   #17
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

не знаю как и что делается в WDF, но у топикстартёра скорее всего WDM драйвер
Sam Gold, чтобы открыть что-то через CreateFile необходимо чтобы твой драйвер создал устройство через IoCreateDevice и создал на него символьную ссылку через IoCreateSymbolicLink, если этого в драйвере нет то и никакого устройство ты открыть не сможешь, и имя при открытии надо указывать именно такое которое было указано в функции IoCreateSymbolicLink в качестве символьной ссылки.
и вообще перед тем как что-то делать необходимо хоть чуть чуть ознакомиться с теорией (рекомендую туториал от Four-F на WASM.RU).
rpy3uH вне форума Ответить с цитированием
Старый 27.06.2011, 13:15   #18
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

на счет IoCreateSymbolicLink, опять таки, до WinXP - да, после WinXP - нет. Винда сама называет устройства, чтобы не случилось конфликта имен, и что самое интересное здесь, имя девайса, довольно часто, действительно от загрузки до перезагрузки.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CppWEbBrowser. Запрет на открытие нового окна, и открытие его в том же окне Askar_g Общие вопросы C/C++ 4 25.06.2011 20:00
драйвера technik_312 Помощь студентам 2 10.01.2010 15:57
блочные драйвера valys361 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 03.06.2009 22:55
Ошибка драйвера Dimoney Общие вопросы Delphi 8 28.05.2008 11:26
как перехватить открытие чужого приложенияпытаюсь перехватить открытие любого приложе rpy3uH Win Api 2 02.12.2006 12:12