2,640
社区成员
发帖
与我相关
我的任务
分享
typedef _VOLUME_INFO
{
TCHAR chFlag;
DWORD dwDiskNumber;
}VOLUME_INFO, *PVOLUME_INFO
BOOL GetVolumeInfo(IN TCHAR chFlag, OUT PVOLUME_INFO pVolumeInfo)
{
TCHAR szVol[] = { '\\', '\\', '.', '\\', chFlag, ':', 0};
HANDLE hDrv = CreateFile(szVol, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (INVALID_HANDLE_VALUE == hDrv)
{
return FALSE;
}
VOLUME_DISK_EXTENTS vde;
DWORD dwBytes;
BOOL bOK = DeviceIoControl(hDrv, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0,&vde, sizeof(vde), &dwBytes, NULL);
if (!bOK)
{
CloseHandle(hDrv);
return FALSE;
}
pVolumeInfo->chFlag = chFlag; //分区盘符
pVolumeInfo->dwDiskNumber = vde.Extents->DiskNumber; //分区所在硬盘编号,基于0
return TRUE;
}
要获取有多少块硬盘,循环调用CreateFile(_T("\\\\.\\PhysicalDrive%d"),....)
要知道第二块硬盘的第一个分区的卷标,只需:
for (TCHAR chFlag = 'A'; chFlag <= 'Z'; ++chFlag)
{
PVOLUME_INFO pi = {0};
GetVolumeInfo(chFlag, &pi);
}