Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Дык, надо иметь в виду, что ты хоть и получаешь указатель на... 17.02.05 11:59 Число просмотров: 2585
Автор: amirul <Serge> Статус: The Elderman
|
> Что бы связаться с одним драйвером из другого, нужно, если > я правильно понимаю, получить указатель на нужное > устройство с помощью IoGetDeviceObjectPointer() вот он у > меня возвращает ошибку (см. ниже).
Дык, надо иметь в виду, что ты хоть и получаешь указатель на устройство, НА САМОМ ДЕЛЕ перед любым IoCallDriver-ом производится IoGetRelatedDeviceObject(), который возвращает ВЕРШИНУ стека (на самом деле все немного сложнее, но принцип понятен) и все обращения к устройству начинаются с самой вершины стека. Если в своем фильтре ты введешь свой IOCTL, ничто не мешает тебе НЕ передавать его вниз по стеку, а обработать прямо в своем фильтре.
> Хочу из диалогового окна на лету менять настройки драйвера > (назначать горячие клавиши и т.д.), > обращаясь к KbFilter_IoCtl. Это приложение уже было > написано для аналогичного VXD для W95. Хотел с минимальными > переделками использовать его для W2K. > Так для CreateFile() нужно имя моего драйвера, вот и хотел > с помощью вызовов SetupDiGetClassDevs(), затем > SetupDiEnumDeviceInterfaces(), > SetupDiGetDeviceInterfaceDetail() определить какое же имя > подставлять в CreateFile(). Дык прям клавиатуре (и мыше) и посылай. У них всегда стандартные имена (\Device\KeyboardClassX и \Device\PointerClassX, где X - порядковый номер).
> Ладно, сейчас попробую через символическую ссылку.
А на фига фильтру символическая ссылка?
> А как это сделать? Думал добавить в AddDevice DDK-ого > драйвера фильтра клавиатуры следующий код:
А ты на прототип AddDevice-а смотрел?
NTSTATUS
XxxAddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
);
---
Про значение второго аргумента читал?
> RtlInitUnicodeString(&mouseDevName, > L"\\Device\\PointerPort0" );
Не вдаваясь в то, что этого в AddDevice делать не нужно, а ты уверен, что устройство \Device\PointerPort0 существует?
> // Get a pointer to the Mouse device > status = IoGetDeviceObjectPointer(&mouseDevName, > STANDARD_RIGHTS_ALL, > > &DeviceFileObject, &mouseDevice); > > devExt->mouseTopOfStack = > IoAttachDeviceToDeviceStack(device, mouseDevice);
А не легче аттачится прямо на переданный тебе PhysicalDeviceObject?
> но status возвращаемый IoGetDeviceObjectPointer не успешен. > Что сделано не так? Имя указано не так и само написание AddDevice-процедуры неверно. IO Manager сам найдет для тебя девайс, к которому ты должен приконнектиться и вызовет твою AddDevice процедуру, в которую передаст указатель на это устройство
|
|
|