U盘分区 cpp代码实现
时间: 2023-03-29 21:03:00 浏览: 82
可以使用以下代码实现 U 盘分区:
#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytesPerSector = ;
DWORD dwSectorsPerCluster = ;
DWORD dwFreeClusters = ;
DWORD dwTotalClusters = ;
// 获取 U 盘信息
if (!GetDiskFreeSpace(NULL, &dwBytesPerSector, &dwSectorsPerCluster, &dwFreeClusters, &dwTotalClusters))
{
printf("获取 U 盘信息失败!\n");
return 1;
}
// 计算分区大小
DWORD dwPartitionSize = dwBytesPerSector * dwSectorsPerCluster * dwFreeClusters / 2;
// 分区
HANDLE hDevice = CreateFile("\\\\.\\PhysicalDrive1", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, , NULL);
if (hDevice == INVALID_HANDLE_VALUE)
{
printf("打开 U 盘失败!\n");
return 1;
}
DWORD dwBytesReturned = ;
STORAGE_PROPERTY_QUERY spq = { StorageDeviceProperty, PropertyStandardQuery };
STORAGE_DEVICE_DESCRIPTOR sdd = { };
if (!DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &spq, sizeof(spq), &sdd, sizeof(sdd), &dwBytesReturned, NULL))
{
printf("获取 U 盘属性失败!\n");
CloseHandle(hDevice);
return 1;
}
CREATE_DISK cd = { CREATE_DISK_GPT_HEADER, };
cd.PartitionStyle = PARTITION_STYLE_GPT;
cd.Gpt.PartitionCount = 1;
cd.Gpt.PartitionEntry[].PartitionStyle = PARTITION_STYLE_GPT;
cd.Gpt.PartitionEntry[].StartingLba = 2048;
cd.Gpt.PartitionEntry[].EndingLba = dwPartitionSize / dwBytesPerSector - 1;
cd.Gpt.PartitionEntry[].PartitionType = PARTITION_BASIC_DATA_GUID;
cd.Gpt.PartitionEntry[].PartitionId = sdd.SerialNumberOffset ? *(GUID*)((BYTE*)&sdd + sdd.SerialNumberOffset) : GUID_NULL;
cd.Gpt.PartitionEntry[].Attributes = GPT_ATTRIBUTE_PLATFORM_REQUIRED;
cd.Gpt.PartitionEntry[].Name[] = L'U';
cd.Gpt.PartitionEntry[].Name[1] = L'P';
cd.Gpt.PartitionEntry[].Name[2] = L' ';
cd.Gpt.PartitionEntry[].Name[3] = L'P';
cd.Gpt.PartitionEntry[].Name[4] = L'a';
cd.Gpt.PartitionEntry[].Name[5] = L'r';
cd.Gpt.PartitionEntry[].Name[6] = L't';
cd.Gpt.PartitionEntry[].Name[7] = L'i';
cd.Gpt.PartitionEntry[].Name[8] = L't';
cd.Gpt.PartitionEntry[].Name[9] = L'i';
cd.Gpt.PartitionEntry[].Name[10] = L'o';
cd.Gpt.PartitionEntry[].Name[11] = L'n';
cd.Gpt.PartitionEntry[].Name[12] = L' ';
cd.Gpt.PartitionEntry[].Name[13] = L'1';
cd.Gpt.PartitionEntry[].Name[14] = L'\';
if (!DeviceIoControl(hDevice, IOCTL_DISK_CREATE_DISK, &cd, sizeof(cd), NULL, , &dwBytesReturned, NULL))
{
printf("分区 U 盘失败!\n");
CloseHandle(hDevice);
return 1;
}
CloseHandle(hDevice);
printf("分区 U 盘成功!\n");
return ;
}