用IO创建并格式化分区

  1. 转载:http://raylinn.iteye.com/blog/570274
  2. BOOL Result; // used to read bad DeviceIoControl calls
  3. DWORD szReturned;
  4. unsigned int SectorSize = 512;
  5. LARGE_INTEGER DiskSize.QuadPart = 40007761920i64;
  6. LARGE_INTEGER Part_1_size.QuadPart = 27406600704i64;
  7. LARGE_INTEGER Part_2_size.QuadPart =40007761920i64-27406600704i64;
  8. // Very important! Size correctly this structure. Even if there‘s only
  9. // one primary partition, you MUST size the buffer to contain
  10. // AT LEAST 4 PARTITION_INFORMATION_EX!
  11. DWORD szNewLayout = sizeof(DRIVE_LAYOUT_INFORMATION_EX)+4*sizeof(PARTITION_INFOR MATION_EX);
  12. DRIVE_LAYOUT_INFORMATION_EX *dl = (DRIVE_LAYOUT_INFORMATION_EX*) new BYTE[szNewLayout];
  13. // Open handle to physical device
  14. // NtCreateFile() function can be used too with "\\device\\harddisk1\\partiton0" path.
  15. hDrive=CreateFile("\\\\.\\PhysicalDrive1",GENERIC_READ|GEN ERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,
  16. NULL, //default security attributes
  17. OPEN_EXISTING, // disposition
  18. 0,// file attributes
  19. NULL);
  20. if(!hDrive){
  21. // handle the error
  22. }
  23. CREATE_DISK disk;
  24. ZeroMemory(&disk,sizeof(CREATE_DISK));
  25. disk.PartitionStyle = PARTITION_STYLE_MBR;
  26. disk.Mbr.Signature = 0xA4B57300;// the signature can be randomly generated
  27. // Create primary partition MBR
  28. Result = DeviceIoControl(hDrive,IOCTL_DISK_CREATE_DISK,&disk,size of(CREATE_DISK),NULL,0,&szReturned,NULL);
  29. if(!Result){
  30. // handle the error
  31. }
  32. DeviceIoControl(hDrive,IOCTL_DISK_UPDATE_PROPERTIES,
  33. NULL,0,NULL,0,&szReturned,NULL);
  34. //Setup drive layout
  35. ZeroMemory(dl,szNewLayout);
  36. dl->PartitionEntry[0].PartitionStyle = PARTITION_STYLE_MBR;
  37. dl->PartitionEntry[0].StartingOffset.QuadPart = 32256;
  38. dl->PartitionEntry[0].PartitionLength = Part_1_Size;
  39. dl->PartitionEntry[0].PartitionNumber = 1;
  40. dl->PartitionEntry[0].RewritePartition = TRUE;
  41. dl->PartitionEntry[0].Mbr.PartitionType = 0x07;// PARTITION_IFS (NTFS partition or logical drive)
  42. dl->PartitionEntry[0].Mbr.BootIndicator = TRUE;
  43. dl->PartitionEntry[0].Mbr.RecognizedPartition = 1;
  44. dl->PartitionEntry[0].Mbr.HiddenSectors=32256/SectorSize;
  45. dl->PartitionEntry[1].PartitionStyle=PARTITION_STYLE_MBR;
  46. dl->PartitionEntry[1].StartingOffset.QuadPart= Part_1_Size.QuadPart + 32256i64;
  47. dl->PartitionEntry[1].PartitionLength = Part_2_Size;
  48. dl->PartitionEntry[1].PartitionNumber=2;
  49. dl->PartitionEntry[1].RewritePartition = TRUE;
  50. dl->PartitionEntry[1].Mbr.PartitionType = 0x07;
  51. dl->PartitionEntry[1].Mbr.RecognizedPartition = 1;
  52. dl->PartitionEntry[1].Mbr.HiddenSectors = (32256i64+Part_1_Size.QuadPart)/SectorSize;
  53. // set RewritePartition=true in every partition to force rewrite.
  54. for (int item=0;item<4;item++)
  55. dl->PartitionEntry[item].RewritePartition = 1;
  56. // setup drive layout
  57. dl->PartitionStyle = PARTITION_STYLE_MBR;
  58. dl->PartitionCount = 4;// specify AT LEAST 4 partitions!!!
  59. dl->Mbr.Signature = 0xA4B57300;
  60. // Set layout
  61. Result = DeviceIoControl(hDrive,IOCTL_DISK_SET_DRIVE_LAYOUT_EX,
  62. & ; ;nbs p;      dl,szNewLayout,NULL,0,& ; ; ;szReturned,NULL);
  63. if(!Result)
  64. throw Exception(WhatError());
  65. // update disk properties
  66. DeviceIoControl(hDrive,IOCTL_DISK_UPDATE_PROPERTIES,
  67. NULL,0,NULL,0,&szReturned,NULL);
  68. CloseHandle(hDrive);
  69. delete dl;

