[问题] Windows Driver 开发问题

楼主: dullhero (眼底星空)   2016-09-21 00:11:36
为了能让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的观念不是这么清楚,所以这些问题可能会有点混乱,还请各位
见谅,谢谢!
作者: jasonwu23 (jasonwu)   2016-09-21 21:39:00
看起来没问题, 会不会driver中的memory没有Release掉?你的DeviceIoControl应该没有设Overlap吧?

Links booklink

Contact Us: admin [ a t ] ucptt.com