设备驱动程序:Windows ReadFile函数超时

设备驱动程序:Windows ReadFile函数超时,第1张

概述设备驱动程序:Windows ReadFile函数超时

我使用的是偶尔会错过硬件中断的设备驱动程序。

要从设备读取数据,我使用该function

BOol WINAPI Readfile( __in HANDLE hfile,__out LPVOID lpBuffer,__in DWORD nNumberOfBytesToRead,__out_opt LPDWORD lpNumberOfBytesRead,__inout_opt LPOVERLAPPED lpOverlapped );

当设备驱动程序错过一个中断时,该function永远阻塞。 这导致程序停滞,并且必须重新启动窗口来解决它。

要解决这个问题,我想调用Readfile()时使用超时限制。 但是当我使用

是否有可能检索创builDWDFREQUEST的cpu?

为什么我的IOCTL调用与copy_from_user协同工作,而不是与get_user协同工作?

世界上最简单的windows驱动程序

测量设备驱动程序由我的程序引起的cpu / IO利用率

如何打包windows驱动程序进行部署?

BOol WINAPI SetCommTimeouts( __in HANDLE hfile,__in LPCOMMTIMEOUTS lpCommTimeouts );

它会失败,错误代码87(无效的参数)。 显然,我不能在设备驱动程序句柄上使用这个超时的东西。 我怎样才能解决这个问题? 有没有其他方法来设置设备驱动程序的超时限制?

谢谢

关于在terminal上打印KERNEL消息

生产者消费者在块设备驱动程序中的实现?

如何在代码中的SATA控制器上从PIO切换到DMA模式?

当你插入一个新的USB设备会发生什么?

如何以编程方式创build自定义input/输出设备?

您需要切换到异步I / O。 打开提供file_FLAG_OVERLAPPED标志给Createfile的设备驱动程序,然后在调用Readfile时传递重叠结构。 当I / O完成时,句柄将被发送信号,所以你可以使用WaitForSingleObject来传递给Readfile的句柄和一个超时。

并非所有设备驱动程序都支持异步I / O,所以这可能不适合您。 如果是这种情况, Readfile将仍然阻塞,不返回“ERROR_PENDING_IO”。

如果超时,则应在重叠结构超出范围之前调用CanceliO来终止 Readfile。 否则,如果碰巧晚些时候完成,它会尝试将内存写入用于存储的重叠结构。

异步I / O有点棘手,所以仔细阅读文档。

更新:我发现一个替代方案可以从看门狗线程中调用CancelIEx 。 作为一个更新的API,它可能不会出现在你必须支持的平台上。

总结

以上是内存溢出为你收集整理的设备驱动程序:Windows ReadFile函数超时全部内容,希望文章能够帮你解决设备驱动程序:Windows ReadFile函数超时所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238367.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存