Для данного тома (например, Z :), как определить, находится ли этот том на «съемном» устройстве? - PullRequest
1 голос
/ 18 мая 2010

Я хочу знать, является ли диск, на котором находится данный том, съемным (CM_DEVCAP_REMOVABLE). Ищу указатели на win32.

Уточнение: я действительно пытаюсь выяснить, подключен ли диск, на котором находится том, к порту (например, USB), внешнему по отношению к компьютеру.

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

Вы можете открыть том и выпустить IOCTL_STORAGE_QUERY_PROPERTY; это возвращает STORAGE_DEVICE_DESCRIPTOR, который имеет свойство 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;
}
0 голосов
/ 18 мая 2010
*

GetDriveType 1001 *

Переполнение стека отклоняет GetDriveType, потому что длина GetDriveType составляет всего 12 символов. Однако переполнение стека принимает комбинацию GetDriveType с сопутствующей жалобой на переполнение стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...