代码之家  ›  专栏  ›  技术社区  ›  user15071

给定一个卷(如Z:),如何判断该卷是否位于“可移动”的设备上?

  •  1
  • user15071  · 技术社区  · 16 年前

    澄清:我真正想知道的是卷所在的磁盘是否连接到计算机外部的端口(如USB)。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Luke    16 年前

    您可以打开该卷并发出IOCTL\u STORAGE\u QUERY\u属性;这将返回具有RemovableMedia属性的存储设备描述符。我相信这与CM_DEVCAP_REMOVABLE(不是100%确定)是一样的。至少它报告说“固定”USB闪存驱动器是可移动的。

    HANDLE hFile = CreateFile("\\\\.\\Z:", FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        STORAGE_PROPERTY_QUERY StoragePropertyQuery;
        StoragePropertyQuery.PropertyId = StorageDeviceProperty;
        StoragePropertyQuery.QueryType = PropertyStandardQuery;
        BYTE Buffer[1024];
        if(DeviceIoControl(hFile, IOCTL_STORAGE_QUERY_PROPERTY, &SotragePropertyQuery, sizeof(STORAGE_PROPERTY_QUERY), Buffer, 1024, &BytesReturned, NULL))
        {
            PSTORAGE_DEVICE_DESCRIPTOR StorageDeviceDescriptor = (PSTORAGE_DEVICE_DESCRIPTOR)Buffer;
            if(StorageDeviceDescriptor->RemovableMedia)
            {
                printf("Z: IS removable\n");
            }
            else
            {
                printf("Z: is NOT removable\n");
            }
        }
        CloseHandle(hFile);
        hFile = INVALID_HANDLE_VALUE;
    }
    
        2
  •  0
  •   Windows programmer    16 年前

    GetDriveType

    堆栈溢出拒绝GetDriveType,因为GetDriveType只有12个字符长。但是,Stack Overflow接受GetDriveType与有关Stack Overflow的附带投诉的组合。