IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)

Этот IOCTL возвращает результирующий набор, содержащий перечисление всех активных объектов физических устройств хранилища (PDOS), связанных с заданным целевым объектом для адресной команды (ACT). Клиент может сначала прощупировать требуемый размер буфера, выпустив этот IOCTL следующим образом:

DeviceIoControl(
    hDevice,
    IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS,
    &pdoType,
    sizeof(PDO_TYPE),
    NULL,
    0,
    &dwBytesRequired,
    NULL );

Если параметр буфера вывода имеет значение NULL, диспетчер ввода-вывода очищает IRP_INPUT_OPERATION бит в флагах IRP. При обнаружении этого драйвер silo хранилища может безопасно настроить IoStatus.Information требуемый размер буфера, что указывает на клиент.

Это работает только потому, что STATUS_BUFFER_OVERFLOW (0x80000005) — это значение NT_WARNING(), для которого диспетчер ввода-вывода копирует IoStatus.Information в параметр lpBytesReturned, возвращая это значение клиенту.

Здесь необходимо соблюдать осторожность, так как IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS определен с METHOD_BUFFERED, поэтому диспетчер ввода-вывода попытается скопировать это количество байтов в выходной буфер.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Входной буфер в Irp->AssociatedIrp.SystemBuffer должен содержать значение ULONG, как определено в PDO_TYPE,

где все pdOs, только PDO диска, только PDO элемента управления или все PDO-файлы silo перечисляются соответственно в соответствии с предоставленным PDO_TYPE входным значением.

Длина входного буфера

Длина ULONG.

Выходной буфер

Irp->AssociatedIrp.SystemBuffer указывает на буфер, который получит результаты перечисления PDO. Если клиент предоставил буфер, отличный отNULL, с выданным IOCTL, драйвер заполняет его результирующим набором только в том случае, если значение возвращаемого значения STATUS_SUCCESS, если размер буфера достаточно, а результаты скопированы в буфер. В противном случае возвращается STATUS_INVALID_BUFFER_SIZE, а выходной буфер не изменен.

Возвращаемый буфер перечисления содержит результирующий набор, структурированный в соответствии со следующими правилами. Ведущая структура в буфере ENUM_PDO_RESULTSсостоит из числа структур и массива ENUM_PDO_ENTRY структур.

Длина выходного буфера

OutputBufferLength указывает размер буфера достаточной длины, чтобы включить весь результирующий набор.

Блок состояния

Одно из следующих значений может быть возвращено в поле "Состояние".

STATUS_SUCCESS — выходной буфер содержит перечисление запрошенных PDOS.
STATUS_BUFFER_OVERFLOW. Поле сведений имеет требуемый размер буфера, чтобы содержать выходные данные всего результирующий набор перечисления.
STATUS_INVALID_BUFFER_SIZE . Длина выходного буфера недостаточно, чтобы содержать выходные данные всего результирующий набор перечисления.

Требования

Требование Ценность
заголовка ehstorioctl.h (include EhStorIoctl.h)