Diskpart列表磁盘的C++方法

C++ method for Diskpart list disk

本文关键字:C++ 方法 磁盘 列表 Diskpart      更新时间:2023-10-16

如果我运行diskpart并给它命令列表磁盘,那么它会向我显示一个类似的表

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++获得这样的列表?

我使用这个方法:

  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;