Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1747回复:4

WDM的DeviceIoControl异步调用问题[50分]

楼主#
更多 发布于:2004-04-12 17:17
我想在PCI的卡的WDM驱动中加入如下功能:
应用程序DeviceIoControl,带着发送缓冲区和接收缓冲区,给驱动程序,驱动程序不马上返回,而是等待中断之后,读取PCi卡寄存器的数据之后,将数据放到DeviceIoControl的接收缓冲区再返回。

请问这可以用DeviceIoControl的异步调用实现吗?如果可以的话,哪位DX写过这样的程序,麻烦给个例子看看可以吗?
多谢了

(一次只能给33分,余下的下次开贴给)

最新喜欢:

zhgangzhgang
Tomorrow Never Die
lansing
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-13 09:04
最好用事件通知!我做的PCI卡的驱动就是类似的操作,事件通知已正确。
异步调用应该也可以,可以看看武安河的《WIN2000/XP WDM设备驱动程序开发》
Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-13 14:17
消息通知的话应用程序要起线程等待,以前我也这么做,觉得麻烦,想找个更好的解决办法
Tomorrow Never Die
richmondleo
驱动牛犊
驱动牛犊
  • 注册日期2004-04-14
  • 最后登录2004-04-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-14 06:22
在异步调用,要带着接收缓冲区给驱动程序,可用
同步的GetOverlappedResult(),但用WaitForSingleObject()不能接收DeviceIoControl缓冲区Data.
调用的时候,先不Block线程,设一个点,触到该点,再Block线程,直到完成命令。

HANDLE handle = CreatFile(\"...ioctl\",...,FILE_FLAG_OVERLAPPED,NULL);
OVERLAPPED Overlapped;
Overlapped.hEvent = CreatEvent(NULL,1,0,NULL);
DWORD errcode;
if ( DeviceIoControl( handle,..., &Overlapped()

errcode = 0;
else
errcode = GrtLastError();

。。。。。。。。。。。。
继续其他处理

if ( errcode = ERROR_IO_PENDING)
{
if GetOverlappedResult(handle,&Overlapped, &Data,1))
errcode= 0;
else
errcode = GrtLastError();

}

CloseHandle (Overlapped.hEvent)
...
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-04-14 20:18
用户被禁言,该主题自动屏蔽!
游客

返回顶部