다음을 통해 공유


RtlEnumerateGenericTableWithoutSplayingAvl 함수(ntddk.h)

RtlEnumerateGenericTableWithoutSplayingAvl 루틴은 제네릭 테이블의 요소를 열거하는 데 사용됩니다.

통사론

NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplayingAvl(
  [in]      PRTL_AVL_TABLE Table,
  [in, out] PVOID          *RestartKey
);

매개 변수

[in] Table

제네릭 테이블(RTL_AVL_TABLE)에 대한 포인터입니다. RtlInitializeGenericTableAvl호출하여 테이블을 초기화해야 합니다.

[in, out] RestartKey

RtlEnumerateGenericTableWithoutSplayingAvl대한 이전 호출에서 반환된 요소의 주소입니다. 열거형이 테이블의 첫 번째 요소에서 시작하는 경우 NULL 설정해야 합니다.

테이블의 모든 요소를 열거하려면 다음과 같이 RtlEnumerateGenericTableWithoutSplayingAvl 사용합니다.

RestartKey = NULL;
for (ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey);
     ptr != NULL;
     ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey)) {
        // Process the element pointed to by ptr
}

반환 값

RtlEnumerateGenericTableWithoutSplayingAvl 요소와 연결된 호출자 정의 구조체에 대한 포인터를 반환합니다. RestartKey NULL 테이블에 요소가 없거나 RestartKey 반환된 포인터이고 다음 요소가 없는 경우 NULL 반환합니다.

발언

RtlEnumerateGenericTableWithoutSplayingAvl 반복적으로 호출하여 제네릭 테이블의 각 요소에서 호출자의 데이터를 처리할 수 있습니다.

요소는 RtlInitializeGenericTableAvl 제공된 PRTL_AVL_COMPARE_ROUTINE 매개 변수에 의해 정의된 순서대로 반환됩니다.

기본적으로 운영 체제는 플레이 트리를 사용하여 제네릭 테이블을 구현하지만 RtlookupElementGenericTableFullAvl 루틴은 Adelson-Velsky/Landis(AVL) 트리에서만 작동합니다. 드라이버에서 트리를 실행하지 않고 AVL 트리를 사용하도록 제네릭 테이블 루틴을 구성하려면 Ntddk.h포함하기 전에 공통 헤더 파일에 다음 정의 문을 삽입합니다.

#define RTL_USE_AVL_TABLES 0

RTL_USE_AVL_TABLES 정의되지 않은 경우 제네릭 테이블 루틴의 AVL 형식을 사용해야 합니다. 예를 들어 RtlEnumerateGenericTableWithoutSplaying 대신 RtlEnumerateGenericTableWithoutSplayingAvl 루틴을 사용합니다. RtlEnumerateGenericTableWithoutSplayingAvl호출에서 호출자는 RTL_GENERIC_TABLE대신 RTL_AVL_TABLE 테이블 구조를 전달해야 합니다.

* Rtl의 호출자입니다. GenericTableAvl* 루틴은 제네릭 테이블에 대한 액세스를 단독으로 동기화합니다. 배타적인 빠른 뮤텍스는 이 용도로 사용할 수 있는 가장 효율적인 동기화 메커니즘입니다.

제네릭 테이블에 대해 호출자가 할당한 메모리를 페이징할 수 있는 경우 RtlEnumerateGenericTableWithoutSplayingAvl 호출자는 IRQL < DISPATCH_LEVEL 실행되어야 합니다.

요구 사항

요구
대상 플랫폼 보편적
헤더 ntddk.h(Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 설명 섹션을 참조하세요.

참고 항목

RtlEnumerateGenericTableAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl