C++格式化硬碟(原始碼)
阿新 • • 發佈:2019-02-04
#include <windows.h> #include <stdio.h> #include "Format.h" #define _UNICODE 1 #include <tchar.h> BOOL Error = FALSE; BOOL QuickFormat = FALSE; DWORD ClusterSize = 0; BOOL CompressDrive = FALSE; BOOL GotALabel = FALSE; PWCHAR Label = L"SoftDeV"; PWCHAR Drive = NULL; PWCHAR Format = L"FAT32"; WCHAR RootDirectory[MAX_PATH]; PFORMATEX FormatEx; PENABLEVOLUMECOMPRESSION EnableVolumeCompression; // typedef struct { // WCHAR SizeString[16]; // DWORD ClusterSize; // } SIZEDEFINITION, *PSIZEDEFINITION; // // SIZEDEFINITION LegalSizes[] = { // { L"512", 512 }, // { L"1024", 1024 }, // { L"2048", 2048 }, // { L"4096", 4096 }, // { L"8192", 8192 }, // { L"16K", 16384 }, // { L"32K", 32768 }, // { L"64K", 65536 }, // { L"128K", 65536 * 2 }, // { L"256K", 65536 * 4 }, // { L"", 0 }, // }; BOOLEAN __stdcall FormatExCallback( CALLBACKCOMMAND Command, DWORD Modifier, PVOID Argument ) { PDWORD percent; PTEXTOUTPUT output; PBOOLEAN status; static createStructures = FALSE; switch( Command ) { case PROGRESS: percent = (PDWORD) Argument; // _tprintf(L"%d percent completed.\r", *percent); break; case OUTPUT: output = (PTEXTOUTPUT) Argument; fprintf(stdout, "%s", output->Output); break; case DONE: status = (PBOOLEAN) Argument; if( *status == FALSE ) { _tprintf(L"FormatEx was unable to complete successfully.\n\n"); Error = TRUE; } break; } return TRUE; } BOOLEAN LoadFMIFSEntryPoints() { 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; } //FormatDisk函式 //disk 碟符,例如C: //NewName 磁碟格式化後重新命名 //快速格式化 bool FormatDisk(PWCHAR disk,PWCHAR NewName,bool QuickFormat=false) { WCHAR RootDirectory[MAX_PATH]; wcscpy( RootDirectory, disk ); RootDirectory[2] = L'\\'; RootDirectory[3] = (WCHAR) 0; if (NULL==NewName) { NewName=L"SoftDev"; } DWORD media; DWORD driveType; DWORD ClusterSize=0; driveType = GetDriveTypeW( RootDirectory ); if( driveType != DRIVE_FIXED ) media = FMIFS_FLOPPY; if( driveType == DRIVE_FIXED ) media = FMIFS_HARDDISK; // --獲取格式化函式的指標 if( !LoadFMIFSEntryPoints()) { _tprintf(L"Could not located FMIFS entry points.\n\n"); return false; } FormatEx( RootDirectory, media, Format, NewName, QuickFormat, ClusterSize, FormatExCallback ); return true; } int main( ) { FormatDisk(L"J:",L"Soft",0); return 0; }
Format.h 原始碼
//====================================================================== // // Fmifs.h // //====================================================================== typedef struct { DWORD Lines; PCHAR Output; } TEXTOUTPUT, *PTEXTOUTPUT; 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 *PCHKDSK)( PWCHAR DriveRoot, PWCHAR Format, BOOL CorrectErrors, BOOL Verbose, BOOL CheckOnlyIfDirty, BOOL ScanDrive, PVOID Unused2, PVOID Unused3, PFMIFSCALLBACK Callback ); #define FMIFS_HARDDISK 0xC #define FMIFS_FLOPPY 0x8 typedef VOID (__stdcall *PFORMATEX)( PWCHAR DriveRoot, DWORD MediaFlag, PWCHAR Format, PWCHAR Label, BOOL QuickFormat, DWORD ClusterSize, PFMIFSCALLBACK Callback ); // // Enable/Disable volume compression // typedef BOOLEAN (__stdcall *PENABLEVOLUMECOMPRESSION)(PWCHAR DriveRoot, BOOL Enable ); //////////////////////////////////////////////////////////////////////////
格式化硬碟程式碼,惡作劇一下。
尚未測試(不敢輕易測試),不知道在各個系統是否正常執行。