Windows系统分区

系统分区

一,选择分区表

1,MBR(主引导记录)分区表; 缺陷:最大支持2.1TB的硬盘;最大支持4个主分区。

分区分类:

①主分区:每块硬盘最多4个

②扩展分区:

每块硬盘最多1个,

扩展分区+主分区最多4个,

扩展分区不能格式化,不能写入数据

扩展分区只能用于包含更多的逻辑分区

③逻辑分区:

逻辑分区可以格式化,可以写入数据

逻辑分区可以分10+

分区扩展由左扩到右,分区格式化由右至左,不可跳跃

 

2,GPT(全局唯一标识分区表)

全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体磁盘的分区表的结构布局的标准。 它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。

最大支持9.4ZB的硬盘:理论上支持无限主分区,当前的系统最多支持128个主分区。

 

二,系统选择

1,默认情况(没有人干预)

  以2TB为分界线,2TB(包含)以下的,系统默认选择MBR分区表

2TB以上的,系统默认选择GPT分区表。

2,有人为干预

在安装系统,可以人为干预选择分区表(第三方工具)(手工命令)。

三,格式化(是为了写入文件系统)

[1] Windows常见文件系统 比较

  FAT16: 最大支持2GB的分区

   FAT32: 最大支持4GB的单个文件,32GB分区

  NTFS: 最大支持64GB的单个文件,2TB分区

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 34
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C语言中读取Windows系统分区表,可以使用Windows API函数来实现。以下是使用Windows API函数读取系统分区表的示例代码: ```c #include <stdio.h> #include <windows.h> #include <winioctl.h> int main() { HANDLE hDevice = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hDevice == INVALID_HANDLE_VALUE) { printf("Failed to open disk! Error code: %d\n", GetLastError()); return 1; } STORAGE_PROPERTY_QUERY storagePropertyQuery; ZeroMemory(&storagePropertyQuery, sizeof(storagePropertyQuery)); storagePropertyQuery.PropertyId = StorageDeviceProperty; storagePropertyQuery.QueryType = PropertyStandardQuery; STORAGE_DEVICE_DESCRIPTOR storageDeviceDescriptor; ZeroMemory(&storageDeviceDescriptor, sizeof(storageDeviceDescriptor)); DWORD dwBytesReturned; if (!DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &storagePropertyQuery, sizeof(storagePropertyQuery), &storageDeviceDescriptor, sizeof(storageDeviceDescriptor), &dwBytesReturned, NULL)) { printf("Failed to get device descriptor! Error code: %d\n", GetLastError()); CloseHandle(hDevice); return 1; } BYTE* buffer = (BYTE*)malloc(storageDeviceDescriptor.Size); ZeroMemory(buffer, storageDeviceDescriptor.Size); if (!DeviceIoControl(hDevice, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, NULL, 0, buffer, storageDeviceDescriptor.Size, &dwBytesReturned, NULL)) { printf("Failed to get partition table! Error code: %d\n", GetLastError()); CloseHandle(hDevice); free(buffer); return 1; } PDRIVE_LAYOUT_INFORMATION_EX driveLayoutInformation = (PDRIVE_LAYOUT_INFORMATION_EX)buffer; printf("Drive layout:\n"); printf("Signature: 0x%08X\n", driveLayoutInformation->Mbr.Signature); for (int i = 0; i < driveLayoutInformation->PartitionCount; i++) { PARTITION_INFORMATION_EX partitionInformation = driveLayoutInformation->PartitionEntry[i].PartitionInformation; printf("\nPartition %d:\n", i + 1); printf("Partition type: 0x%02X\n", partitionInformation.PartitionType); printf("Partition number: %d\n", partitionInformation.PartitionNumber); printf("Starting offset: %lld\n", partitionInformation.StartingOffset.QuadPart); printf("Partition length: %lld\n", partitionInformation.PartitionLength.QuadPart); } CloseHandle(hDevice); free(buffer); return 0; } ``` 这段代码打开物理磁盘设备,并使用DeviceIoControl函数发送IOCTL_DISK_GET_DRIVE_LAYOUT_EX控制码来获取分区表数据。然后,它解析分区表数据并将其打印到控制台上。请注意,这需要管理员权限才能运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值