作者dullhero (眼底星空)
看板Trace
标题[问题] Windows Driver 开发问题
时间Tue Sep 20 23:03:28 2016
为了能让Application自动由Driver取值,我建立了以下的取值流程。
① 在上层的Application中,建立了一个Thread 。Thread中使用DeviceIoControl向
Driver发送Request。
② Driver会将接收到的Request Pending直到资料收齐,Driver再使用
WdfRequestCompleteWithInformation函式将这个Request Complete。
③ 最後上层Application在接收到Driver Return 的值後,再次向Driver发送Request。
如此周而复始的执行①~③,完成一个取值的周期,执行频率约80多Hz。
但是实际安装在电脑上执行这个取值流程,会发现一开始执行十分顺畅,但是在执行数分
钟後,
Application DeviceIoControl接收回应的速度开始下降,使得取值的流程产生卡顿,之
後Application就突然无法再取到值了。
而在我检查Driver之後,发现Driver从Application接收到的Request变成了Null值,导致
Driver无法执行Complete,Thread也因为DeviceIoControl等不到回应而卡住。
所以我想要向要请教几个问题:
① 在这种Application 向下层Driver 取值的机制中,要注意那些东西才能避免
DeviceIoControl回应速度降低?或者有那些原因会造成这个现象。
② 为什麽Driver接收到的Request会被清成Null,Windows是不是有什麽机制会清理
Request?(例如:Request太久没回应?)
③ 个人猜测会不会是系统来不及处理这些Request,那麽加上Cancelable机制是不是能
避免Request被清成Null的问题?
因为我对Windows Driver的观念不是这麽清楚,所以这些问题可能会有点混乱,还请各位
见谅,谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.9.34
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Trace/M.1474383810.A.408.html