Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот 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->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) |