如何開發一款USB啓動盤製做工具

其實,徹底不須要大白菜之類的工具,咱們就能夠製做USB啓動盤。首先你得有一個解壓縮軟件,事實上U盤和磁盤同樣,你並不須要像光盤難以添加可引導文件,只須要用bootsect.exe修復引導便可,固然,最主要的問題是你的Bois支持USB啓動。
固然,你徹底能夠根據ISO鏡像格式本身寫釋放模塊,研究ISO格式確實有點麻煩,因此咱們直接用7z替代。
這裏準備的工具備:
7z
bootsect
format(系統自帶)
開發語言 C++
開發工具 VisualStudio 2012 Express for Desktop
純Win32 API
先上圖一張
QQ圖片20131102212608.jpg 
因爲擴展函數效果更好我建議用加了Ex的擴展函數。
個人思路是 先把UI作出來,CreateWindowEx 建立一個窗口,而且在Window上CreateWindowEx 若干個控件,static button edit combobox  msctls_progress32,在主窗口WM_CREATE(建立)消息內建立這些控件,若是主窗口是個Dialog,那麼就得在 WM_INITDIALOG消息,你最好在CreateWindowEx 的HMENU hMenu 綁定一個ID,方便後面的額操做。

本身CreateWindowEx建立的Window上的字是醜陋的,因此你必須對字體進行一個簡單的處理  git

HFONT hFont=(HFONT)GetStockObject(DEFAULT_GUI_FONT);
        LOGFONT logFont={0};
        GetObject(hFont,sizeof(logFont),&logFont);
        DeleteObject(hFont);
        hFont=NULL;
        logFont.lfHeight=19;
        wcscpy_s(logFont.lfFaceName,TEXT("微軟雅黑"));
        //wcscpy_s(logFont.lfFaceName,TEXT("MS Shell Dlg"));
        hFont=CreateFontIndirect(&logFont);
這段代碼的含義就是獲取系統默認的繪圖風格 設置一個字體的句柄,在WM_CREATE消息末尾還要SendMessage 發送WM_SETFONT消息修改控件字體。
界面基本就是這樣了。接下來的就是重點了。

ComBobox的功能就是選擇U盤,封裝一個函數:uInt  FindUSBDisk();這裏涉及到一個重要的API GetDriveType,U盤的返回值是DRIVE_REMOVABLE,GetLogicalDrives的功能是獲取邏輯磁盤信息,因此,咱們先用GetLogicalDrives 獲取磁盤個數,再來用從'C'盤開始判斷是不是可移動磁盤,循環下去,用GetVolumeInformation確認是不是有效的驅動器,在確認是U盤時用GetDiskFreeSpaceEx 獲取磁盤容量。將得到的數據保存在UsbDevice DefUsbDevice[26];結構體數組中;頭文件中定義以下  數組

typedef struct _UsbDevice
{
        uInt Id;
        wchar_t deviceLetter[10];
        wchar_t RootPath[20];
        wchar_t Info[260];
}UsbDevice;
uInt FindUSBDisk();

extern UsbDevice DefUsbDevice[26];
初始化時WM_CREATE 調用一次FindUSBDisk 初始化Combobox的項,在拔出或插入USB盤時有一個消息WM_DEVICECHANGE,這時咱們要清除掉ComboBox的項而且用FindUSBDisk從新獲取USB磁盤信息。而瀏覽按鈕則是獲取ISO鏡像。涉及到打開文件對話框,比較簡單。當用戶選取了USB磁盤而且Edit 內的ISO鏡像路徑正確,則開始製做USB啓動盤,iBurn 將啓動Format 程序等待格式化正確並退出,再啓動7z解壓並等待退出 最後啓動bootsect 等待退出。
參數分別是:
format X:  /FS:NTFS /v:UsbInstall /q /x /A:4096
7z x filename -o X:
bootsect /NT60 X:
X: 指選擇的驅動器

全部的代碼都已經開源
地址爲 http://git.oschina.net/ipvb/iBurn 能夠本身去分析 相互學習,有更多的問題能夠給我發郵件  ipvb@qq.com
再上一圖:
QQ圖片20131102215125.jpg
相關文章
相關標籤/搜索