Vista 中對 PhysicalDrive 的 sector 寫入的問題 |
答題得分者是:aftcast
|
davidsun
初階會員 發表:57 回覆:71 積分:25 註冊:2002-04-14 發送簡訊給我 |
Greeting ,
之前我已經可以成功的對 physics device 的 logical sector 作讀寫測試,例如: Write Sector : [code delphi] hDev := CreateFile(pChar('\\.\PhysicalDrive' IntToStr(labPhysicalDrive.Tag)), GENERIC_WRITE or GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); DwPtr := SetFilePointer(hDev, WriteSectorNum * 512, nil, FILE_BEGIN); if DwPtr = INVALID_SET_FILE_POINTER then raise Exception.Create('SetFilePointer : ' SystemErrorMessage); if not WriteFile(hDev, Buffer[0], edBuferSize.Value * 512, iWrite, nil) then raise Exception.Create('WriteFile : ' SystemErrorMessage); WriteSectorNum := WriteSectorNum edBuferSize.Value; CloseHandle(hDev); [/code] 因為我的目的要對每一個 sector 作讀寫測試,所以我會有一個迴圈,從 sector 0 開始,一直到最後的 sectors , 所以上面的程式碼中, WriteSectorNum 會一直累加,這程式碼在 XP 工作的很好,但是在 Vista 則不能工作,問題狀況是: 當我寫 sector 0 的時候,很正常,可以寫入,但是要寫入 sector 1 的時候,就出現 Error Numner 5 (在 呼叫 WriteFile API 的時候) , 這是拒絕存取的錯誤,不單是Sector 1, 只要不是 sector 0 的寫入,都會有拒絕存取的錯誤,請問是不是在 Vista 中有不一樣的用法?或者有什麼我沒有注意到的呢? 謝謝您 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
請在write之前試著先用DeviceIoControl( ) api配合FSCTL_DISMOUNT_VOLUME控制碼或FSCTL_LOCK_VOLUME碼。
如此可確保資料的一致性並且在vista以後的版本得到SUPPORT。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2008-09-30 02:08:10, 註解 無‧
|
davidsun
初階會員 發表:57 回覆:71 積分:25 註冊:2002-04-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |