RtlGetElementGenericTableAvl 함수(ntddk.h)

RtlGetElementGenericTableAvl 루틴은 특정 제네릭 Adelson-Velsky/Landis(AVL) 테이블 요소에 대해 호출자가 제공한 데이터에 대한 포인터를 반환합니다.

구문

NTSYSAPI PVOID RtlGetElementGenericTableAvl(
  [in] PRTL_AVL_TABLE Table,
  [in] ULONG          I
);

매개 변수

[in] Table

Ith요소를 검색할 제네릭 AVL 테이블(RTL_AVL_TABLE)에 대한 포인터입니다. RtlInitializeGenericTableAvl을 호출하여 테이블을 초기화해야 합니다.

[in] I

선택한 요소의 인덱스입니다. 이 값은 0부터 시작하므로 현재 Table 에 마지막으로 삽입된 요소의 인덱스는 항상 RtlNumberGenericTableElementsAvl에서 반환하는 값보다 1보다 작습니다.

반환 값

RtlGetElementGenericTableAvl은 제네릭 AVL 테이블의 I번째 요소에 대해 호출자가 제공한 데이터에 대한 포인터를 반환합니다. 지정된 I가 너무 크거나 제네릭 AVL 테이블에 현재 요소가 없는 경우 NULL을 반환합니다.

설명

RtlGetElementGenericTableAvl은 제네릭 AVL 테이블에 삽입된 Ith요소를 반환합니다. 첫 번째 요소를 검색하려면 I 를 0으로 설정합니다. 마지막 요소를 검색하려면 I 를 로 설정합니다(RtlNumberGenericTableElementsAvl(Table)-1). 요소가 제네릭 테이블에서 삭제되면 삭제된 요소 다음에 삽입된 모든 요소의 인덱스가 감소합니다. 따라서 요소의 인덱스가 시간이 지남에 따라 변경될 수 있습니다.

호출자가 호출자가 연결된 데이터에 액세스해야 하는 특정 요소의 인덱싱을 제공할 수 있는 경우 RtlGetElementGenericTableAvlRtlLookupElementGenericTableAvl보다 더 효율적입니다. 그러나 이러한 요소를 테스트하기 위해 RtlGetElementGenericTableAvl 을 반복적으로 호출하는 것은 RtlLookupElementGenericTableAvl 을 호출하여 찾는 것보다 덜 효율적입니다.

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

기본적으로 운영 체제는 splay 트리를 사용하여 제네릭 테이블을 구현합니다. 경우에 따라 플레이 트리에서 작업을 수행하면 트리가 깊고 좁아지고 직선으로 바뀔 수도 있습니다. 매우 깊은 트리는 검색 성능을 저하합니다. AVL(Adelson-Velsky/Landis) 트리를 사용하여 제네릭 테이블의 보다 균형 있고 얕은 트리 구현을 보장할 수 있습니다. 드라이버에서 트리를 표시하지 않고 AVL 트리를 사용하도록 일반 테이블 루틴을 구성하려면 Ntddk.h를 포함하기 전에 공통 헤더 파일에 다음 define 문을 삽입합니다.

#define RTL_USE_AVL_TABLES 0

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

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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 ntddk.h(Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 모든 수준(설명 참조)

추가 정보

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableWithoutSplayingAvl

RtlInitializeGenericTableAvl

RtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl