给定一个音量(例如Z :),如何判断该音量是否在“可移动”的设备上?

时间:2010-05-18 06:00:13

标签: windows winapi

我想知道给定卷所在的磁盘是否可移动(CM_DEVCAP_REMOVABLE)。寻找关于win32的指针。

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

2 个答案:

答案 0 :(得分:2)

您可以打开该卷并发出IOCTL_STORAGE_QUERY_PROPERTY;这将返回一个具有RemovableMedia属性的STORAGE_DEVICE_DESCRIPTOR。我相信这与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;
}

答案 1 :(得分:0)

GetDriveType

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