WDF开发PCIE总线驱动时调用DeviceIoControl就蓝屏求解惑

pjwlcy01 2014-10-15 07:28:35
小弟之前在WDM框架下用DriverStudio开发过PCIE总线的驱动,为了在64位的操作系统下能运行办卡改用WDF开发。
目前已经实现了对板卡的DMA读写功能,以前我是用Event方式,当PCIE板卡上数据写满时发送一个中断,驱动捕捉到中断后触发事件,然后应用程序开始DMA读。
用WDF写驱动时候,实现了DMA读,也能捕捉到本地中断,但是遇到一个奇怪的问题。我试图在应用程序中通过DeviceIoControl函数将KEVENT发送到驱动中,从而达到同步的效果。但是驱动中DeviceIoControl函数我无论写什么内容,只要一调用,就会蓝屏。
我将驱动中DeviceIoControl中的代码都删掉,只留下WdfRequestComplete还是蓝屏。是不是因为我的板卡在一直不断发中断,还是IRQL优先级方面的原因,由于一调用就蓝屏,我也没法通过DebugView看信息。
不知道各位大侠有无建议,我现在没什么思路。[/size]
...全文
672 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
niceway 2014-10-27
  • 打赏
  • 举报
回复
引用 楼主 pjwlcy01 的回复:
我试图在应用程序中通过DeviceIoControl函数将KEVENT发送到驱动中,从而达到同步的效果。[/size]
·这个做法是可以的,只是需要很小心操作这个Event。我以前写的PCIe驱动(KMDF)中使用过这种方法。
引用 楼主 pjwlcy01 的回复:
我将驱动中DeviceIoControl中的代码都删掉,只留下WdfRequestComplete还是蓝屏。[/size]
·请确认你的DeviceIoControl函数没有放在分页池中。
曹大夯 2014-10-22
  • 打赏
  • 举报
回复
参考“Enabling a Kernel-Mode Dump File”设置DUMP文件,在Dump过程中能够看到蓝屏代码。 应用程序产生的系统对象是不能直接通过指针传给内核驱动程序使用的。
pjwlcy01 2014-10-21
  • 打赏
  • 举报
回复
引用 2 楼 Huntercao 的回复:
[quote=引用 楼主 pjwlcy01 的回复:] 我试图在应用程序中通过DeviceIoControl函数将KEVENT发送到驱动中[/size]
内核空间不能使用应用空间的对象和变量。 所以,你说的这个解决方案比较奇怪。 蓝屏的BSOD代码是什么?[/quote]蓝屏一闪而过...在内核中也定义了PKEVENT类型的事件,然后用ObReferenceObjectByHandle()函数,理论上来说应该是不会出错的,但是老是返回STATUS_INVALID_HANDLE..应该是将我将Handle mEvent指向应用程序传入驱动程序的buffer时出错了...
pjwlcy01 2014-10-21
  • 打赏
  • 举报
回复
引用 1 楼 CrackValue 的回复:
看看蓝屏错误类型,分析dump文件,或双机联调试试 没搞过总线驱动,随口说说
我这就是双机调试不方便...才无奈单机调试....
CrackValue 2014-10-16
  • 打赏
  • 举报
回复
看看蓝屏错误类型,分析dump文件,或双机联调试试 没搞过总线驱动,随口说说
曹大夯 2014-10-16
  • 打赏
  • 举报
回复
引用 楼主 pjwlcy01 的回复:
我试图在应用程序中通过DeviceIoControl函数将KEVENT发送到驱动中[/size]
内核空间不能使用应用空间的对象和变量。 所以,你说的这个解决方案比较奇怪。 蓝屏的BSOD代码是什么?

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