阅读:2197回复:4
BDA驱动中如何添加IOCTL Dispatch routine
现在我要做一个BDA架构的PCI采集卡驱动程序,调试硬件的时候,我想简单的用IOCTL的方式来读写硬件寄存器,我试过在driverentry的IRP_MJ_DEVICE_CONTROL处直接指向我自己的dispatch routine.但是我应该在哪里设置IOCTL的buffer方式呢(eviceObject->Flags |= DO_DIRECT_IO);在MFC应用程序中我应该如何获得该BDA驱动程序的handle?希望知道的朋友能告知思路,多谢了.
|
|
沙发#
发布于:2005-03-05 09:32
现在我要做一个BDA架构的PCI采集卡驱动程序,调试硬件的时候,我想简单的用IOCTL的方式来读写硬件寄存器,我试过在driverentry的IRP_MJ_DEVICE_CONTROL处直接指向我自己的dispatch routine.但是我应该在哪里设置IOCTL的buffer方式呢(eviceObject->Flags |= DO_DIRECT_IO);在MFC应用程序中我应该如何获得该BDA驱动程序的handle?希望知道的朋友能告知思路,多谢了. 你使用IoCreateDevice创建设备的时候如果给了名称,你可以使用IoCreateSymbolicLink创建一个符号连接,这样app就可通过符号连接名字使用CreateFile来打开驱动了,然后使用DeviceIoControl来通信就好了。 如果你没有使用IoCreateSymbolicLink创建符号连接名,那么你可以使用IoRegisterDeviceInterface来注册名称,应用程序就访问就复杂些,具体代码参考USB驱动的应用程序。 |
|
|
板凳#
发布于:2005-03-05 13:16
使用DS建立驱动会有现成的代码,
包括sys和APP,及其通信的实现 如果自己写就是楼上大虾说的 |
|
|
地板#
发布于:2005-03-07 10:13
问题主要是BDA驱动与普通WDM结构不大相同,在driverentry只是用KsInitializeDriver将一个只包括add,start等pnp的dispatch routine table传进去.在ADD和Start callback routine里面只接受到PKSDEVICE一个参数.,在DDK中有\"BDA minidrivers should not provide WDM dispatch routines that bypass the Kernel Streaming (KS) class model.\"\"BDA minidrivers should not expose interfaces to applications that allow those applications to have direct control of busses, memory, or any other hardware.\"我试过在add routine处添加注册interface,并将interface enabled,但是在应用层通过GUID取device的handle时,createfile总是返回invalid handle.但是同样的方式在普通WDM驱动中我已经测试过可以工作的.(谢谢上面两位朋友的答复,先放点分)
[编辑 - 3/7/05 by symon] |
|
地下室#
发布于:2005-03-07 12:18
你自己创建一个Device来通信好了
问题主要是BDA驱动与普通WDM结构不大相同,在driverentry只是用KsInitializeDriver将一个只包括add,start等pnp的dispatch routine table传进去.在ADD和Start callback routine里面只接受到PKSDEVICE一个参数.,在DDK中有\"BDA minidrivers should not provide WDM dispatch routines that bypass the Kernel Streaming (KS) class model.\"\"BDA minidrivers should not expose interfaces to applications that allow those applications to have direct control of busses, memory, or any other hardware.\"我试过在add routine处添加注册interface,并将interface enabled,但是在应用层通过GUID取device的handle时,createfile总是返回invalid handle.但是同样的方式在普通WDM驱动中我已经测试过可以工作的.(谢谢上面两位朋友的答复,先放点分) |
|
|