RtlLookupElementGenericTable 함수(ntddk.h)

RtlLookupElementGenericTable 루틴은 지정된 데이터와 일치하는 요소에 대한 제네릭 테이블을 검색합니다.

구문

NTSYSAPI PVOID RtlLookupElementGenericTable(
  PRTL_GENERIC_TABLE Table,
  PVOID              Buffer
);

매개 변수

Table

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

Buffer

RtlInitializeGenericTable이 제네릭 테이블을 초기화할 때 등록된 CompareRoutine에 전달할 검색 데이터의 버퍼입니다. 자세한 내용은 RtlInitializeGenericTable에 대한 설명을 참조하세요.

반환 값

RtlLookupElementGenericTable 은 제네릭 테이블의 desired 요소에 대해 호출자가 제공한 데이터에 대한 포인터를 반환합니다. 제네릭 테이블에 현재 요소가 없거나 일치하는 요소가 없는 경우 NULL 을 반환합니다.

설명

일치하는 요소가 발견되면 RtlLookupElementGenericTable 은 제네릭 테이블의 플레이 트리의 균형을 다시 조정합니다.

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

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

`#define RTL_USE_AVL_TABLES 0`

위에서 지정한 대로 RTL_USE_AVL_TABLES 정의하지 않으면 제네릭 테이블 루틴의 AVL 형식을 사용해야 합니다. 예를 들어 RtlLookupElementGenericTableTable 대신 RtlLookupElementGenericTableAvl 루틴을 사용합니다. RtlLookupElementGenericTableAvl 호출에서 호출자는 RTL_GENERIC_TABLE 대신 RTL_AVL_TABLE 테이블 구조를 전달해야 합니다.

다음 조건 중 하나가 있는 경우 RtlLookupElementGenericTable 의 호출자는 IRQL < DISPATCH_LEVEL 실행되어야 합니다.

  • 테이블 또는 버퍼에서 호출자가 할당한 메모리는 페이징할 수 있습니다.

  • 호출자가 제공한 CompareRoutine 에는 페이징 가능한 코드가 포함되어 있습니다.

그렇지 않으면 RtlLookupElementGenericTable 의 호출자는 페이징되지 않은 메모리 또는 코드를 사용할 때 IRQL <= DISPATCH_LEVEL 실행할 수 있습니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 ntddk.h(Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 설명 섹션을 참조하십시오.

추가 정보

RTL_AVL_TABLE

RTL_GENERIC_TABLE

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements