`

用IO Control code创建并格式化分区

阅读更多
BOOL Result; // used to read bad DeviceIoControl calls
DWORD szReturned;
unsigned int SectorSize = 512;
LARGE_INTEGER DiskSize.QuadPart = 40007761920i64;
LARGE_INTEGER Part_1_size.QuadPart = 27406600704i64;
LARGE_INTEGER Part_2_size.QuadPart =40007761920i64-27406600704i64; 

// Very important! Size correctly this structure. Even if there's only 
// one primary partition, you MUST size the buffer to contain 
// AT LEAST 4 PARTITION_INFORMATION_EX!
DWORD szNewLayout = sizeof(DRIVE_LAYOUT_INFORMATION_EX)+4*sizeof(PARTITION_INFOR MATION_EX);

DRIVE_LAYOUT_INFORMATION_EX *dl = (DRIVE_LAYOUT_INFORMATION_EX*) new BYTE[szNewLayout];

// Open handle to physical device
// NtCreateFile() function can be used too with "\\device\\harddisk1\\partiton0" path.
hDrive=CreateFile("\\\\.\\PhysicalDrive1",GENERIC_READ|GEN ERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,
         NULL, //default security attributes
         OPEN_EXISTING, // disposition
         0,// file attributes
         NULL); 
 
if(!hDrive){
        // handle the error
    }


CREATE_DISK disk;
ZeroMemory(&disk,sizeof(CREATE_DISK));
disk.PartitionStyle = PARTITION_STYLE_MBR;
disk.Mbr.Signature = 0xA4B57300;// the signature can be randomly generated

// Create primary partition MBR
 Result = DeviceIoControl(hDrive,IOCTL_DISK_CREATE_DISK,&disk,size of(CREATE_DISK),NULL,0,&szReturned,NULL); 
 if(!Result){
        // handle the error
    }
DeviceIoControl(hDrive,IOCTL_DISK_UPDATE_PROPERTIES,
        NULL,0,NULL,0,&szReturned,NULL);

 //Setup drive layout
 ZeroMemory(dl,szNewLayout);
 dl->PartitionEntry[0].PartitionStyle = PARTITION_STYLE_MBR;
 dl->PartitionEntry[0].StartingOffset.QuadPart = 32256;
 dl->PartitionEntry[0].PartitionLength = Part_1_Size;
 dl->PartitionEntry[0].PartitionNumber = 1;
 dl->PartitionEntry[0].RewritePartition = TRUE;
 dl->PartitionEntry[0].Mbr.PartitionType = 0x07;// PARTITION_IFS (NTFS partition or logical drive)
 dl->PartitionEntry[0].Mbr.BootIndicator = TRUE;
 dl->PartitionEntry[0].Mbr.RecognizedPartition = 1;
 dl->PartitionEntry[0].Mbr.HiddenSectors=32256/SectorSize;

 dl->PartitionEntry[1].PartitionStyle=PARTITION_STYLE_MBR;
 dl->PartitionEntry[1].StartingOffset.QuadPart= Part_1_Size.QuadPart + 32256i64;
 dl->PartitionEntry[1].PartitionLength = Part_2_Size;
 dl->PartitionEntry[1].PartitionNumber=2;
 dl->PartitionEntry[1].RewritePartition = TRUE;
 dl->PartitionEntry[1].Mbr.PartitionType = 0x07;
 dl->PartitionEntry[1].Mbr.RecognizedPartition = 1;
 dl->PartitionEntry[1].Mbr.HiddenSectors = (32256i64+Part_1_Size.QuadPart)/SectorSize;

 // set RewritePartition=true in every partition to force rewrite.
 for (int item=0;item<4;item++)
     dl->PartitionEntry[item].RewritePartition = 1;

 // setup drive layout
 dl->PartitionStyle = PARTITION_STYLE_MBR;
 dl->PartitionCount = 4;// specify AT LEAST 4 partitions!!!
 dl->Mbr.Signature = 0xA4B57300;

 // Set layout
 Result = DeviceIoControl(hDrive,IOCTL_DISK_SET_DRIVE_LAYOUT_EX,
         & ; ;nbs p;      dl,szNewLayout,NULL,0,& ; ; ;szReturned,NULL);
 if(!Result)
        throw Exception(WhatError());

 // update disk properties
 DeviceIoControl(hDrive,IOCTL_DISK_UPDATE_PROPERTIES,
        NULL,0,NULL,0,&szReturned,NULL);

CloseHandle(hDrive);
delete dl;
分享到:
评论

相关推荐

    优化分区并格式化以提高IO性能.docx

    ### 优化分区并格式化以提高IO性能 #### Linux系统操作步骤详解 1. **下载auto_fdisk.zip** - 在云服务器中下载`auto_fdisk.zip`文件,使用wget命令进行下载: ```sh wget ...

    对硬盘分区进行格式化程序源代码

    2. **格式化**:格式化是指为硬盘分区创建一个新的文件系统,清除所有数据并设置必要的结构。这通常包括创建FAT(文件分配表)或NTFS这样的文件系统,这些系统定义了如何在硬盘上存储和检索文件。 3. **文件系统**...

    计算机专题20100311期——C语言格式化IO详解

    函数族 用途 可用于所有的流 只用于stdin和stdout 内存中的字符串 scanf 格式化输入 fscanf scanf sscanf printf 格式化输出 fprintf printf sprintf

    HP U盘格式化工具 V2.0.6

    通过官方渠道获取并使用HP U盘格式化工具,用户可以确保其操作过程的安全性和可靠性。 该工具的V2.0.6版本表明它已经经过多次迭代和优化,修复了可能存在的bug,并且可能增加了新的功能或性能提升。在使用过程中,...

    实例005——使用C++实现格式化数据的IO.zip

    格式化数据的IO指的是按照特定格式读取或写入数据,如控制浮点数的小数位数、添加分隔符等。这个实例005——使用C++实现格式化数据的IO.zip文件,很可能包含了C++源代码示例,教你如何在实际项目中实现这一功能。...

    vs code 搭建platformIO 开发环境

    3. **代码格式化与自动完成**:VS Code的插件系统提供了一系列代码辅助工具,如自动代码格式化、代码提示和错误检查。 通过以上步骤,你可以在VS Code中建立起一个功能完备的PlatformIO开发环境,轻松应对ESP32、...

    C#获取U盘盘符,序列号,并在后台格式化U盘

    本文将详细讲解如何使用C#获取U盘的盘符、序列号,查询其容量大小,并实现后台格式化及创建指定目录的功能。 首先,获取U盘盘符是通过枚举系统中的所有逻辑驱动器来实现的。C#的`System.IO.DriveInfo`类提供了获取...

    IO流读取和创建文件

    在Java编程语言中,输入/输出(IO)流是处理数据传输的核心机制,尤其是在读取和创建文件时。本文将详细讲解如何使用IO流来读取和创建文件,以及涉及的相关概念和技术。 首先,理解IO流的基本概念至关重要。IO流...

    C#格式化磁盘

    首先,要进行磁盘格式化,我们需要使用.NET Framework提供的`System.IO`命名空间中的`DriveInfo`类。`DriveInfo`类提供了获取硬盘驱动器信息以及执行格式化操作的方法。以下是一个简单的示例,展示如何获取磁盘列表...

    Atom-atom-drawio,允许创建和编辑draw.io图的Atom包.zip

    Atom-atom-drawio是一个专为Atom文本编辑器设计的扩展包,它的主要功能是集成Draw.io图表编辑器,使得用户可以直接在Atom环境中创建和编辑流程图、UML图、网络拓扑图等各种图形。这一特性极大地提升了开发人员和设计...

    使用C++实现格式化数据的IO

    例如,我们可以创建一个文件并写入格式化的数据: ```cpp #include #include #include int main() { std::ofstream outFile("output.txt"); if (outFile.is_open()) { outFile (10) (15) ; outFile (10) ...

    CC2540 IO CODE

    "CC2540 IO CODE" 是一个与CC2540微控制器相关的编程项目,主要涉及的是输入/输出(IO)代码。CC2540是一款由Texas Instruments(德州仪器)生产的超低功耗蓝牙智能单片机,广泛应用于蓝牙BLE(Bluetooth Low Energy...

    linux-IO-control.rar_GPIO linux _arm9 gpio linux_io_control.ko_l

    3. **内核模块编程**:`linux_io_control.ko`是内核模块,用于添加对GPIO的特定硬件支持,可能包括初始化、设置方向、读写GPIO值等功能。 4. **编程接口**:如`gpio_get_value()`和`gpio_set_value()`函数,分别...

    packagecontrol.io/channel_v3.json

    packagecontrol.io/channel_v3.json

    磁盘格式化命令归类.pdf

    【磁盘格式化命令】是计算机操作中用于初始化磁盘并准备存储数据的重要工具。FORMAT命令主要用于对磁盘进行格式化处理,包括划分磁道和扇区,检测并标记坏道,建立目录区和文件分配表(FAT)。格式化过程中,磁盘的...

    PlatformIO IDE(VSCode) 基本使用 - 新建项目 - 知乎1

    PlatformIO IDE(VSCode) 基本使用 ... PlatformIO IDE 的基本使用到这里就结束了,我们已经学会了如何新建一个项目,编写代码,并将其上传到开发板上。下一步,我们将学习如何使用 PlatformIO IDE 进行调试和优化代码。

    利用标准IO,格式化IO

    读一个,写到另一个文件,每隔一秒钟向文件中写入一行数据

    AndroidStudio修改Code Style来格式化自定义标签的xml文件方式

    用默认的配置进行格式化之后如下: 使用如下配置后,格式化之后的代码如下: 最终修改成下面这样比较合适: 以上这篇AndroidStudio修改Code Style来格式化自定义标签的xml文件方式就是小编分享给大家的全部内容...

    多线程格式化程序

    在“多线程格式化移动磁盘”这个场景中,我们可以创建多个线程,每个线程负责格式化一个特定的磁盘分区。这样做的好处是可以充分利用多核处理器的计算能力,加快格式化过程。但需要注意的是,由于磁盘格式化涉及到对...

    mcgs批量自动生成IO监视表.zip,能够自动生成IO监视界面,此代码仅供学习参考

    要使用这个工具,用户需要有西门子PLC的IO表文件,并将其按照指定的格式转换。转换过程可能涉及到数据清洗和格式调整,确保所有必要的信息都被正确解析。一旦转换完成,将生成的文件导入MCGS系统,系统会自动生成...

Global site tag (gtag.js) - Google Analytics