Re: NuMega 2.7 KDevice exposing
От: Геннадий Майко США  
Дата: 09.12.03 16:07
Оценка:
Здравствуйте, Antei, Вы писали:

A>Есть intermedia filter driver. Для коннекта с Application сделал exposing WDM Device, взял из примера:


A>
A>NDIS_STATUS Testdrv0Adapter::OnInitialize
A>    (const KNdisMedium& Medium, KNdisConfig& Config)
A>{
A>...
A>    static PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
A>    NdisZeroMemory(MajorFunction, sizeof(MajorFunction));
A>    MajorFunction[IRP_MJ_CREATE] = 
A>        MajorFunction[IRP_MJ_CLOSE] = 
A>        MajorFunction[IRP_MJ_CLEANUP] = 
A>        MajorFunction[IRP_MJ_READ] = 
A>        MajorFunction[IRP_MJ_WRITE] = 
A>        MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoDispatch;

A>    Status = 
A>        NdisMRegisterDevice(
A>            *KNdisMiniDriver::DriverInstance(),
A>            KNDIS_STRING_CONST("\\Device\\MyNdisDevice"),
A>            KNDIS_STRING_CONST("\\DosDevices\\MyNdisDevice"),
A>            MajorFunction,
A>            &m_pDeviceObject,
A>            &m_DeviceHandle
A>        );
A>...
A>}
A>



A>Соответственно, обработка обращений из приложения в


A>
A>NTSTATUS Testdrv0Adapter::IoDispatch (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
A>{
A>...
A>}
A>


A>Пример — NuMeg'овский. Все работает.

A>А вопрос такой: можно ли в качестве девайса для связи с Application использовать класс KDevice?
A>(у него есть предопределенные обработчики KDevice::Read, KDevice::DeviceControl, да и при работе с NuMega такой подход (если это возможно) будет корректней)
--
Я думаю, здесь можно использовать макрос KDevicePTR, который из системного DeviceObject может получить указатель на KDevice; затем с помощью этого указателя можно будет уже вызвать соответствующий метод класса KDevice. Однако в этом случае для каждой нужной функции в массиве MajorFunction необходимо будет задать свою функцию, аналогичную IoDispatch. Или делать корректный вызов методов динамически, исходя из полей Irp.

C уважением,
Геннадий Майко.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.