调用FormatEx 函数格式化磁盘的代码_在路上_百度空间
// Output command
typedef struct
{
DWORD Lines;
PCHAR Output;
} TEXTOUTPUT, *PTEXTOUTPUT;

// Callback command types
typedef enum
{
PROGRESS,
DONEWITHSTRUCTURE,
UNKNOWN2,
UNKNOWN3,
UNKNOWN4,
UNKNOWN5,
INSUFFICIENTRIGHTS,
UNKNOWN7,
UNKNOWN8,
UNKNOWN9,
UNKNOWNA,
DONE,
UNKNOWNC,
UNKNOWND,
OUTPUT,
STRUCTUREPROGRESS
} CALLBACKCOMMAND;

// FMIFS callback definition
typedef BOOLEAN (__stdcall *PFMIFSCALLBACK)( CALLBACKCOMMAND Command, DWORD SubAction, PVOID ActionInfo );


// Chkdsk command in FMIFS
typedef VOID (__stdcall *PCHKDSK)( PWCHAR DriveRoot,
PWCHAR Format,
BOOL CorrectErrors,
BOOL Verbose,
BOOL CheckOnlyIfDirty,
BOOL ScanDrive,
PVOID Unused2,
PVOID Unused3,
PFMIFSCALLBACK Callback );


// media flags
#define FMIFS_HARDDISK 0xC
#define FMIFS_FLOPPY   0x8
// Format command in FMIFS
typedef VOID (__stdcall *PFORMATEX)( PWCHAR DriveRoot,
DWORD MediaFlag,
PWCHAR Format,
PWCHAR Label,
BOOL QuickFormat,
DWORD ClusterSize,
PFMIFSCALLBACK Callback );


// FormatExCallback
BOOLEAN __stdcall FormatExCallback( CALLBACKCOMMAND Command, DWORD Modifier, PVOID Argument )
{
PDWORD percent;
PTEXTOUTPUT output;
PBOOLEAN status;

switch( Command )
{
case PROGRESS:    //格式化进度
percent = (PDWORD) Argument;
DebugString("格式化进度: %d \n", *percent);
break;

case OUTPUT:
output = (PTEXTOUTPUT) Argument;
fprintf(stdout, "%s", output->Output);
break;

case DONE:    //格式化完成
status = (PBOOLEAN) Argument;
if( *status == FALSE )
{
DebugString("格式化未能成功完成(%d)\n", GetLastError());
MakePageFile(iMin, iMax, szPageFilePath);
Error = TRUE;
}
else
{
DebugString("格式化完成!");
MakePageFile(iMin, iMax, szPageFilePath);
}

break;
}
return TRUE;
}

//获取fsifs.dll中的格式化函数指针
BOOLEAN LoadFMIFSEntryPoints()
{
ifsModule = LoadLibrary("fmifs.dll");
FormatEx = (PFORMATEX)GetProcAddress( ifsModule, "FormatEx" );
if(FormatEx == NULL)
{
DebugString("获取FormatEx函数指针失败\n");
return FALSE;
}

if( !(EnableVolumeCompression = (PENABLEVOLUMECOMPRESSION) GetProcAddress( ifsModule, "EnableVolumeCompression" )) )
{
DebugString("获取EnableVolumeCompression函数指针失败\n");
return FALSE;
}
return TRUE;
}

// 调用格式化函数
int CallFormatDriver(char *szDriver)
{
USES_CONVERSION;

BOOL    QuickFormat = TRUE;
DWORD    ClusterSize = 4096;
PWCHAR    Label = NULL;
PWCHAR    Format = L"NTFS";

WCHAR  RootDirectory[MAX_PATH] = {0};

wcscpy( RootDirectory, A2W(szDriver) );
RootDirectory[1] = L':';
RootDirectory[2] = L'\\';
RootDirectory[3] = (WCHAR) 0;

DWORD media;
DWORD driveType;
driveType = GetDriveTypeW( RootDirectory );
if( driveType != DRIVE_FIXED )
media = FMIFS_FLOPPY;
if( driveType == DRIVE_FIXED )
media = FMIFS_HARDDISK;

if( !LoadFMIFSEntryPoints())
{
return -1;
}

FormatEx( RootDirectory, media, Format, Label, QuickFormat, ClusterSize, FormatExCallback );
FreeLibrary(ifsModule);
return 0;
}


郑重声明:资讯 【调用FormatEx 函数格式化磁盘的代码_在路上_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——