如何获取本地磁盘的数量和对应的分区号 比如有这么个情况,我的电脑里有两块硬盘,第二快硬盘分了4个区我想知道本地有多少硬盘,第二块硬盘的第一个分区,被分配的盘符是多少 可能是d:也可能是e:当然也可能没有给他分配盘符各位师哥师姐,有什么办法吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TCHAR Drive[256]={0};DWORD len = GetLogicalDriveStrings(sizeof(Drive)/sizeof(TCHAR),Drive);for(i=0;i<len;i+=4){printf("\n"&Drive[i]);}磁盘数量可以用len除以4就可以得到了。 WMI枚举实例, 然后获取关联类Win32_DiskDrive (第几块物理硬盘) -> Win32_DiskPartition(第几分区) -> Win32_DiskPartition (盘符C,D)还有个方法, 获取系统符号链接(SymbolicLink)结果如下, 也是一样的\\Device\Harddisk0\Partition1 SymbolicLink \Device\HarddiskVolume1 \\GLOBAL??\C: SymbolicLink \Device\HarddiskVolume1 typedef _VOLUME_INFO{ TCHAR chFlag; DWORD dwDiskNumber;}VOLUME_INFO, *PVOLUME_INFOBOOL 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);} 写入注册表后 出现字符不全的问题 请教一个浅显的问题,究竟什么是单播呀? 给一开始IP,一结束IP,求其中的所有IP 急问!如何把字符串型(string)的16进制数转换成十进制数? 各位老兄谁放的有office2000的序列号.我在家不好找帮帮忙.在线等待 关于数据的转换,很头痛的问题!!! 我怎么找不到iphlpapi.h? 求大神能不能代编个串口程序 问1个简简单单的问题! VHDL与vc的问题(我已经问过一遍了,可是没有人理我) 调用DLL不解之处????? 为什么卡巴斯基打开的时候,使用VS2008超级卡
DWORD len = GetLogicalDriveStrings(sizeof(Drive)/sizeof(TCHAR),Drive);
for(i=0;i<len;i+=4)
{
printf("\n"&Drive[i]);
}磁盘数量可以用len除以4就可以得到了。
Win32_DiskDrive (第几块物理硬盘) -> Win32_DiskPartition(第几分区) -> Win32_DiskPartition (盘符C,D)
还有个方法, 获取系统符号链接(SymbolicLink)
结果如下, 也是一样的
\\Device\Harddisk0\Partition1 SymbolicLink \Device\HarddiskVolume1
\\GLOBAL??\C: SymbolicLink \Device\HarddiskVolume1
typedef _VOLUME_INFO
{
TCHAR chFlag;
DWORD dwDiskNumber;
}VOLUME_INFO, *PVOLUME_INFOBOOL 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);
}