RtlLookupElementGenericTableFullAvl 함수(ntddk.h)
RtlLookupElementGenericTableFullAvl 루틴은 지정된 데이터와 일치하는 요소에 대한 제네릭 테이블을 검색합니다.
구문
NTSYSAPI PVOID RtlLookupElementGenericTableFullAvl(
[in] PRTL_AVL_TABLE Table,
[in] PVOID Buffer,
[out] PVOID *NodeOrParent,
[out] TABLE_SEARCH_RESULT *SearchResult
);
매개 변수
[in] Table
제네릭 Adelson-Velsky/Landis(AVL) 테이블(RTL_AVL_TABLE)에 대한 포인터입니다. RtlInitializeGenericTableAvl을 호출하여 테이블을 초기화해야 합니다.
[in] Buffer
RtlInitializeGenericTableAvl이 제네릭 테이블을 초기화할 때 등록된 CompareRoutine에 전달할 검색 데이터의 버퍼입니다. 자세한 내용은 RtlInitializeGenericTableAvl에 대한 설명을 참조하세요.
[out] NodeOrParent
출력에서 RtlLookupElementGenericTableFullAvl이 검색하는 테이블 항목(노드)과 NodeOrParent의 관계를 설명하는 값입니다. SearchResult 매개 변수에는 다음 값이 있을 수 있습니다.
TableEmptyTree
트리가 비어 있었습니다. NodeOrParent의 내용이 변경되지 않았습니다.
TableFoundNode
RtlLookupElementGenericTableFullAvl 루틴은 버퍼의 데이터와 일치하는 키가 있는 테이블 항목을 발견했습니다. NodeOrParent 는 일치하는 항목에 대한 포인터를 포함합니다.
TableInsertAsLeft
RtlLookupElementGenericTableFullAvl 루틴에서 키가 버퍼의 데이터와 일치하는 테이블 항목을 찾지 못했습니다. RtllookupElementGenericTableFullAvl이 검색한 항목이 테이블에 있는 항목이아니라NodeOrParent가 가리키는 항목의 왼쪽 자식이 됩니다.
TableInsertAsRight
RtlLookupElementGenericTableFullAvl 루틴에서 키가 버퍼의 데이터와 일치하는 테이블 항목을 찾지 못했습니다. RtlLookupElementGenericTableFullAvl이 검색한 항목이 테이블에 있는 경우 NodeOrParent가 가리키는 항목의 오른쪽 자식이 됩니다.
[out] SearchResult
테이블 항목에 대한 포인터입니다. RtlLookupElementGenericTableFullAvl 루틴이 항목과 일치하는 경우 NodeOrParent는 일치하는 항목을 가리킵니다. RtlLookupElementGenericTableFullAvl 루틴이 일치 항목을 찾지 못하면 NodeOrParent는 RtlookupElementGenericTableFullAvl 루틴이 검색한 항목의 부모가 될 항목을 가리킵니다.
반환 값
RtlLookupElementGenericTableFullAvl 은 제네릭 테이블의 일치 요소와 연결된 사용자 데이터에 대한 포인터를 반환하거나, 제네릭 테이블에 현재 요소가 없거나 일치하는 요소가 없는 경우 NULL 을 반환합니다.
설명
기본적으로 운영 체제는 splay 트리를 사용하여 제네릭 테이블을 구현하지만 RtlLookupElementGenericTableFullAvl 루틴은 Adelson-Velsky/Landis(AVL) 트리에서만 작동합니다. 드라이버에서 트리를 재생하지 않고 AVL 트리를 사용하도록 제네릭 테이블 루틴을 구성하려면 Ntddk.h를 포함하기 전에 공통 헤더 파일에 다음 define 문을 삽입합니다.
#define RTL_USE_AVL_TABLES 0
RTL_USE_AVL_TABLES 정의되지 않은 경우 제네릭 테이블 루틴의 AVL 형식을 사용해야 합니다. 예를 들어 RtlLookupElementGenericTableTable 대신 RtlLookupElementGenericTableFullAvl 루틴을 사용합니다. RtlLookupElementGenericTableFullAvl 호출에서 호출자는 RTL_GENERIC_TABLE 대신 RTL_AVL_TABLE 테이블 구조를 전달해야 합니다.
Rtl의 호출자 입니다. GenericTableAvl 루틴은 제네릭 테이블에 대한 액세스를 독점적으로 동기화하는 역할을 합니다. 배타적인 빠른 뮤텍스는 이 목적을 위해 사용할 수 있는 가장 효율적인 동기화 메커니즘입니다.
다음 조건 중 하나가 있는 경우 RtlLookupElementGenericTableFullAvl 호출자는 IRQL < DISPATCH_LEVEL 실행되어야 합니다.
- 테이블 또는 버퍼에서 호출자가 할당한 메모리는 페이징할 수 있습니다.
- 호출자가 제공한 CompareRoutine 에는 페이징 가능한 코드가 포함되어 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP부터 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | ntddk.h(Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL(설명 섹션 참조) |