比如有这么个情况,
我的电脑里有两块硬盘,第二快硬盘分了4个区
我想知道本地有多少硬盘,第二块硬盘的第一个分区,被分配的盘符是多少 可能是d:也可能是e:当然也可能没有给他分配盘符
各位师哥师姐,有什么办法吗?

解决方案 »

  1.   

    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就可以得到了。
      

  2.   

    WMI枚举实例, 然后获取关联类
    Win32_DiskDrive (第几块物理硬盘) -> Win32_DiskPartition(第几分区) -> Win32_DiskPartition (盘符C,D)
    还有个方法, 获取系统符号链接(SymbolicLink)
    结果如下, 也是一样的
    \\Device\Harddisk0\Partition1 SymbolicLink \Device\HarddiskVolume1
    \\GLOBAL??\C: SymbolicLink \Device\HarddiskVolume1
      

  3.   


    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);
    }