자식 디바이스 및 제어 메서드 열거

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.'

드라이버는 제어 메서드의 경로와 이름을 가져온 후 ACPI 컨트롤 메서드 동기적으로 평가에 설명된 대로 경로와 이름을 IOCTL_ACPI_EVAL_METHOD_EX 또는 IOCTL_ACPI_ASYNC_EVAL_METHOD_EX 입력으로 제공할 수 있습니다.

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 비트 OR은 이름이 Name 멤버에서 제공하는 것과 동일한 디바이스의 자식 개체를 열거합니다.

NameLength

Name 배열에 포함된 ASCII 문자 수입니다.

Name

ACPI 드라이버가 자식 개체의 열거형을 이름이 같은 개체로 제한하는 데 사용하는 자식 개체의 이름을 포함하는 NULL로 끝나는 4자 ASCII 배열입니다.

IOCTL_ACPI_ENUM_CHILDREN 요청은 다음 멤버를 포함하는 드라이버 할당 가변 길이 ACPI_ENUM_CHILDREN_OUTPUT_BUFFER 자식 개체의 경로와 이름을 반환합니다.

Signature

ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE 설정해야 하는 출력 버퍼의 서명입니다.

NumberOfChildren

Children 배열에 ACPI_ENUM_CHILD 형식의 요소 수입니다.

Children

ACPI_ENUM_CHILD 형식의 요소 배열입니다. ACPI_ENUM_CHILD 구조체의 Name 멤버에는 자식 개체의 경로와 이름이 포함되며 Flags 멤버는 자식 개체에 자식 개체가 있는지 여부를 나타냅니다.

드라이버가 할당하는 출력 버퍼가 열거된 모든 자식 이름을 반환할 만큼 크지 않은 경우 ACPI 드라이버는 자식 이름을 반환하지 않고 STATUS_BUFFER_OVERFLOW 요청에 대한 IO_STATUS_BLOCK Status 멤버를 설정합니다. 이 경우 출력 버퍼의 크기(바이트)가 최소 sizeof(ACPI_ENUM_CHILDREN_OUTPUT_BUFFER_SIGNATURE)인 경우 ACPI 드라이버는 NumberOfChildren 를 요청된 경로 및 이름을 검색하는 데 필요한 크기(바이트)로 설정합니다.

추가 정보

IOCTL_ACPI_ENUM_CHILDREN 요청 보내기