Sdílet prostřednictvím


Seznamování dceřiných zařízení a řídicích metod

V oboru názvů ACPI může objekt, který je zařízením, například zařízení s názvem ABCD, obsahovat podřízené objekty, které jsou podřízenými zařízeními zařízení nebo které jsou řídicími metodami, které zařízení podporuje. Každý podřízený objekt, který je podřízeným zařízením nadřazeného zařízení, může rekurzivně obsahovat podřízené objekty, které jsou podřízená zařízení nebo řídicí metody.

Například v následujícím zjednodušeném oboru názvů ACPI je kořen oboru označen "\" a objekt "ABCD" je zařízení, které je bezprostředním podřízeným kořene oboru názvů ACPI. Zařízení ABCD má navíc dvě okamžitá podřízená zařízení s názvem CHL1 a CHL2 a podřízený objekt, který je řídicí metodou s názvem "_FOO". Kromě toho má podřízené zařízení CHL2 podřízené zařízení s názvem CHL3 a zařízení CHL3 má podřízený objekt, který je řídicí metodou s názvem "_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

Pokud chcete použít IOCTL_ACPI_EVAL_METHOD_EX nebo IOCTL_ACPI_ASYNC_EVAL_METHOD_EX, ovladač zařízení poskytuje cestu a název metody řízení v oboru názvů ACPI. Systém Windows podporuje požadavek IOCTL_ACPI_ENUM_CHILDREN , aby vám pomohl získat cestu a název zařízení a podřízených objektů zařízení. Odkazem na zjednodušený obor názvů ACPI uvedený v této části jako příklad může ovladač v zásobníku zařízení ABCD použít tento požadavek k provedení následujících kroků:

  • Vytvoření výčtu zařízení "ABCD" a okamžitých podřízených zařízení "ABCD". Požadavek lze například použít k vrácení \ABCD, \ABCD. CHL1, a \ABCD. CHL2.

  • Rekurzivně vytvořte výčet všech zařízení v oboru názvů ABCD. Požadavek lze například použít k vrácení \ABCD, \ABCD. CHL1, \ABCD. CHL2, a \ABCD. CHL2. CHL3.

  • Rekurzivně vytvořte výčet všech podřízených objektů potomků ABCD zadaného názvu. Zadaný název funguje jako filtr, aby se výčtem zobrazovaly pouze podřízené objekty se stejným názvem. Například pro zadaný název "_FOO" lze požadavek použít k vrácení \ABCD._FOO a \ABCD. CHL2. CHL3._FOO."

Jakmile ovladač získá cestu a název řídicí metody, může zadat cestu a název jako vstup pro IOCTL_ACPI_EVAL_METHOD_EX nebo IOCTL_ACPI_ASYNC_EVAL_METHOD_EX, jak je popsáno v části Vyhodnocení metod řízení ACPI synchronně.

Požadavek IOCTL_ACPI_ENUM_CHILDREN přijímá jako vstup strukturu ACPI_ENUM_CHILDREN_INPUT_BUFFER s přidělenou proměnnou délkou ovladače, která obsahuje následující členy:

Signature

Podpis vyrovnávací paměti vstupu, který musí být nastaven na ACPI_ENUM_CHILDREN_INPUT_BUFFER_SIGNATURE.

Flags

Příznak, který určuje, které objekty v oboru názvů ACPI zařízení jsou vyjmenovány ovladačem ACPI. Ovladač ACPI vrátí úplnou cestu a název výčtu objektu začínající kořenem oboru názvů ACPI. Příznak musí být nastavený na jednu z následujících hodnot:

Vlajka Popis
ENUM_CHILDREN_IMMEDIATE_ONLY Vytvoří výčet zařízení a vytvoří výčet okamžitých podřízených zařízení zařízení.
ENUM_CHILDREN_MULTILEVEL Vytvoří výčet zařízení a rekurzivně vytvoří výčet všech podřízených zařízení zařízení.
ENUM_CHILDREN_NAME_IS_FILTER Bitové OR ENUM_CHILDREN a ENUM_CHILDREN_NAME_IS_FILTER výčet podřízených objektů zařízení, jejichž název je stejný jako název zadaný členem Name .

NameLength

Počet znaků ASCII, které pole Název obsahuje.

Name

Pole čtyřznakového ASCII ukončeného hodnotou NULL, které obsahuje název podřízeného objektu, který ovladač ACPI používá k omezení výčtu podřízených objektů na ty, které mají stejný název.

Požadavek IOCTL_ACPI_ENUM_CHILDREN vrátí cestu a název podřízených objektů ve vyrovnávací paměti s proměnnou délkou ACPI_ENUM_CHILDREN_OUTPUT_BUFFER, kterou přiděluje ovladač, a která obsahuje následující členy:

Signature

Podpis výstupní vyrovnávací paměti, která musí být nastavena na ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE.

NumberOfChildren

Počet prvků typu ACPI_ENUM_CHILD v poli Děti.

Children

Pole prvků typu ACPI_ENUM_CHILD. Člen Name struktury ACPI_ENUM_CHILD obsahuje cestu a název podřízeného objektu, a člen příznaky označuje, zda podřízený objekt má podřízené objekty.

Pokud výstupní vyrovnávací paměť, kterou ovladač přidělí, není dostatečně velká k tomu, aby mohla vrátit všechna vyjmenovaná podřízená jména, ovladač ACPI nevrací žádná podřízená jména a nastaví člena Status IO_STATUS_BLOCKu pro žádost na STATUS_BUFFER_OVERFLOW. Pokud je velikost výstupní vyrovnávací paměti v bajtech alespoň sizeof(ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE), ovladač ACPI také nastaví velikost NumberOfChildren na velikost v bajtech, která je nutná k načtení požadovaných cest a názvů.

Viz také

Odeslání požadavku IOCTL_ACPI_ENUM_CHILDREN