最近編寫一個網口轉虛擬串口驅動,在處理Read和Write分發函數過程的時候,把數據通過網絡成功發出去了。但是應用程序或者串口設置工具的讀寫一直沒有成功返回,通過串口監控工具AccessPort137進行監控到Read和Write的IRP都是沒有任何結果返回。其它的IRP都是有返回SUCCESS。
通過不斷調試和查看代碼,最後才發現遺漏了最後一步對IRP的結束處理,有時候真是小細節容易遺漏啊。在最後加入以下代碼即解決該問題:
Irp->IoStatus.Status = ntStatus;
Irp->IoStatus.Information = totalSent;
IoCompleteRequest( Irp, IO_NO_INCREMENT );
調試很多時候就是這樣,問題或者BUG多數時候隱藏在細微之處。