2,643
社区成员
 发帖
 发帖 与我相关
 与我相关 我的任务
 我的任务 分享
 分享
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;
}
for (TCHAR chFlag = 'A'; chFlag <= 'Z'; ++chFlag)
{
	PVOLUME_INFO pi = {0};
	GetVolumeInfo(chFlag, &pi);
}