阅读:1809回复:4
WDM的DeviceIoControl异步调用问题[50分]
我想在PCI的卡的WDM驱动中加入如下功能:
应用程序DeviceIoControl,带着发送缓冲区和接收缓冲区,给驱动程序,驱动程序不马上返回,而是等待中断之后,读取PCi卡寄存器的数据之后,将数据放到DeviceIoControl的接收缓冲区再返回。 请问这可以用DeviceIoControl的异步调用实现吗?如果可以的话,哪位DX写过这样的程序,麻烦给个例子看看可以吗? 多谢了 (一次只能给33分,余下的下次开贴给) |
|
最新喜欢:zhgang
|
沙发#
发布于:2004-04-13 09:04
最好用事件通知!我做的PCI卡的驱动就是类似的操作,事件通知已正确。
异步调用应该也可以,可以看看武安河的《WIN2000/XP WDM设备驱动程序开发》 |
|
板凳#
发布于:2004-04-13 14:17
消息通知的话应用程序要起线程等待,以前我也这么做,觉得麻烦,想找个更好的解决办法
|
|
|
地板#
发布于: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) ... |
|
地下室#
发布于:2004-04-14 20:18
用户被禁言,该主题自动屏蔽! |
|