RtlEnumerateGenericTableAvl 함수(ntddk.h)
RtlEnumerateGenericTableAvl 루틴은 제네릭 테이블의 요소를 열거하는 데 사용됩니다.
통사론
NTSYSAPI PVOID RtlEnumerateGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] BOOLEAN Restart
);
매개 변수
[in] Table
제네릭 테이블(RTL_AVL_TABLE)에 대한 포인터입니다. RtlInitializeGenericTableAvl호출하여 테이블을 초기화해야 합니다.
[in] Restart
열거형이 테이블의 첫 번째 요소에서 시작하는 경우 TRUE 설정합니다. 이전 호출에서 열거형을 다시 시작하면 false 설정합니다.
테이블의 모든 요소를 열거하려면 다음과 같이 rtlEnumerateGenericTableAvl 사용합니다.
for (p = RtlEnumerateGenericTableAvl ( Table, TRUE );
p != NULL;
p = RtlEnumerateGenericTableAvl ( Table, FALSE )) {
// Process the element pointed to by p
}
반환 값
RtlEnumerateGenericTableAvl 있는 경우 다음 요소에 대한 포인터를 반환합니다. 테이블에 요소가 더 이상 없으면 RtlEnumerateGenericTableAvlNULL반환합니다.
발언
Rtl의 호출자입니다. GenericTableAvl 루틴은 제네릭 테이블에 대한 액세스를 독점적으로 동기화합니다. 배타적인 빠른 뮤텍스는 이 용도로 사용할 수 있는 가장 효율적인 동기화 메커니즘입니다.
기본적으로 운영 체제는 splay 트리를 사용하여 제네릭 테이블을 구현하지만 RtlEnumerateGenericTableAvl 루틴은 AVL(Adelson-Velsky/Landis) 트리에서만 작동합니다. 드라이버에서 트리를 실행하지 않고 AVL 트리를 사용하도록 제네릭 테이블 루틴을 구성하려면 Ntddk.h포함하기 전에 공통 헤더 파일에 다음 정의 문을 삽입합니다.
#define RTL_USE_AVL_TABLES 0
RTL_USE_AVL_TABLES 정의되지 않은 경우 제네릭 테이블 루틴의 AVL 형식을 사용해야 합니다. 예를 들어 RtlEnumerateGenericTable 대신 RtlEnumerateGenericTableAvl 루틴을사용합니다. RtlEnumerateGenericTableAvl호출에서 호출자는 RTL_GENERIC_TABLE대신 RTL_AVL_TABLE 테이블 구조를 전달해야 합니다.
제네릭 테이블에 대해 호출자가 할당한 메모리를 페이징할 수 있는 경우 RtlEnumerateGenericTableAvl 호출자는 IRQL < DISPATCH_LEVEL 실행되어야 합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
헤더 | ntddk.h(Ntddk.h, Ntifs.h, Fltkernel.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL < DISPATCH_LEVEL(설명 섹션 참조) |