TRAP это макрос вставляющий int3 в DEBUG-версии, в RELEASE - ничего.
Чтобы система не говорила о "чужом" файле, проще выключить систему защиты системных файлов.
Чтобы обновить драйвер без перезагрузки нужно сделать disable device, скопировать новый sys-файл, и потом enable device. В отношении клавиатуры это придеться делать через setup-функции, см. DDK HELP.
Если в Event Viewer были просмотренны события записанные в журнал драйвером, то sys-файл будет занят и надо закрыть Event Viewer.
"Убивание" проверки в драйвере это потенциальная дыра в безопасности, скорее всего то что вам необходимо можно сделать другими, легальными путями.
Здравствуйте.
У меня такая проблема, я связываюсь с драйвером клавиатуры путем вызова функции CreateFile() (имя драйвера получаю путем вызовов SetupDiGetClassDevs(), SetupDiEnumDeviceInterfaces(), SetupDiGetInterfaceDeviceDetail() ). Когда режим доступа при вызове CreateFile() установлен в “GENERIC_READ | GENERIC_WRITE” или одно из них, функция взращает код ошибки, если же режим доступа установить в 0 то все нормально. Пробовал открывать игровой порт и дисковод все нормально открывается с режимом доступа “GENERIC_READ | GENERIC_WRITE”, а с мышкой то же что и с клавиатурой. Попытался связаться с драйвером фильтром клавиатуры (kdbfilter) (зарегистрировал интерфейс, включил его, в реестре все нормально прописалось) ситуация аналогичная, не хочет открывать. Сравнивал исходники драйверов игрового порта и клавиатуры, но вроде все что есть в игровом порте, то есть и в клавиатуре.
Я работаю под Win 2k, ddk то же под Win 2k.
Если кто ни будь знает в чем здесь проблема помогите пожалуйста.
DDK : Как связаться с драйвером?31.08.01 08:27 Автор: leo <Леонид Юрьев> Статус: Elderman Отредактировано 31.08.01 08:40 Количество правок: 1
А какие ошибки возвращаются, access denied или что-то еще ?
И если не секрет, зачем тебе это надо ?
Вот вырезка из кода (kbdclass.c):
// We do not allow user mode opens for read. This includes services (who
// have the TCB privilege).
//
if (Irp->RequestorMode == UserMode &&
(irpSp->Parameters.Create.SecurityContext->DesiredAccess & FILE_READ_DATA)
) {
status = STATUS_ACCESS_DENIED;
goto KeyboardClassCreateEnd;
}
Совет такой:
Откомпилируй debug-версию kb-драйвера, поставь TRAP на входе в KeyboardClassCreate() и посмотри что происходит при CreateFile() из user-mode.
DDK : Все работает!01.09.01 14:42 Автор: sergei_btf Статус: Незарегистрированный пользователь
Просто закомментировал проверку и о-па! все работает. А то я пять дней бьюсь над этой ошибкой, уже начал пробовать вариант связи через другой драйвер, который открывается, но зато я много чего интересного узнал про DDK (нет худа без добра). Сейчас буду дальше теснить.
На всякий случай, если это нужно, код возвращаемой ошибки 0xffffffff (-1) чему соответствует макрос INVALID_HANDLE_VALUE.
Вообще-то секрет. У нас тут с мужиками есть небольшой проектик (поскольку я когда-то занимался программированием для защищенного режима на меня лег весь груз низкоуровневого программирования и по совместительству должность «тормоза проекта»). В плане закона все в порядке. Просто, мы решили, особо не распространятся. Это связано с некоторой спецификой проекта и относится больше к нашим знакомым.
Leo (или кто знает) если тебе не сложно, ответь пожалуйста еще на несколько вопросов.
Как можно установить свеже скомпилированный драйвер без перезагрузки компьютера?
Я делаю так, предварительно удаляю файл driver.cab, и просто копирую мой драйвер в папку C:\WINNT\system32\drivers, после чего windows выдает сообщение о неродном драйвере, игнорирую его, и затем перезагружаюсь.
Можно ли как ни будь отлаживать драйвер без host machine.
И еще. Что такое TRAP.
Спосибо за совет.
DDK : Все работает!02.09.01 03:06 Автор: leo <Леонид Юрьев> Статус: Elderman
TRAP это макрос вставляющий int3 в DEBUG-версии, в RELEASE - ничего.
Чтобы система не говорила о "чужом" файле, проще выключить систему защиты системных файлов.
Чтобы обновить драйвер без перезагрузки нужно сделать disable device, скопировать новый sys-файл, и потом enable device. В отношении клавиатуры это придеться делать через setup-функции, см. DDK HELP.
Если в Event Viewer были просмотренны события записанные в журнал драйвером, то sys-файл будет занят и надо закрыть Event Viewer.
"Убивание" проверки в драйвере это потенциальная дыра в безопасности, скорее всего то что вам необходимо можно сделать другими, легальными путями.