格式化磁盘


#include <winioctl.h>
#include
<string.h>
#include
<ctype.h>
#include
<memory.h>
BOOL GetDiskGeometry(HANDLE hDisk,PDISK_GEOMETRY lpGeometry )
{
    DWORD ReturnedByteCount;

   
return DeviceIoControl(
                hDisk,
                IOCTL_DISK_GET_DRIVE_GEOMETRY,
                NULL,
               
0,
                lpGeometry,
               
sizeof(*lpGeometry),
               
&ReturnedByteCount,
                NULL
                );
}
DWORD GetSupportedGeometrys(
    HANDLE hDisk
    )
{
    DWORD ReturnedByteCount;
    BOOL b;
    DWORD NumberSupported;

    b
= DeviceIoControl(
                hDisk,
                IOCTL_DISK_GET_MEDIA_TYPES,
                NULL,
               
0,
                SupportedGeometry,
               
sizeof(SupportedGeometry),
               
&ReturnedByteCount,
                NULL
                );
   
if ( b ) {
        NumberSupported
= ReturnedByteCount / sizeof(DISK_GEOMETRY);
        }
   
else {
        NumberSupported
= 0;
        }
    SupportedGeometryCount
= NumberSupported;

   
return NumberSupported;
}
BOOL  LowLevelFormat(HANDLE hDisk,PDISK_GEOMETRY lpGeometry )
{
    FORMAT_PARAMETERS FormatParameters;
    PBAD_TRACK_NUMBER lpBadTrack;
    UINT i;
    BOOL b;
    DWORD ReturnedByteCount;

    FormatParameters.MediaType
= lpGeometry->MediaType;
    FormatParameters.StartHeadNumber
= 0;
    FormatParameters.EndHeadNumber
= lpGeometry->TracksPerCylinder - 1;
    lpBadTrack
= (PBAD_TRACK_NUMBER) LocalAlloc(LMEM_ZEROINIT,lpGeometry->TracksPerCylinder*sizeof(*lpBadTrack));

   
for (i = 0; i < lpGeometry->Cylinders.LowPart; i++) {

        FormatParameters.StartCylinderNumber
= i;
        FormatParameters.EndCylinderNumber
= i;

        b
= DeviceIoControl(
                hDisk,
                IOCTL_DISK_FORMAT_TRACKS,
               
&FormatParameters,
               
sizeof(FormatParameters),
                lpBadTrack,
                lpGeometry
->TracksPerCylinder*sizeof(*lpBadTrack),
               
&ReturnedByteCount,
                NULL
                );

       
if (!b ) {
            LocalFree(lpBadTrack);
           
return b;
            }
        }

    LocalFree(lpBadTrack);

   
return TRUE;
}

BOOL LockVolume( HANDLE hDisk  )
{
    DWORD ReturnedByteCount;

   
return DeviceIoControl(
                hDisk,
                FSCTL_LOCK_VOLUME,
                NULL,
               
0,
                NULL,
               
0,
               
&ReturnedByteCount,
                NULL
                );
}

BOOL UnlockVolume(   HANDLE hDisk   )
{
    DWORD ReturnedByteCount;

   
return DeviceIoControl(
                hDisk,
                FSCTL_UNLOCK_VOLUME,
                NULL,
               
0,
                NULL,
               
0,
               
&ReturnedByteCount,
                NULL
                );
}

BOOL DismountVolume( HANDLE hDisk   )
{
    DWORD ReturnedByteCount;

   
return DeviceIoControl(
                hDisk,
                FSCTL_DISMOUNT_VOLUME,
                NULL,
               
0,
                NULL,
               
0,
               
&ReturnedByteCount,
                NULL
                );
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值