原文地址:https://www.cnblogs.com/piaoxuewaiwai/p/8866292.html

时间: 2024-08-30 17:04:23

用IO创建并格式化分区的相关文章

创建分区、格式化分区、挂载分区

大致思路: 1.查看分区状态 2.创建分区 3.重新加载分区表 4.格式化分区 5.挂载分区到目录 查看当前分区状态: [[email protected] ~]# fdisk -cul   Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Secto

文件系统——创建分区+格式化分区

概念:文件系统是针对存储设备而言的. 创建文件系统之前需要指定此文件系统将会应用于的存储设备分区. 可通过 fdisk 命令完成对存储设备的分区 fdisk /dev/sda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Comm

2013 Mac Air 装Win7双系统问题-安装程序无法创建新的分区,也无法定位系统 &amp; Windows无法安装所需的文件,错误代码0x80070570

此非主讲安装过程,主说明过程中遇到的两个问题自己的解决方式. 准备: 准备以下Win7纯净版iso镜像,用Boot Camp方式安装Windows到16GU盘. Win7纯净版资源 问题一: Boot Camp开始分区安装后,进放Windows安装界面,在加载完之前下的驱动和点南完格式化选项后显示 : 安装程序无法创建新的分区,也无法定位系统 . 1)  出现此问题后,参考以下链接. http://support.apple.com/zh-cn/TS4599 苹果官方说明 http://www.

Linux 格式化分区 报错Could not stat --- No such file or directory 和 partprobe 命令

分区的过程正常: [[email protected] /]# fdisk -l Disk /dev/sda: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot      Start         End      Blocks   Id  System /dev/sda1   *

Linux 磁盘管理 基础篇--创建基本文件分区

1 概述 本文通过对讲解了磁盘的基本概念,分区,创建文件系统,挂载,卸载等步骤进行讲解.使得用户能够创建基本的磁盘并挂载使用空间. 2 磁盘基本概念 2.1 磁盘空间 每个扇区大小是512byte,这是磁盘的最小单位 每一个磁道上有多少个扇区就是扇区数 sectors 每一圈叫做磁道(track),最外面的叫做0磁道 依次往里增加,最里面的磁道数最大 每个盘有两个面,都有两个磁头(head)读取数据 相同的磁道组成的叫做柱面(cylinder),同样最外面叫0柱面,最里面柱面数最大 因此, 每个

Linux添加硬盘与fdisk分区、mke2fs格式化分区、自动挂载

fdisk工具只能给2T以下的磁盘进行分区,2T以上使用Parted分区 一.使用fdisk给指定硬盘进行分区 [[email protected] ~]# fdisk /dev/sdbDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel with disk identifier 0x21248295.Changes will r

3. 文件系统——创建、删除分区和内核同步分区信息

一.创建分区 如果使用fdisk命令来创建.删除.修改分区,可以直接使用fdisk [DEVICE]来操作,如: # fdisk /dev/sda 但需要注意的是,用命令来操作硬件,很容易造成数据丢失,故务必谨慎使用. fdisk命令是个交互命令,使用fdisk [DEVICE] 时,系统会提示各种可以使用的选项: [[email protected] ~]# fdisk /dev/sda # 不要加上 -l选项 --------------运行结果----------------- WARNI

EFI/GPT探索(为何win7分区时创建100M隐藏分区)

转自 http://blog.tomatoit.net/article.asp?id=348 EFI/GPT是新一代的固件/启动管理技术,比较复杂,资料很少. 经过大量的搜索,找到了一些资料,总算是摸到了一点门,先简要地说一下. 一.技术背景.EFI是Intel开发的,最早被用于Itanium计算机(1.0版),然后是Mac(1.1版),后来Intel开放了标准和技术资料,EFI由UEFI组织管理(http://www.uefi.org).经过一段时间的开发,升级到2.0版(UEFI 2.0),

Win7/Win8安装&quot;我们无法创建新的分区,也找不到现有的分区&quot;的解决方法

本文讨论的是一般情况下默认的4096簇格式化安装windows的问题,即大家常见的安装问题. 如果是指定系统盘c盘64k/32k /16k单元簇大小的,请看这里:系统盘分区单元簇为64K/C盘64k簇下安装WIN7/WIN8 首先,如果在安装系统选择安装盘符的时候遇到"我们无法创建新的分区,也找不到现有的分区"的情况.请拔掉电脑上所有的u盘,sd卡之类的存储设备,重启电脑进行安装.PE下安装可以在加载完成PE系统后拔掉U盘 ,刷新系统后进行安装. 如果还不行,按下面的方法. 方法一:如