[問題] VC++ DeviceIoControl時指標內容變cd dd

看板C_and_CPP (C/C++)作者 (再努力一點)時間14年前 (2012/05/04 14:12), 編輯推噓0(005)
留言5則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 指標所指位置的值,在下DeviceIoControl時變動 ExFunction(BYTE* byDataIndex, DWORD addr, DWORD length) { for(...) { 1. 利用DeviceIoControl讀取Device DATA byDataIndex所指的值的值會在DeviceIoControl動作的時候值全變成皆為0xdd 2. 利用DeviceIoControl對Device write DATA byDataIndex所指的值的值會在DeviceIoControl動作的時候值全變成皆為0xcd 迴圈中繼續-- 遇到DeviceIoControl時byDataIndex所指的值的值可能變回原本所指正確data } } 預期的正確結果(Expected Output): 將byDataIndex所指data寫入device 錯誤結果(Wrong Output): 寫入的data陣列有些段data整段變成0xCD或是0xDD 補充說明(Supplement): function我有單獨拿出來執行測試過沒有問題, 但加入現在寫的程式中卻出現上述問題, debug很久才發現是掛在DeviceIoControl這邊,但還是不知道怎麼解... 請問這問題可能是什麼問題導致? 如何解決? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.163.49.109

05/04 14:21, , 1F
只好有請Windbg出來,看驅動程式寫入什麼東西了
05/04 14:21, 1F

05/04 15:13, , 2F
先GetLastError看有沒有啥錯誤
05/04 15:13, 2F

05/04 19:15, , 3F
謝謝樓上兩位,問題已解決,主因是另一個thread同時在對
05/04 19:15, 3F

05/04 19:17, , 4F
該指標所指的位置做free和重取data的動作造成的。
05/04 19:17, 4F

05/04 20:18, , 5F
很常見但不容易找到的真相,感謝分享
05/04 20:18, 5F
文章代碼(AID): #1FetDETO (C_and_CPP)
文章代碼(AID): #1FetDETO (C_and_CPP)