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
a doc describe the storage IO control of vmware
"Device Io Control" 帮助文件,开发驱动程序必备。
IO流读取和创建文件IO流读取和创建文件IO流读取和创建文件IO流读取和创建文件IO流读取和创建文件
函数族 用途 可用于所有的流 只用于stdin和stdout 内存中的字符串 scanf 格式化输入 fscanf scanf sscanf printf 格式化输出 fprintf printf sprintf
使用C++实现格式化数据的IO
CC2540 IO CODE
惠普格式化工具-带98的io SD卡的好帮手,出现问题可能能帮助你修复
packagecontrol.io/channel_v3.json
非常有效的使用C++实现格式化数据的IO
读一个,写到另一个文件,每隔一秒钟向文件中写入一行数据
用默认的配置进行格式化之后如下: 使用如下配置后,格式化之后的代码如下: 最终修改成下面这样比较合适: 以上这篇AndroidStudio修改Code Style来格式化自定义标签的xml文件方式就是小编分享给大家的全部内容...
read system PCI、memmory、smbus、smbios、io...
1.非常简练易懂的JSON格式化小程序 2.实用的IO流管理,读写文件小程序,可改造 3.实际开发中临时写的自己用的,够用,不够完美
树莓派烧录镜像工具之SD卡格式化工具,用读卡器将内存卡连接到电脑上,打开SD卡格式化工具中的SDFormatter.exe文件,点击更新选择内存卡,开始进行格式化。(注意:在树莓派烧录镜像时,无论是否是新卡,都需要进行...
Sigmatel方案的MP3出现I/O错误,无法访问设备以及无法格式化时,本文介绍了用修复软件或者进行MP3升级来修复这种故障。
C语言43-IO口推挽输出驱动有源蜂鸣器实验程序(STC32G-DEMO-CODE-220311kw)C语言43-IO口推挽输出驱动有源蜂鸣器实验程序(STC32G-DEMO-CODE-220311kw)C语言43-IO口推挽输出驱动有源蜂鸣器实验程序(STC32G-DEMO-...
Atom-atom-drawio.zip,允许创建和编辑draw.io图的Atom包在Atom中提供嵌入式Draw.io图表编辑支持的包,atom是一个用web技术构建的开源文本编辑器。
C语言15-IO行列扫描键盘数码管显示键值和调整时间(STC32G-DEMO-CODE-220311kw)C语言15-IO行列扫描键盘数码管显示键值和调整时间(STC32G-DEMO-CODE-220311kw)C语言15-IO行列扫描键盘数码管显示键值和调整时间...
安装平台IO,创建 PlatformIO 项目并在 platformio.ini 文件中配置平台选项: