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.

Weitere Informationen

Senden einer IOCTL_ACPI_ENUM_CHILDREN-Anforderung.