[問題] Windows Driver 開發問題

看板Programming作者 (眼底星空)時間8年前 (2016/09/20 23:16), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串2/2 (看更多)
為了能讓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://www.ptt.cc/bbs/Programming/M.1474384601.A.1E4.html

09/27 01:02, , 1F
看起來像是您在request之後,可能送了一
09/27 01:02, 1F

09/27 01:02, , 2F
個complete,依照我的淺見就是後面的命
09/27 01:02, 2F

09/27 01:02, , 3F
令造成前面的命令傳null,實際上您提供
09/27 01:02, 3F

09/27 01:02, , 4F
的資訊我無法確實判斷出來。
09/27 01:02, 4F
文章代碼(AID): #1NuLBP7a (Programming)
文章代碼(AID): #1NuLBP7a (Programming)