【问题标题】:C++ method for Diskpart list diskDiskpart列表磁盘的C++方法
【发布时间】:2016-03-07 10:19:34
【问题描述】:

如果我运行 diskpart 并给它命令 list disk,那么它会显示一个类似的表

Disk ###  Status         Size     Free     Dyn  Gpt 
--------  -------------  -------  -------  ---  ---

Disk 0    Online          100 GB      0 B           
Disk 1    Online         3000 GB      0 B        *  
Disk 2    No Media           0 B      0 B           
Disk 3    Foreign         500 GB   490 GB   *         
Disk 4    No Media           0 B      0 B           

如何使用 C++ 获得这样的列表?

【问题讨论】:

  • 已经看过WMI?查看wmic logicaldisk get * 返回的内容,然后从 C++ 调用 WMI API(我敢打赌这里有关于 SO 的示例)

标签: c++ windows disk


【解决方案1】:

我用这个方法:

  1. 使用 GetLogicalDriveStrings() 获取磁盘列表。您可以使用此调用过滤可移动或固定磁盘。

  2. 使用类似以下的方式获取每个卷的句柄。

    HANDLE hVolume = CreateFile(volumeName, access, FILE_SHARE_READ |    FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
  3. 使用卷句柄获取磁盘编号。我不记得您是否需要为下一位锁定/卸载卷,但是这些都有很好的文档记录并且现在您拥有卷句柄很容易做到。

    
        STORAGE_DEVICE_NUMBER sdn;
        DWORD dwBytesReturned = 0;
        if (!DeviceIoControl(hVolume, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0, &sdn, sizeof(sdn), &dwBytesReturned, NULL)){
    
    
    }
    
    return sdn.DeviceNumber;
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2013-02-28
    • 1970-01-01
    相关资源
    最近更新 更多