Auflisten untergeordneter Geräte und Steuerungsmethoden
In einem ACPI-Namespace kann ein Objekt, bei dem es sich um ein Gerät handelt, z. B. ein Gerät mit dem Namen "ABCD", über untergeordnete Objekte verfügen, die untergeordnete Geräte des Geräts sind oder Steuerungsmethoden sind, die vom Gerät unterstützt werden. Jedes untergeordnete Objekt, das ein untergeordnetes Gerät eines übergeordneten Geräts ist, kann wiederum rekursiv untergeordnete Objekte aufweisen, die untergeordnete Geräte oder Steuerungsmethoden sind.
Im folgenden vereinfachten ACPI-Namespace wird beispielsweise der Stamm des ACPI-Namespace durch "\" und das Objekt "ABCD" ist ein Gerät, das dem Stamm des ACPI-Namespace unmittelbar untergeordnet ist. Darüber hinaus verfügt das Gerät "ABCD" über zwei unmittelbar untergeordnete Geräte namens "CHL1" und "CHL2" und ein untergeordnetes Objekt, das eine Steuerungsmethode mit dem Namen "_FOO" ist. Darüber hinaus verfügt das untergeordnete Gerät "CHL2" über ein untergeordnetes Gerät namens "CHL3" und das Gerät "CHL3" über ein untergeordnetes Objekt, bei dem es sich um eine Steuerungsmethode namens "_FOO" handelt.
\ 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
Um IOCTL_ACPI_EVAL_METHOD_EX oder IOCTL_ACPI_ASYNC_EVAL_METHOD_EX zu verwenden, stellt ein Treiber für ein Gerät den Pfad und den Namen der Steuerelementmethode in einem ACPI-Namespace bereit. Um den Pfad und Namen eines Geräts und untergeordneter Objekte eines Geräts abzurufen, unterstützt Windows die IOCTL_ACPI_ENUM_CHILDREN-Anforderung . Unter Bezugnahme auf den vereinfachten ACPI-Namespace in diesem Abschnitt kann ein Treiber im Gerätestapel des Geräts "ABCD" diese Anforderung verwenden, um Folgendes auszuführen:
Enumerate device 'ABCD' and the immediate child devices of 'ABCD'. Beispielsweise kann die Anforderung verwendet werden, um "\ABCD", "\ABCD" zurückzugeben. CHL1," und "\ABCD. CHL2.
Rekursiv alle Geräte im Namespace von "ABCD" auflisten. Beispielsweise kann die Anforderung verwendet werden, um "\ABCD", "\ABCD" zurückzugeben. CHL1, '\ABCD. CHL2," und "\ABCD. CHL2. CHL3.
Rekursiv alle untergeordneten Objekte von "ABCD" eines angegebenen Namens auflisten. Der angegebene Name fungiert als Filter, sodass nur die untergeordneten Objekte, die denselben Namen haben, aufgezählt werden. Beispielsweise kann die Anforderung für einen angegebenen Namen "_FOO" verwendet werden, um "\ABCD._FOO" und "\ABCD" zurückzugeben. CHL2. CHL3._FOO."
Nachdem ein Treiber den Pfad und Namen einer Steuerungsmethode abgerufen hat, kann er den Pfad und den Namen als Eingabe für IOCTL_ACPI_EVAL_METHOD_EX oder IOCTL_ACPI_ASYNC_EVAL_METHOD_EX angeben, wie unter Synchrones Auswerten von ACPI-Steuerungsmethoden beschrieben.
Eine IOCTL_ACPI_ENUM_CHILDREN-Anforderung verwendet als Eingabe eine vom Treiber zugewiesene ACPI_ENUM_CHILDREN_INPUT_BUFFER-Struktur , die die folgenden Member enthält:
Signature
Die Signatur des Eingabepuffers, der auf ACPI_ENUM_CHILDREN_INPUT_BUFFER_SIGNATURE festgelegt werden muss.
Flags
Ein Flag, das bestimmt, welche Objekte im ACPI-Namespace eines Geräts vom ACPI-Treiber aufgezählt werden. Der ACPI-Treiber gibt den vollständigen Pfad und Namen des aufgezählten Objekts zurück, beginnend mit dem Stamm des ACPI-Namespace. Das Flag muss auf einen der folgenden Werte festgelegt werden:
Flag | Beschreibung |
---|---|
ENUM_CHILDREN_IMMEDIATE_ONLY | Listet das Gerät auf und listet die unmittelbar untergeordneten Geräte des Geräts auf. |
ENUM_CHILDREN_MULTILEVEL | Listet das Gerät auf und listet alle untergeordneten Geräte des Geräts rekursiv auf. |
ENUM_CHILDREN_NAME_IS_FILTER | Ein bitweises OR mit ENUM_CHILDREN und ENUM_CHILDREN_NAME_IS_FILTER listet die untergeordneten Objekte des Geräts auf, deren Name mit dem vom Name-Member angegebenen identisch ist. |
NameLength
Die Anzahl der ASCII-Zeichen, die das Name-Array enthält.
Name
Ein MIT NULL beendetes, vierstellige ASCII-Array, das den Namen eines untergeordneten Objekts enthält, das der ACPI-Treiber verwendet, um die Enumeration untergeordneter Objekte auf die Objekte mit demselben Namen zu beschränken.
Die IOCTL_ACPI_ENUM_CHILDREN-Anforderung gibt den Pfad und Namen untergeordneter Objekte in einem vom Treiber zugewiesenen ACPI_ENUM_CHILDREN_OUTPUT_BUFFER mit variabler Länge zurück, die die folgenden Member enthält:
Signature
Die Signatur des Ausgabepuffers, der auf ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE festgelegt werden muss.
NumberOfChildren
Die Anzahl der Elemente vom Typ ACPI_ENUM_CHILD im Untergeordneten Array.
Children
Ein Array von Elementen vom Typ ACPI_ENUM_CHILD. Der Name-Member einer ACPI_ENUM_CHILD-Struktur enthält den Pfad und den Namen des untergeordneten Objekts, und das Flags-Element gibt an, ob das untergeordnete Objekt über untergeordnete Objekte verfügt.
Wenn der Ausgabepuffer, den der Treiber ordnet, nicht groß genug ist, um alle aufgezählten untergeordneten Namen zurückzugeben, gibt der ACPI-Treiber keine untergeordneten Namen zurück und legt den Status-Member des IO_STATUS_BLOCK für die Anforderung auf STATUS_BUFFER_OVERFLOW fest. Wenn in diesem Fall die Größe des Ausgabepuffers in Bytes mindestens sizeof(ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE) beträgt, legt der ACPI-Treiber NumberOfChildren auch auf die Größe in Bytes fest, die zum Abrufen der angeforderten Pfade und Namen erforderlich ist.