RtlEnumerateGenericTableWithoutSplaying 함수(ntddk.h)

RtlEnumerateGenericTableWithoutSplaying 루틴은 제네릭 테이블의 요소를 열거하는 데 사용됩니다.

구문

NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplaying(
  [in]      PRTL_GENERIC_TABLE Table,
  [in, out] PVOID              *RestartKey
);

매개 변수

[in] Table

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

[in, out] RestartKey

RtlEnumerateGenericTableWithoutSplaying에 대한 이전 호출에서 반환된 요소의 주소입니다. 열거형이 테이블의 첫 번째 요소에서 시작하는 경우 NULL 로 설정해야 합니다.

테이블의 모든 요소를 열거하려면 다음과 같이 RtlEnumerateGenericTableWithoutSplaying을 사용합니다.

RestartKey = NULL;
for (ptr = RtlEnumerateGenericTableWithoutSplaying(Table, &RestartKey);
     ptr != NULL;
     ptr = RtlEnumerateGenericTableWithoutSplaying(Table, &RestartKey)) {
        // Process the element pointed to by ptr
}

반환 값

RtlEnumerateGenericTableWithoutSplaying 은 요소와 연결된 호출자 정의 구조체에 대한 포인터를 반환합니다. RestartKey가 NULL이고 테이블에 요소가 없거나 RestartKey가 반환된 포인터이고 다음 요소가 없는 경우 NULL을 반환합니다.

설명

RtlEnumerateGenericTable과 달리 RtlEnumerateGenericTableWithoutSplaying은 제네릭 테이블을 플레이 트리에서 정렬된 연결된 목록으로 변환하여 일반 테이블을 평면화하지 않습니다. RtlEnumerateGenericTableWithoutSplayingRtlEnumerateGenericTable보다 효율적이고 다중 프로세서로부터 안전합니다.

RtlEnumerateGenericTableWithoutSplaying 을 반복적으로 호출하여 제네릭 테이블의 각 요소에서 호출자의 데이터를 처리할 수 있습니다.

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

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

#define RTL_USE_AVL_TABLES 0

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

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

요구 사항

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

추가 정보

RtlEnumerateGenericTable

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements