為了能讓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的觀念不是這麼清楚,所以這些問題可能會有點混亂,還請各位
見諒,謝謝!