簡單說說USB協議之GetLastError() 函數錯誤返回值爲:拒絕訪問

今天在嘗試往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數據被修改就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章