다음을 통해 공유


RtlGetElementGenericTable 함수(ntddk.h)

RtlGetElementGenericTable 루틴은 특정 제네릭 테이블 요소에 대해 호출자가 제공한 데이터에 대한 포인터를 반환합니다.

통사론

NTSYSAPI PVOID RtlGetElementGenericTable(
  [in] PRTL_GENERIC_TABLE Table,
  [in] ULONG              I
);

매개 변수

[in] Table

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

[in] I

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

반환 값

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

발언

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

호출자가 호출자가 연결된 데이터에 액세스해야 하는 특정 요소의 인덱싱을 제공할 수 있는 경우 RtlGetElementGenericTableRtlLookupElementGenericTable 보다 효율적입니다. 그러나 RtlGetElementGenericTable 반복적으로 호출하여 이러한 요소를 테스트하는 것은 RtlookupElementGenericTable 호출하여 해당 요소를 찾는 것보다 효율성이 떨어집니다.

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

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

#define RTL_USE_AVL_TABLES 0

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

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

요구 사항

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

참고 항목

RtlDeleteElementGenericTable

RtlEnumerateGenericTableWithoutSplaying

RtlInitializeGenericTable

RtlInsertElementGenericTable

RtlLookupElementGenericTable

RtlNumberGenericTableElements