На каком ЖД расположен раздел

Тема в разделе "WASM.WIN32", создана пользователем Cneg, 25 ноя 2007.

  1. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    Допустим есть раздел жёсткого диска "\\\\.\\E:", как определить на каком конкретно ЖД этот раздел создан? (или допустим как по номеру раздела из IOCTL_DISK_GET_DRIVE_LAYOUT получить соответствующую букву.. если таковая есть) И вообще не могу вкурить, в Windows же по идее нельзя создать раздел который начинается на PHYSICALDRIVE0, а заканчивается на PHYSICALDRIVE1?? Просто странно, почему IOCTL_DISK_GET_DRIVE_LAYOUT не выдаёт лэйблы...
     
  2. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    IOCTL_STORAGE_GET_DEVICE_NUMBER
     
  3. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    diamond
    спасиб
    Вопрос немного не в тему, хотя всё про тот же IOCTL_DISK_GET_DRIVE_LAYOUT.. В lpOutBuffer возвращается структура DRIVE_LAYOUT_INFORMATION:
    Код (Text):
    1. typedef struct _DRIVE_LAYOUT_INFORMATION {  DWORD PartitionCount;  DWORD Signature;  PARTITION_INFORMATION PartitionEntry[1];
    2. } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
    Какой выбрать размер буфера lpOutBuffer, если PartitionCount неизвестно.. (размер буфера будет равен sizeof(dli)+? * sizeof(pinf), где DRIVE_LAYOUT_INFORMATION dli, PARTITION_INFORMATION pinf, (?) - как раз то количество разделов которое неизвестно)
     
  4. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    В таких случаях есть две стратегии: можно просто взять размер "с запасом" (в данном случае 1024 байта хватит за глаза), а можно вызывать DeviceIoControl в цикле, увеличивая размер буфера, пока возвращается ERROR_INSUFFICIENT_BUFFER (ну или что она там возвращает).