今天在嘗試往U盤寫入Write命令(0x2A)時,發現前面幾次寫成功了,後來無論怎麼寫,都無法成功。
用Bus Hound 抓協議,發現Write命令一直沒有發出去。
嘗試發其他命令,如Read(0x28),Read Capacity(0x25)等,卻可以完好無損發出去。
在幾十次的調試後,各種參數完全沒有問題,也沒有出現調用錯函數,佔用等情況。
利用GetLastError()函數獲取 DeviceIoControl()錯誤返回值,返回值爲05,即拒絕訪問。
折騰了好久之後,發現原因在於U盤中的MBR區域數據被修改了。
在通過DeviceIoControl()函數發送Write命令給設備時,邏輯地址LBA被設置在了0x00000000~0x000001FE之間,導致寫數據覆蓋了原本MBR主引導程序的數據,導致文件系統完全除了問題。
終於發現了問題,U盤換一個文件系統,注意在Write過程中避免MBR數據被修改就好了。