IOCTL_ACPI_ENUM_CHILDREN IOCTL (acpiioct.h)
Запрос на управление устройствами IOCTL_ACPI_ENUM_CHILDREN можно использовать для перечисления пути и имени устройств или именованных дочерних объектов в пространстве имен ACPI устройства, на которое отправляется этот запрос. Драйвер должен вызывать IoBuildDeviceIoControlRequest и передавать следующие входные и выходные параметры для сборки этого запроса.
Основной код
Входной буфер
Задайте входные параметры IoBuildDeviceIoControlReque st следующим образом:
- IoControlCode имеет значение IOCTL_ACPI_ENUM_CHILDREN.
- DeviceObject имеет указатель на объект физического устройства (PDO) устройства.
- InputBuffer имеет указатель на структуру ACPI_ENUM_CHILDREN_INPUT_BUFFER переменной длины.
- InputBufferLength имеет размер в байтах входного буфера, предоставленного InputBuffer.
- OutputBufferLength предоставляет размер в байтах выходного буфера, предоставленного OutputBuffer.
- InternalDeviceIoControl имеет значение FALSE.
- событие имеет указатель на объект события, выделенный вызывающим и инициализированным.
Длина входного буфера
InputBufferLength имеет размер в байтах входного буфера, предоставленного InputBuffer.
Выходной буфер
Задайте параметры вывода IoBuildDeviceIoControlRequest следующим образом:
- OutputBuffer предоставляет указатель на структуру ACPI_ENUM_CHILDREN_OUTPUT_BUFFER переменной длины, в которой драйвер ACPI возвращает путь и имя перечисленных дочерних устройств.
- IoStatusBlock имеет IO_STATUS_BLOCK структуру.
Длина выходного буфера
OutputBufferLength предоставляет размер в байтах выходного буфера, предоставленного OutputBuffer.
Блок состояния
Если запрос выполнен успешно, IoStatusBlock—>состояние имеет значение STATUS_SUCCESS; в противном случае элемент состояния имеет код ошибки. Если выходной буфер недостаточно велик, чтобы содержать заголовок буфера, то для элемента состояния задано значение STATUS_BUFFER_TOO_SMALL. Если выходной буфер достаточно велик, чтобы содержать заголовок выходного буфера, но не достаточно велик, чтобы содержать пути и имена всех перечисленных дочерних объектов, элемент Status имеет значение STATUS_BUFFER_OVERFLOW и OutputBuffer->NumberOfChildren имеет необходимую длину буфера вывода.
Если запрос выполнен успешно, IoStatusBlock— элементсведений> задано число байтов, возвращаемых в выходном буфере; в противном случае элемент Information имеет значение нулю.
Замечания
IOCTL_ACPI_ENUM_CHILDREN возвращает структуру переменной длины ACPI_ENUM_CHILDREN_OUTPUT_BUFFER, содержащую массив структур переменной длины ACPI_ENUM_CHILD, каждый из которых возвращает полный путь и имя объекта в пространстве имен ACPI устройства, которому был отправлен запрос. Объекты, перечисляемые этим запросом, зависят от параметра флагов члена предоставленной входной структуры ACPI_ENUM_CHILDREN_INPUT_BUFFER следующим образом:
Если выходной буфер, выделенный драйвером, недостаточно велик, чтобы вернуть все запрошенные дочерние имена, драйвер ACPI не возвращает имена дочерних элементов и задает элемент status элемента IO_STATUS_BLOCK запроса на STATUS_BUFFER_OVERFLOW. В этом случае, если размер в байтах выходного буфера составляет по крайней мере размер(ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE), драйвер ACPI также задает NumberOfChildren размеру в байтах, который требуется для получения запрошенных путей и имен.
Драйвер обычно использует последовательность двух IOCTL_ACPI_ENUM_CHILDREN запросов для перечисления дочерних объектов, интересующих вас. Драйвер отправляет первый запрос, чтобы получить размер выходного буфера, который требуется для хранения пути и имени всех запрошенных объектов. Драйвер отправляет второй запрос, чтобы вернуть путь и имя объектов в выходном буфере.
Дополнительные сведения о перечислении дочерних устройств устройства см. в перечислении дочерних устройств и методов управления.
IOCTL_ACPI_ENUM_CHILDREN можно использовать только в IRQL< DISPATCH_LEVEL.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows Vista и более поздних версий Windows. |
заголовка | acpiioct.h (include Acpiioct.h) |