燒錄光碟映像檔 |
缺席
|
hichcock
一般會員 發表:2 回覆:11 積分:17 註冊:2009-09-17 發送簡訊給我 |
其實市面上已經有很多的燒錄軟體
不過小弟自己好奇心作祟, 因為之前因為工作關係寫了個 USB 隨身碟燒錄軟體 所以想說也來寫個光碟燒錄軟體之類的 目前遇到之前寫 USB 隨身碟初期同樣的問題 之前我可以用 DeviceIoControl IOCTL_STORAGE_GET_DEVICE_NUMBER 來確定隨身碟是屬於哪個 PhysicalDrive 因為需要用 PhysicalDrive 來進行 IOCTL_DISK_GET_DRIVE_GEOMETRY 才可以拿到最完整的 sector 大小 目前遇到的問題是我不知道需要將 PhysicalDrive 改成什麼才能讀取到完整的 sector 大小 請教一下有這方面經驗的前輩, 先謝謝了 |
hichcock
一般會員 發表:2 回覆:11 積分:17 註冊:2009-09-17 發送簡訊給我 |
目前參考過 http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=27077#4 這篇實戰 DeviceIOControl 的文章後
參考過裡面的作法 不過還是遇到相同的問題 目前我的驗證方式如下, 如方式有錯也請指教 1. 使用虛擬光碟載入一光碟, 該 img 檔案大小為 242141184 Byte 3. 透過 DeviceIOControl 算出的大小為239075328 Byte 計算方式如下 #define MEDIA_INFO_SIZE sizeof(GET_MEDIA_TYPES) 15*sizeof(DEVICE_MEDIA_INFO) PhysicalDriveIOCTL = CreateFile( "\\\\.\\CDROM0" , GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); DISK_GEOMETRY pdg; GET_MEDIA_TYPES *pmt = (GET_MEDIA_TYPES *)new BYTE[MEDIA_INFO_SIZE]; if((hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE) &&(DeviceIoControl(hPhysicalDriveIOCTL, IOCTL_STORAGE_GET_MEDIA_TYPES_EX, NULL, 0, pmt, MEDIA_INFO_SIZE, &rByte, NULL))) { m_Total_Size = pdg.Cylinders.QuadPart * pdg.TracksPerCylinder * pdg.SectorsPerTrack * pdg.BytesPerSector; }不知道為何中間會有這樣的落差 |
hichcock
一般會員 發表:2 回覆:11 積分:17 註冊:2009-09-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |