2,641
社区成员
发帖
与我相关
我的任务
分享
DWORD dwOutByte; // DeviceIoControl 读取的字节数
DISK_GEOMETRY diskGeometry;
// 读取每扇区字节数
BOOL bDeviceRet = DeviceIoControl(m_hDriver, IOCTL_DISK_GET_DRIVE_GEOMETRY,
NULL, 0, &diskGeometry, sizeof(DISK_GEOMETRY), &dwOutByte, NULL);
// 每扇区字节数
dwSectorByte = diskGeometry.BytesPerSector;
// 读取分区大小和偏移量
PARTITION_INFORMATION partInfo;
bDeviceRet = DeviceIoControl(m_hDriver, IOCTL_DISK_GET_PARTITION_INFO,
NULL, 0, &partInfo, sizeof(PARTITION_INFORMATION), &dwOutByte, NULL);
LONGLONG lPartitionSize = partInfo.PartitionLength.QuadPart; // 分区的大小
LONGLONG lOffset = partInfo.StartingOffset.QuadPart; // 偏移
// StartingOffset 除以每扇区字节数就是开始扇区;
// PartitionLength 除以每扇区字节数就是扇区总数。
lPartBegin = lOffset / dwSectorByte;
lPartEnd = lPartitionSize / dwSectorByte;
// 开始扇区加上扇区总数再减去1就是结束扇区。
lPartEnd += lOffset;
lPartEnd -= 1;
HANDLE hDisk = CreateFile(_T("\\\\.\\D:"), ...);
ReadFile(hDisk, ...);