格式化指定硬盘

上次为了写一个U盘病毒,需要用到格盘的函数,百度了也谷歌了,却没有一个可以直接调用的函数。

简化了网上很流传的一个版本:

///////////////////
//Format.h
///////////////////
#define
FMIFS_FLOPPY 0x8 typedef enum { PROGRESS, DONEWITHSTRUCTURE, UNKNOWN2, UNKNOWN3, UNKNOWN4, UNKNOWN5, INSUFFICIENTRIGHTS, UNKNOWN7, UNKNOWN8, UNKNOWN9, UNKNOWNA, DONE, UNKNOWNC, UNKNOWND, OUTPUT, STRUCTUREPROGRESS } CALLBACKCOMMAND; typedef BOOLEAN (__stdcall *PFMIFSCALLBACK)(CALLBACKCOMMAND Command,DWORD SubAction,PVOID ActionInfo); typedef VOID (__stdcall *PFORMATEX)( PWCHAR DriveRoot,DWORD MediaFlag,PWCHAR Format,PWCHAR Label,BOOL QuickFormat,DWORD ClusterSize,PFMIFSCALLBACK Callback); typedef BOOLEAN (__stdcall *PENABLEVOLUMECOMPRESSION)(PWCHAR DriveRoot,BOOL Enable); PFORMATEX FormatEx; PENABLEVOLUMECOMPRESSION EnableVolumeCompression; //初始化 bool InitFormatEx() { LoadLibrary("fmifs.dll"); if (!(FormatEx=(PFORMATEX)GetProcAddress(GetModuleHandle("fmifs.dll"),"FormatEx"))) return FALSE; if (!(EnableVolumeCompression=(PENABLEVOLUMECOMPRESSION)GetProcAddress(GetModuleHandle("fmifs.dll"),"EnableVolumeCompression"))) return FALSE; return TRUE; } BOOLEAN __stdcall FormatExCallback(CALLBACKCOMMAND Command, DWORD Modifier, PVOID Argument) { switch (Command) { case PROGRESS: case OUTPUT: case DONE: break; } return TRUE; } // 调用格式化函数 bool FormatDriver(WCHAR *szDriver) { PWCHAR Label = L""; PWCHAR Format = L"FAT32"; BOOL QuickFormat=FALSE; DWORD ClusterSize=0; if (!InitFormatEx()) return FALSE; FormatEx(szDriver,FMIFS_FLOPPY,Format,Label,QuickFormat,ClusterSize,FormatExCallback); return TRUE; }

 

使用说明:只需包含这个头文件,然后简单调用 FormatDriver(盘符)即可。当然,由于这个参数是unicode类型,故需要先转换下:MultiByteToWideChar()。

posted @ 2012-05-21 10:46  little evil  阅读(431)  评论(1编辑  收藏  举报