Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В пространстве имен ACPI объект, который является устройством, например устройство с именем ABCD, может иметь дочерние объекты, которые являются дочерними устройствами устройства или являются методами управления, поддерживаемыми устройством. Любой дочерний объект, который является дочерним устройством родительского устройства, в свою очередь, может рекурсивно иметь дочерние объекты, которые являются дочерними устройствами или методами управления.
Например, в следующем упрощенном пространстве имен ACPI корневая часть пространства имен ACPI назначается "\", а объект "ABCD" — это устройство, которое является непосредственным дочерним элементом корневого пространства имен ACPI. Кроме того, устройство ABCD имеет два непосредственных дочерних устройства с именем CHL1 и CHL2 и дочерним объектом, который является методом управления с именем "_FOO". Кроме того, дочернее устройство CHL2 имеет дочернее устройство под именем CHL3, и устройство CHL3 имеет дочерний объект, который является методом управления под именем "_FOO".
\ root of ACPI namespace
ABCD parent device
CHL1 child device of ABCD
CHL2 child device of ABCD
CHL3 child device of CHL2
_FOO control method
_FOO control method
Чтобы использовать IOCTL_ACPI_EVAL_METHOD_EX или IOCTL_ACPI_ASYNC_EVAL_METHOD_EX, драйвер для устройства предоставляет путь и имя метода управления в пространстве имен ACPI. Чтобы получить путь и имя устройства и дочерних объектов устройства, Windows поддерживает запрос IOCTL_ACPI_ENUM_CHILDREN . Ссылаясь на упрощенное пространство имен ACPI, предоставленное в этом разделе в качестве примера, драйвер в стеке устройств ABCD может использовать этот запрос для выполнения следующих действий:
Перечислите устройства ABCD и непосредственные дочерние устройства ABCD. Например, запрос можно использовать для возврата "\ABCD", "\ABCD". CHL1 и \ABCD. CHL2.
Рекурсивно перечислить все устройства в пространстве имен «ABCD». Например, запрос можно использовать для возврата "\ABCD", "\ABCD.CHL1", "\ABCD.CHL2" и "\ABCD.CHL2.CHL3".
Рекурсивно перечисляют все дочерние объекты-потомки ABCD заданного имени. Указанное имя выступает в качестве фильтра, чтобы перечислялись только те дочерние объекты, которые имеют то же имя. Например, для предоставленного имени "_FOO" запрос можно использовать для возврата "\ABCD._FOO" и "\ABCD.CHL2.CHL3._FOO".
После получения пути и имени метода управления драйвер может указать путь и имя в качестве входных данных для IOCTL_ACPI_EVAL_METHOD_EX или IOCTL_ACPI_ASYNC_EVAL_METHOD_EX, как описано в разделе "Оценка методов управления ACPI синхронно".
Запрос IOCTL_ACPI_ENUM_CHILDREN принимает в качестве входных данных выделенную драйвером структуру переменной длины ACPI_ENUM_CHILDREN_INPUT_BUFFER , содержащую следующие элементы:
Signature
Сигнатура входного буфера, для которого необходимо задать значение ACPI_ENUM_CHILDREN_INPUT_BUFFER_SIGNATURE.
Flags
Флаг, определяющий, какие объекты в пространстве имен ACPI устройства перечисляются драйвером ACPI. Драйвер ACPI возвращает полный путь и имя перечисленного объекта, начиная с корня пространства имен ACPI. Флаг должен иметь одно из следующих значений:
| Флаг | Описание |
|---|---|
| ENUM_CHILDREN_IMMEDIATE_ONLY | Перечисляет устройство и его непосредственные дочерние устройства. |
| ENUM_CHILDREN_MULTILEVEL | Перечисляет устройство и рекурсивно перечисляет все его дочерние устройства. |
| ENUM_CHILDREN_NAME_IS_FILTER | Битовое ИЛИ параметров ENUM_CHILDREN и ENUM_CHILDREN_NAME_IS_FILTER перечисляет дочерние объекты устройства, имя которых совпадает с именем, указанным в элементе Name. |
NameLength
Число символов ASCII, содержащихся в массиве имен .
Name
Массив ASCII с четырьмя символами, завершаемый значением NULL, содержащий имя дочернего объекта, который драйвер ACPI использует для ограничения перечисления дочерних объектов таким объектам, которые имеют то же имя.
Запрос IOCTL_ACPI_ENUM_CHILDREN возвращает путь и имя дочерних объектов в переменной длины ACPI_ENUM_CHILDREN_OUTPUT_BUFFER, выделенной драйвером, которая содержит следующие элементы:
Signature
Сигнатура выходного буфера, для которого необходимо задать значение ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE.
NumberOfChildren
Количество элементов типа ACPI_ENUM_CHILD в массиве "Дочерние ".
Children
Массив элементов типа ACPI_ENUM_CHILD. Элемент Name ACPI_ENUM_CHILD структуры содержит путь и имя дочернего объекта, а элемент Flags указывает, имеет ли дочерний объект дочерние объекты.
Если выходной буфер, выделенный драйвером, недостаточно велик, чтобы вернуть все перечисленные дочерние имена, драйвер ACPI не возвращает ни одного дочернего имени и устанавливает элемент Status структуры IO_STATUS_BLOCK для запроса STATUS_BUFFER_OVERFLOW. В этом случае, если размер в байтах выходного буфера составляет по крайней мере размер(ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE), драйвер ACPI также задает NumberOfChildren размеру в байтах, который требуется для получения запрошенных путей и имен.