Udostępnij przez


Wyliczanie urządzeń podrzędnych i metod kontroli

W przestrzeni nazw ACPI obiekt, który jest urządzeniem — na przykład urządzenie o nazwie "ABCD" może mieć obiekty podrzędne, które są urządzeniami podrzędnymi urządzenia lub które są metodami sterującymi obsługiwanymi przez urządzenie. Każdy obiekt podrzędny, który jest urządzeniem podrzędnym urządzenia nadrzędnego, może z kolei rekursywnie mieć obiekty podrzędne, które są urządzeniami podrzędnymi lub metodami sterowania.

Na przykład w następującej uproszczonej przestrzeni nazw ACPI katalog główny przestrzeni nazw ACPI jest wyznaczony przez "\", a obiekt "ABCD" jest urządzeniem, które jest bezpośrednim elementem podrzędnym katalogu głównego przestrzeni nazw ACPI. Ponadto urządzenie "ABCD" ma dwa bezpośrednie urządzenia podrzędne o nazwach "CHL1" i "CHL2" oraz obiekt podrzędny o nazwie "_FOO". Ponadto urządzenie podrzędne "CHL2" ma urządzenie podrzędne o nazwie "CHL3", a urządzenie "CHL3" ma obiekt podrzędny o nazwie "_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

Aby użyć IOCTL_ACPI_EVAL_METHOD_EX lub IOCTL_ACPI_ASYNC_EVAL_METHOD_EX, sterownik urządzenia dostarcza ścieżkę i nazwę metody sterowania w przestrzeni nazw ACPI. Aby ułatwić uzyskanie ścieżki i nazwy urządzenia i obiektów podrzędnych urządzenia, system Windows obsługuje żądanie IOCTL_ACPI_ENUM_CHILDREN . Jeśli chodzi o uproszczoną przestrzeń nazw ACPI podaną w tej sekcji jako przykład, sterownik w stosie urządzenia "ABCD" może użyć tego żądania, aby wykonać następujące czynności:

  • Wylicz urządzenie "ABCD" oraz bezpośrednie urządzenia podrzędne "ABCD". Na przykład żądanie może służyć do zwrócenia ciągu "\ABCD", "\ABCD". CHL1" i "\ABCD. CHL2".

  • Rekursywnie wylicza wszystkie urządzenia w przestrzeni nazw "ABCD". Na przykład żądanie może służyć do zwrócenia ciągu "\ABCD", "\ABCD". CHL1, '\ABCD. CHL2" i "\ABCD. CHL2. CHL3".

  • Rekursywnie wylicza wszystkie obiekty podrzędne podrzędne "ABCD" podanej nazwy. Podana nazwa działa jako filtr, tak aby wyliczane były tylko te obiekty podrzędne o tej samej nazwie. Na przykład w przypadku podanej nazwy "_FOO" żądanie może służyć do zwracania "\ABCD._FOO" i "\ABCD". CHL2. CHL3._FOO".

Po uzyskaniu ścieżki i nazwy metody sterującej sterownik może podać ścieżkę i nazwę jako dane wejściowe do IOCTL_ACPI_EVAL_METHOD_EX lub IOCTL_ACPI_ASYNC_EVAL_METHOD_EX, zgodnie z opisem w temacie Ocenianie metod kontroli ACPI Synchronicznie.

Żądanie IOCTL_ACPI_ENUM_CHILDREN przyjmuje jako dane wejściowe ACPI_ENUM_CHILDREN_INPUT_BUFFER struktury przydzielanej przez sterownik ACPI_ENUM_CHILDREN_INPUT_BUFFER zawierającej następujące elementy członkowskie:

Signature

Podpis buforu wejściowego, który musi być ustawiony na ACPI_ENUM_CHILDREN_INPUT_BUFFER_SIGNATURE.

Flags

Flaga określająca, które obiekty w przestrzeni nazw ACPI urządzenia są wyliczane przez sterownik ACPI. Sterownik ACPI zwraca pełną ścieżkę i nazwę wyliczonego obiektu rozpoczynającego się od katalogu głównego przestrzeni nazw ACPI. Flaga musi być ustawiona na jedną z następujących wartości:

Flaga Opis
ENUMERUJ_DZIECI_TYLKO_NATYCHMIASTOWE Wylicza urządzenie oraz jego bezpośrednie urządzenia podrzędne.
ENUM_DZIECI_WIELOPOZIOMOWY Wylicza urządzenie i rekursywnie wylicza wszystkie urządzenia podrzędne urządzenia.
ENUM_CHILDREN_NAME_IS_FILTER Operacja bitowa OR na ENUM_CHILDREN i ENUM_CHILDREN_NAME_IS_FILTER wylicza obiekty podrzędne urządzenia, których nazwa jest identyczna z tą podaną przez członka Nazwa.

NameLength

Liczba znaków ASCII, które zawiera tablica Name .

Name

Tablica ASCII z czterema znakami zakończona znakiem NULL, zawierająca nazwę obiektu podrzędnego, używaną przez sterownik ACPI do ograniczenia wyliczania obiektów podrzędnych wyłącznie do tych, które mają taką samą nazwę.

Żądanie IOCTL_ACPI_ENUM_CHILDREN zwraca ścieżkę i nazwę obiektów podrzędnych w ACPI_ENUM_CHILDREN_OUTPUT_BUFFER o zmiennej długości przydzielonej przez sterownik, która zawiera następujące elementy członkowskie:

Signature

Podpis buforu wyjściowego, który musi być ustawiony na ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE.

NumberOfChildren

Liczba elementów typu ACPI_ENUM_CHILD w tablicy Dzieci.

Children

Tablica elementów typu ACPI_ENUM_CHILD. Element członkowski Name struktury ACPI_ENUM_CHILD zawiera ścieżkę i nazwę obiektu podrzędnego, a element członkowski Flags wskazuje, czy obiekt podrzędny ma obiekty podrzędne.

Jeśli bufor wyjściowy przydzielany przez sterownik nie jest wystarczająco duży, aby zwrócić wszystkie wyliczone nazwy podrzędne, sterownik ACPI nie zwraca nazw podrzędnych i ustawia członka Status w IO_STATUS_BLOCK dla żądania na STATUS_BUFFER_OVERFLOW. W takim przypadku, jeśli rozmiar w bajtach buforu wyjściowego wynosi co najmniej rozmiar (ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE), sterownik ACPI ustawia również wartość NumberOfChildren na rozmiar w bajtach, który jest wymagany do pobrania żądanych ścieżek i nazw.

Zobacz też

Wysyłanie żądania IOCTL_ACPI_ENUM_CHILDREN.