Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DDK : Как связаться с драйвером?

760
31 августа 2001 года
Sergei_cn
2 / / 20.01.2000
Здравствуйте.
У меня такая проблема, я связываюсь с драйвером клавиатуры путем вызова функции CreateFile() (имя драйвера получаю путем вызовов SetupDiGetClassDevs(), SetupDiEnumDeviceInterfaces(), SetupDiGetInterfaceDeviceDetail() ). Когда режим доступа при вызове CreateFile() установлен в “GENERIC_READ | GENERIC_WRITE” или одно из них, функция взращает код ошибки, если же режим доступа установить в 0 то все нормально. Пробовал открывать игровой порт и дисковод все нормально открывается с режимом доступа “GENERIC_READ | GENERIC_WRITE”, а с мышкой то же что и с клавиатурой. Попытался связаться с драйвером фильтром клавиатуры (kdbfilter) (зарегистрировал интерфейс, включил его, в реестре все нормально прописалось) ситуация аналогичная, не хочет открывать. Сравнивал исходники драйверов игрового порта и клавиатуры, но вроде все что есть в игровом порте, то есть и в клавиатуре.
Я работаю под Win 2k, ddk то же под Win 2k.
Если кто ни будь знает в чем здесь проблема помогите пожалуйста.
760
05 сентября 2001 года
Sergei_cn
2 / / 20.01.2000
В исходнике драйвера клавиатуры есть такая проверка

(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;
}

Она не позволяет открыть драйвер на чтение и запись. Что бы получить нужный эффект надо ее просто закоментировать.
3.6K
29 апреля 2003 года
Akm
2 / / 19.03.2003
У меня проблема из той же оперы:
ставлю фильтр на клаву (фильтр написан на базе
DDK-ного kbfiltr.c), в AddDevice прописываю
создание SymbolicLink. Открыть через CreateFile
с GENERIC_READ | GENERIC_WRITE - не получается, с 0 - всё OK. Суть проблемы: в DriverEntry
вроде как положено прописываю
тра-та-та[IRP_MJ_DEVICE_CONTOL] = MyDevIoCtl. Фишка в том, что туда я никогда не попадаю. В комментариях kbfiltr.c что-то мутно сказано про то, что если я хочу использовать IOCTL, то надо создавать ещё один объект устройства, причем при передаче IRP нижележащим дровам надо анализировать
с каким объектом устр-ва я имею дело. Что за ботва такая? Вопрос : как огранизовать нормальный
IOCTL - интерфейс моего фильтра с Application'ом??? И как нормально сделать так, чтобы можно было открывать мою SymbolicLink c GENERIC_READ | GENERIC_WRITE??? (Предложенный Sergei_cn выше метод не самый лучший, т.к. kbdclass.sys я не трогаю, а просто вешаю фильтр)

P.S. Я вообще правильно устанавливаю фильтр???
Я делаю следующим образом: в панели инструментов
в разделе "система" ищу установленный по дефолту драйвер клавы, открываю "сведения о драйверах", далее жму "обновить" и указываю свой inf и check-версию своего фильтра. Вроде всё ставится как надо. Единственное, у меня закрадывается подозрение, что кто-то хватает IRP'ы для моего вроде как самого верхнего драйвера. Может я под kbdclass'ом стою???
Please HELP ME! А то я чего-то децл запутался.
401
19 августа 2003 года
Br@in RIPper
289 / / 15.02.2003
Сорри за оффтопик, но
кто-нибудь знает, где достать 16 битный компилятор (VC v1.52) для использования с DDK?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог