硬盘低级格式化的研究

原创 2002年07月11日 09:33:00

file://硬盘低级格式化的研究
#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
                );
}
file://简单调用sample.
    HANDLE hDiskImage;
    DISK_GEOMETRY Geometry;
     HANDLE hDevice; // handle to the drive to be examined
     DISK_GEOMETRY SupportedGeometry[20];
DWORD SupportedGeometryCount;
hDevice = CreateFile("////.//PhysicalDrive0", // drive to open
                       0,       // don't need any access to the drive
                       FILE_SHARE_READ | FILE_SHARE_WRITE,  // share mode
                       NULL,    // default security attributes
                       OPEN_EXISTING,  // disposition
                       0,       // file attributes
                       NULL);   // don't copy any file's attributes

 if (hDevice == INVALID_HANDLE_VALUE) {        // if we can't open the drive...
    MessageBox("打开设备错误");
  }           
        if ( LockVolume(hDrive) == FALSE ) {
            MessageBox("Locking volume failed );
            ExitProcess(1);
            }

        if ( !GetDiskGeometry(hDrive,&Geometry) ) {
            MessageBox("GetDiskGeometry failed");
            ExitProcess(1);
            }
            GetSupportedGeometrys(hDrive);
             for(i=0;i<SupportedGeometryCount;i++) {
           LowLevelFormat(hDrive,&SupportedGeometry[i]);
           }
            DismountVolume(hDrive);
        UnlockVolume(hDrive);
        ExitProcess(0);

关于硬盘低级格式化与安装系统的那些事

首先介绍下硬盘低级格式化,百度百科定义,低级格式化就是将空白的磁盘划分出柱面和磁道,再将磁道划分为若干扇区,每个扇区又划分出标识部分ID、间隔区GAP和数据区DATA等。 硬盘低级格式化的功用:硬盘...
  • MrKnight
  • MrKnight
  • 2013年01月14日 12:54
  • 3665

低级格式化和高级格式化的区别是什么?

  低级格式化与高级格式化区别 ...
  • tanliyoung
  • tanliyoung
  • 2006年10月24日 12:14
  • 2246

用Debug汇编语言进行硬盘低级格式化

  低级格式化硬盘能完成销毁硬盘内的数据,所以在操作前一定要谨慎。硬盘低格有许多方法,例如直接在CMOS中对硬盘进行低格,或者使用汇编语言进行硬盘低格,而最常见的莫过于使用一些工具软件来对硬盘进行低格...
  • welcomejzh
  • welcomejzh
  • 2010年03月05日 17:02
  • 1519

低级格式化硬盘工具(支持移动硬盘)http://www.tudou8.cn/post/332.html

软件大小:601KB软件类别:国产软件/系统工具软件授权:免费软件软件语言:简体中文运行环境:Win XP软件简介:Ide硬盘、移动硬盘、SATA、品牌硬盘都照吃不误!关键是:可以在XP下操作!低级格...
  • chief1985
  • chief1985
  • 2007年11月20日 18:25
  • 9060

Ubuntu下U盘低级格式化

Ubuntu下U盘低级格式化命令如下: sudo dd if=/dev/zero of=/dev/sdb 可以用命令df查看U盘挂载在哪个分区下,如果U盘挂载在/dev/sdb下,如果不是/...
  • yuqinying112
  • yuqinying112
  • 2012年01月03日 09:13
  • 3113

硬盘低级格式化需谨记

硬盘如果出现了物理坏道,如果还在保修期,那找商家换一个就好了,这到是挺容易解决的。但如果出了保修期,怎么办呢?有一个很好但不为大多数人知的办法那就是对硬盘进行一次低级格式化的操作,是怎么操作的呢? ...
  • wuhualong1314
  • wuhualong1314
  • 2012年08月07日 15:55
  • 433

硬盘低级格式化详解

    硬盘从制造到使用一般都要经过:低级格式化→分区→高级格式化三个步骤。而低级格式化一般是硬盘生产厂家出厂时都已完成,普通用户只是利用其他工具进行分区和高级格式化而已,不过有时我们也需要将硬盘低级...
  • casularm
  • casularm
  • 2004年12月10日 13:30
  • 3599

硬盘低级格式化指导

(郑重声明:不到万不得已的地步,不要进行,低格对硬盘伤害较大)   DM 硬盘管理工具   DM的全名是Hard Disk Management Program,能对硬盘进行低级格式化、校验等管理工作...
  • fastzch
  • fastzch
  • 2004年12月19日 02:59
  • 1075

“磁盘低格工具”帮你彻底清除磁盘数据不留痕迹的方法

有时候你想让自己的磁盘数据彻底清除干净,但是又找不到好的磁盘清除工具。“磁盘低格工具”可以把你的数据清除的一干二净,但是这样毁损伤磁盘,不建议多次使用。此工具可以详细列出磁盘硬件信息,以及详细的物理参...
  • tianss15
  • tianss15
  • 2014年07月08日 15:12
  • 1863

低级格式化

1:也称物理格式化;用于测试硬盘介质;为硬盘的每个磁道按指定的交错因子间隔安排扇区;通过低格,将扇区ID放置在每个磁道上,完成对扇区的设置;对磁盘表面进行测试,对已损坏的磁道和扇区作标记;给硬盘中的每...
  • UnixCRoot
  • UnixCRoot
  • 2012年12月01日 17:47
  • 340
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:硬盘低级格式化的研究
举报原因:
原因补充:

(最多只允许输入30个字)