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;

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

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

    EFI/GPT探索(为何win7分区时创建100M隐藏分区) 转自 http://blog.tomatoit.net/article.asp?id=348 EFI/GPT是新一代的固件/启动管理技术, ...

  2. CentOS 添加硬盘创建并挂载分区

    分区工具介绍: fdisk 创建MBR分区:所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区 gdisk 创建GPT分区:突破MBR 4个主分区限制,每个磁盘最多支持1 ...

  3. 手工创建 efi,msr 分区 · Virgil Chan

    昨天在帮同学装 win10 的时候,不小心(不知道那是什么东西)把原系统的 efi 和 msr 盘删了,用 WinNTsetup 安装时 EFI PART 总显示红叉,安装后也进不去系统,想想应该是找 ...

  4. CentOS创建管理LVM分区(挂载新分区)

    来源: CentOS 8.0 创建管理LVM分区(挂载新分区) https://www.iwmyx.cn/centos80cjgllvmfa.html 1.查看可用磁盘 fdisk -l 2.新盘(/ ...

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

    如果你用pe启动光盘和pe启动盘.加载iso安装时遇到"我们无法创建新的分区,也找不到现有的分区"的情况.. 把iso里的boot和bootgmr以及sources复制到c盘,pe ...

  6. win10安装提示“我们无法创建新的分区”

    今日于笔记本安装win10时突然出现提示:我们无法创建新的分区.网上搜了不少建议,尝试了都无果. 由于我的笔记本是固态硬盘与机械硬盘混合,所以情况可能更加特殊. 最后成功的方法是: 1. 先将Win1 ...

  7. mkfs格式化分区(为分区写入文件系统)

    mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096 Bytes),这些默认参数除非特殊清况,否则不需要调整.如果想要调整,就需要使用 mke2fs 命令重新格式化.命令 ...

  8. #内存不够,swap来凑# Linux上创建SWAP文件/分区

    转自:https://www.vmvps.com/how-to-create-a-swap-file-on-the-linux-os.html 很久很久以前,电脑的内存是个珍贵东西,于是乎就有了swa ...

  9. Ubuntu格式化分区时的一个小错误

    admin@gpc:/$ sudo  mkfs -t ext3 -c /dev/sdb1 mkfs.ext3: inode_size (128) * inodes_count (0) too big ...

随机推荐

  1. EasyUI DataGrid 实现单行/多行编辑功能

    要实现 EasyUI DataGrid 的可编辑很简单,在需要编辑的列添加 editor [编辑器]就可以了. 单行编辑 // 初始化数据列表 function initDatagrid() { $( ...

  2. TF中conv2d和kernel_initializer方法

    conv2d中的padding 在使用TF搭建CNN的过程中,卷积的操作如下 convolution = tf.nn.conv2d(X, filters, strides=[1,2,2,1], pad ...

  3. 如何在Java中避免equals方法的隐藏陷阱

    摘要 本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性. 在<Effective Java>的第8项中,Josh Bloch描述了当继 ...

  4. 大数据学习总结(4)参考splunk架构

  5. css回顾之左侧宽度自适应布局

    目标: <!DOCTYPE html> <meta charset=utf-8> <html> <head> <title>alibaba& ...

  6. python多进程--------linux系统中python的os.fork()方法

    linux下python 创建子进程的原理: os.fork()方法 的原理 为了实现并发.多任务,我们可以在主程序种开启一个进程或者线程.在类unix操作系统当中(非windows),可以用pyth ...

  7. Python基础--函数的嵌套和闭包

    一.名称空间和作用域 名称空间:Python所有有关命名的操作都是在操作名称空间,例如变量名,函数名 1.内置名称空间:Python解释器提供好的功能,解释器启动跟着一起启动,是全局作用域 2.全局名 ...

  8. Hibernate(十六):Hibernate二级缓存

    Hibernate缓存 缓存(Cache):计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如磁盘上的文件或者数据库)之间,起作用是降低应用程序直接读取永久性数据存储源的频率,从而提高应用 ...

  9. POJ-2031 Building a Space Station---MST + 空间距离

    题目链接: https://vjudge.net/problem/POJ-2031 题目大意: 就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通.如果两个球有重叠的部分则 ...

  10. __new__方法首先调用并返回一个实例化对象

    >>> class CapStr(str): def __new__(cls,string): string = string.upper() return str.__new__( ...