Windows XP刻錄

一,使用 Windows XP 內置的刻錄功能

參考
    http://msdn.microsoft.com/msdnmag/issues/04/04/CQA/

1,簡單文件刻錄

    使用 Shell 的 ICDBurn 接口,其中方法:
        HasRecordableDrive 掃描系統,如果發現可寫的CD驅動器則返回TRUE。
        GetRecorderDriveLetter 返回可寫驅動器。
        Burn 執行刻錄動作,從集結區(staging area)寫入 CD-R。

    其中,在執行刻錄之前必須先把要刻錄的文件複製到集結區,集結區是一個臨時目錄,位於用戶目錄 "%USERPROFILE%\Local Settings\Application Data\Microsoft\CD Burning" ,也可以通過下面的Shell API獲取:
    SHGetFolderPath(CSIDL_CDBURN_AREA)

    注意這裏的方法只能用於單個刻錄光驅,如果你有多個刻錄光驅就不行了。

 


2,音樂CD、CD-RW 等更復雜的刻錄

    這裏使用的是 IMAPI (映像控制 Image Mastering API),也是 Windows XP 以上版本支持。IMAPI 可用於查詢刻錄機、寫入數據以及一些叫不出名字的先進功能。
    創建 MSDiscMasterObj 對象,該對象有如下接口:
        -o IDiscMaster
        -o IRedbookDiscMaster
        -o IJolietDiscMaster
    稍爲解釋一下:CD 一般分爲兩種:音頻CD和數據CD,前者遵循紅皮書規範,後者則爲ISO-9660規範 (也有其它一些數據規範,Joliet是ISO-9660的擴展。)

    首先獲得 IDiscMaster 接口,調用 EnumDiscMasterFormats 列舉驅動器支持的媒體格式 (Redbook, Joliet等),根據格式獲取 IRedbookDiscMaster 等對應接口。如果要求更高可以調用 Get/SetActiveDiscMasterFormat 以動態更新。

    然後調用 EnumDiscRecorders 列出所有刻錄設備,對應 IDiscRecorder 接口,該接口提供諸如設備路徑、屬性、彈出、擦除 CD-RW 等功能,但不包括寫入數據。

    具體的寫入數據根據不同格式而不同,對於數據CD,即Joliet 格式,首先調用 AddData(IStorage*) 方法加入文件、目錄等,而對於音頻CD,即紅皮書格式則首先調用 AddAudioTrackBlocks 加入音軌。這些方法都是將數據拷貝到集結區,而不是立即寫入。
    當數據都準備好了,最後調用 IDiscMaster 的 RecordDisc 方法就可以了。這個方法有一個 bSimulate 的參數用於“模擬寫入”,不過你可能永遠不會去用它。

    關於 IMAPI 就介紹到這,它雖然比較簡單,不過靠着 Windows XP 這棵大樹,對於VB程序員也差不多足夠了。


二,MCDB - Magic CD/DVD Burner (C/C++ Library)

MCDB 是 Binary Magic 開發的商用 CD/DVD 刻錄組件,易用性比較好,有 VCL 和 ActiveX 兩大類別,Audio/CD/DVD/VCD 等不同媒介的幾個版本,可用於 Delphi, C++ Builder, C#, VB.net, VB, C++ 等開發語言。MCDB支持UDF接口,Unicode字符集,以及多種刻錄機接口,可非常容易的製作MPEG VCD、可啓動光盤等,其核心使用ASPI接口(高級SCSI編程接口,也可用於訪問IDE接口)。

編寫 MCDB 應用程序非常簡單,基本類似於 IMAPI。
首先創建 MCDBurner 對象,屬性 DeviceCount 和 DeviceName[] 查得刻錄機列表。
通過調用 InsertFile/InsertDir 將如要寫入的文件和目錄,然後執行寫入,有幾種不同的寫入方法:
    BuildISOImage(filename)  寫入ISO映像文件
    BurnISO(isofile)  將 ISO映像文件寫入光盤
    Prepare/Burn  直接寫入光盤 (也就是著名的 on-the-fly 寫盤技術)
其它常用的方法有:
    EraseDisc  擦除 CD-RW 盤片
    DiscIs  判斷媒體類型
    MaxWriteSpeed/WriteSpeed  寫入速度
    LoadMedium/EjectMedium  裝入和彈出光盤

MCDB 的 120M 試用版可在 www.binarymagics.com 上下載,零售價爲200-400美元不等,同時有源碼出售,價格2000美元左右。


三,hpCDE

hpCDE 是 Primo Software 開發的一款高性能CD/DVD刻錄組件,目前版本1.78,從特性列表中可以看到它對硬件的支持非常多,在寫入中支持 DVD DAO/Incremental、TAO, SAO, DAO, RAW, CD-PLUS 等多種模式,支持 UDF和HFS文件系統,可用於刻錄供Mac OS使用的光盤,以及支持飛盤保護如JustLink, SafeBurn, SmartBurn等高級特性。

相較於前面兩個,hpCDE明顯複雜,沒辦法~ 強大的東西總是複雜的。

先從CD複製開始,工廠類 hpCDE 提供了其它類的構建方法,大致過程如下:

    初始化:
    hpCDE::CreateEngine     獲得引擎對象
    IEngine::Initialize     初始化引擎,其中win 95/98必須使用ASPI,而NT則不用。
    IEngine::GetDevices     獲得驅動器列表
        - IDeviceCollection::GetItem    枚舉驅動器
        - IDevice::GetWritePossible     判斷是否可寫,並忽略不可寫設備
        - IDevice::GetDriveLetter       查詢盤符
        - IDevice::GetDescription       查詢卷標
        - IDevice::GetMediaFreeSpace    判斷是否盤片是否可用
        - IDevice::GetMediaIsBlank      判斷是否爲空盤
        - IDevice::GetMaxWriteSpeed     最高寫入速度
        - IDevice::GetReWritePossible   刻錄機是否支持擦除
        - IDevice::GetMediaIsReWritable 盤片是否可擦除

如果希望CD複製並行進行,因此需要建立兩個線程分別用於讀取/寫入,hpCDE 支持多線程模型。hpCDE 支持SAO/TAO/DAO,這裏CD複製使用的是 DAO。對於多段寫入,每個段對應於一個ISession,一個Session可以包含多個Track。
    
    寫入過程:
    IDevice::SetCurrentSpeeds   設置寫入速度
    IDevice::Eject              彈出盤片
    
    
參考
http://www.hpcde.com/documentation/index.html


四,cdrdao, cdrtools

參考:
    http://cdrdao.sourceforge.net/
    http://freshmeat.net/projects/cdrecord/
    http://linuxcommand.org/man_pages/cdrecord1.html

cdrdao 是一款開源 DAO 模式刻錄軟件,有 linux 和 windows 兩個版本。

cdrdao 僅支持一種模式 DAO 即一次完成寫盤,這種模式可以實現一些 pre-gaps 的有趣特性,對於光盤防拷貝,則可以實現 ECC 檢查的技巧。因爲是專門爲 DAO 設計,不是專業人士恐怕無法閱讀其源代碼。

cdrtools 也是開源的,不過它是全功能的,包括IDE/ATAPI/SCSI, 音頻/數據/混合CD,多段刻錄,CD-RW,TAO/DAO/RAW 等等,同時支持很多操作系統

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