我想知道给定卷所在的磁盘是否可移动(CM_DEVCAP_REMOVABLE)。寻找关于win32的指针。
澄清:我真正想知道的是,卷所在的磁盘是否连接在计算机外部的端口(例如USB)上。
答案 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的附带投诉。