IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS IOCTL (ehstorioctl.h)
Этот IOCTL возвращает результирующий набор, содержащий перечисление всех активных объектов физических устройств (PDO), связанных с заданным целевым объектом адресуемой команды (ACT). Клиент может сначала проследовать требуемый размер буфера, выдав этот IOCTL следующим образом:
DeviceIoControl(
hDevice,
IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS,
&pdoType,
sizeof(PDO_TYPE),
NULL,
0,
&dwBytesRequired,
NULL );
Если для параметра буфера вывода задано значение NULL, диспетчер ввода-вывода очищает бит IRP_INPUT_OPERATION в флагах IRP. Обнаружив это, драйвер хранилища хранилища может безопасно задать для IoStatus.Information требуемый размер буфера, указывая таким образом, что он указан для клиента.
Это работает только потому, что STATUS_BUFFER_OVERFLOW (0x80000005) является значением NT_WARNING(), для которого диспетчер ввода-вывода копирует IoStatus.Information в параметр lpBytesReturned, возвращая это значение клиенту.
Здесь необходимо соблюдать осторожность, так как IOCTL_EHSTOR_DEVICE_ENUMERATE_PDOS определяется с помощью METHOD_BUFFERED, поэтому диспетчер ввода-вывода попытается скопировать это количество байтов в выходной буфер.
Основной код
Входной буфер
Входной буфер в Irp-AssociatedIrp.SystemBuffer> должен содержать значение ULONG, как определено в PDO_TYPE.
где все PDO, только PDO диска, только PDO элемента управления или все PDO-объекты уровня перечисляются соответственно в соответствии с указанным PDO_TYPE входным значением.
Длина входного буфера
Длина ULONG.
Выходной буфер
Irp-AssociatedIrp.SystemBuffer> указывает на буфер, который получит результаты перечисления PDO. Если клиент предоставил буфер, отличный от NULL , с выданным IOCTL, то драйвер заполняет его результирующим набором только в том случае, если значение Parameters.DeviceIoControl.Возвращаемое значение STATUS_SUCCESS, если размер буфера достаточно и результаты были скопированы в буфер. В противном случае возвращается STATUS_INVALID_BUFFER_SIZE, а выходной буфер не изменен.
Возвращаемый буфер перечисления содержит результирующий набор, структурированный в соответствии со следующими правилами. Ведущая структура в буфере, ENUM_PDO_RESULTS, состоит из числа структур и массива ENUM_PDO_ENTRY структур.
Длина выходного буфера
OutputBufferLength указывает размер буфера, достаточный для включения всего результирующий набор.
Блок состояния
В поле Состояние может быть возвращено одно из следующих значений:
- STATUS_SUCCESS — выходной буфер содержит перечисление запрошенных PDO.
- STATUS_BUFFER_OVERFLOW — для поля Information задан требуемый размер буфера, чтобы он содержал все выходные данные результирующий набор перечисления.
- STATUS_INVALID_BUFFER_SIZE — указанная длина выходного буфера недостаточна для хранения всех выходных данных результирующих наборов перечисления.
Требования
Требование | Значение |
---|---|
Заголовок | ehstorioctl.h (включая EhStorIoctl.h) |