磁碟格式化的編程實現

來源:互聯網
上載者:User
編程 盤格式化是電腦使用者經常使用的操作之一,但由於作業系統的控制台和外殼(Shell)提供了對格式化的完美支援,使編程人員很容易忽視使用者對格式化的基本需求。在他們看來,磁碟格式化對使用者來說並不是一個太大的問題,應用程式不必要對它提供支援。其實,這是一個錯覺,當使用者在運行應用程式遇到需要格式化磁碟時,再切換到控制台或者資源管理員去格式化磁碟是非常不便和煩瑣的。
還有一部分編程人員認為磁碟格式化很容易實現,沒有技術障礙,因此沒有賦予足夠重視。其實,在實際編程時筆者發現磁碟格式化是一個不大不小的問題。一方面,它要求編程盡量簡單,不要涉及中斷、連接埠讀寫、物理扇區存取、VXD、WDM驅動程式等複雜細節,只要能實現格式化即可,代碼越簡單越好,最好是只調用一個函數即可實現。另一方面,筆者卻發現,基本上所有的編程參考書籍都對這個問題隻字不提,在MSDN中也很難找到一個具有這樣功能的FormatDisk函數。當然,我們可以利用WinExec、CreateProcess和ShellExecute等函數去執行Format命令,並且這方案完全可行,不過隨之產生的控制台視窗會使我們的視窗程序顯得不倫不類,破壞原有的程式介面。雖然我們還可以通過設定CreateProcess函數的參數實現對控制台視窗的隱藏,使Format.exe隱蔽地在後台運行,但這又需要我們維護它的完整路徑,這也存在一定困難。
主要函數
從實際應用的角度看,從Windows 9X到Windows NT都應該提供這個FormatDisk函數,否則怎麼實現資源管理員視窗的磁碟格式化呢?筆者通過仔細尋找發現,Windows 確實提供了這樣一個函數,儘管文檔資料沒有註明,但是如果我們使用View Dependencies開啟Shell2.dll,就會發現這個函數。它就是SHFormatDrive,編譯串連到Shell32.lib。儘管通過平台的SDK文檔和SHELLAPI.H檔案並不能發現這個函數,但是Win32各個作業系統都能找到它的蹤影。應用程式可以通過調用這個函數實現借用外殼的磁碟格式化對話方塊格式化磁碟。呼叫慣例如下:
DWORD WINAPI SHFormatDrive(HWND hwnd,UINT drive,UINT fmtID,UINT options);
參數含義如下:
hwnd:擁有對話方塊的視窗控制代碼,注意hwnd為NULL時,並不會導致這個對話方塊產生一個上層的應用程式,也就是說,這個參數總是非NULL,這個對話方塊只能作為一個視窗的子視窗,而不能作為一個單獨的應用程式;
drive:要格式化的磁碟機代號,以A: == 0為基準,依此類推;
fmtID:必須設定為 SHFMT_ID_DEFAULT,即0xFFFF;
options:可以有兩個選擇項:SHFMT_OPT_FULL 0x0001和SHFMT_OPT_SYSONLY 0x0002,如果這一項設定為零,系統就要使用快速格式化作為預設設定。  
該函數的傳回值要麼為一個下列以SHFMT_開頭的值,要麼是一個成功格式化的磁碟標識。
//上次格式化出錯,磁碟可能被格式化
#define SHFMT_ERROR 0xFFFFFFFFL  
//格式化被取消
#define SHFMT_CANCEL 0xFFFFFFFEL  
// 不能進行磁碟格式化
#define SHFMT_NOFORMAT 0xFFFFFFFDL  
實現步驟
1.函數介面聲明
typedef DWORD (WINAPI *PFNSHFORMATDRIVE)(HWND hwnd,UINT drive,UINT fmtID,UINT options);
2.載入Shell32.dll庫
HINSTANCE hInstance=LoadLibrary(_T
(“Shell32.dll”));
If(hInstance==NULL) return;
3.獲得函數指標
PFNSHFORMATDRIVE pFnSHFormatDrive=(  
PFNSHFORMATDRIVE)GetProcessAddress(_T
(“SHFormatDrive”));  
if(pFnSHFormatDrive==NULL)
{
FreeLibrary(hInstance);
return;
}
4.調用函數
(pFnSHFormatDrive)(hwnd,drive/*a:==0*/,fmtID/* SHFMT_ID_DEFAULT */,options);
5.釋放控制代碼資源
FreeLibrary(hInstance);
Return;
本程式在Windows 2000環境下調試通過,使用Delphi、Visual Basic的使用者通過調用上述Windows SDK 函數也可以實現磁碟格式化。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。