symon
驱动牛犊
驱动牛犊
  • 注册日期2001-09-19
  • 最后登录2011-06-29
  • 粉丝1
  • 关注1
  • 积分6分
  • 威望55点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:2197回复:4

BDA驱动中如何添加IOCTL Dispatch routine

楼主#
更多 发布于:2005-03-03 17:55
现在我要做一个BDA架构的PCI采集卡驱动程序,调试硬件的时候,我想简单的用IOCTL的方式来读写硬件寄存器,我试过在driverentry的IRP_MJ_DEVICE_CONTROL处直接指向我自己的dispatch routine.但是我应该在哪里设置IOCTL的buffer方式呢(eviceObject->Flags |= DO_DIRECT_IO);在MFC应用程序中我应该如何获得该BDA驱动程序的handle?希望知道的朋友能告知思路,多谢了.
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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驱动的应用程序。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-05 13:16
使用DS建立驱动会有现成的代码,
包括sys和APP,及其通信的实现

如果自己写就是楼上大虾说的
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
symon
驱动牛犊
驱动牛犊
  • 注册日期2001-09-19
  • 最后登录2011-06-29
  • 粉丝1
  • 关注1
  • 积分6分
  • 威望55点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于: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]
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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驱动中我已经测试过可以工作的.(谢谢上面两位朋友的答复,先放点分)

[编辑 -  3/7/05 by  symon]
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部