Fungsi RtlEnumerateGenericTable (ntddk.h)

Rutinitas RtlEnumerateGenericTable digunakan untuk menghitung elemen dalam tabel generik.

Sintaks

NTSYSAPI PVOID RtlEnumerateGenericTable(
  [in] PRTL_GENERIC_TABLE Table,
  [in] BOOLEAN            Restart
);

Parameter

[in] Table

Penunjuk ke tabel generik (RTL_GENERIC_TABLE). Tabel harus diinisialisasi dengan memanggil RtlInitializeGenericTable.

[in] Restart

Atur ke TRUE jika enumerasi dimulai pada elemen pertama dalam tabel. Atur ke FALSE jika melanjutkan enumerasi dari panggilan sebelumnya.

Untuk menghitung semua elemen dalam tabel, gunakan RtlEnumerateGenericTable sebagai berikut:

for (p = RtlEnumerateGenericTable ( Table, TRUE );
     p != NULL;
     p = RtlEnumerateGenericTable ( Table, FALSE )) {
        // Process the element pointed to by p
}

Nilai kembali

RtlEnumerateGenericTable mengembalikan penunjuk ke elemen berikutnya, jika ada. Jika tidak ada lagi elemen dalam tabel, RtlEnumerateGenericTable mengembalikan NULL.

Keterangan

RtlEnumerateGenericTable meratakan tabel generik dengan mengonversinya dari pohon splay menjadi daftar tertaut yang diurutkan. Untuk menghitung tabel tanpa meratakannya, gunakan RtlEnumerateGenericTableWithoutSplaying.

Penelepon Rtl.. Rutinitas GenericTable bertanggung jawab untuk menyinkronkan akses secara eksklusif ke tabel generik. Mutex cepat eksklusif adalah mekanisme sinkronisasi yang paling efisien untuk digunakan untuk tujuan ini.

Secara default, sistem operasi menggunakan pohon splay untuk mengimplementasikan tabel generik. Dalam beberapa keadaan, operasi pada pohon splay akan membuat pohon dalam dan sempit dan bahkan mungkin mengubahnya menjadi garis lurus. Pohon yang sangat dalam menurunkan performa pencarian. Anda dapat memastikan implementasi pohon yang lebih seimbang dan dangkal dari tabel generik dengan menggunakan pohon Adelson-Velsky/Landis (AVL). Jika Anda ingin mengonfigurasi rutinitas tabel generik untuk menggunakan pohon AVL alih-alih pohon splay di driver Anda, masukkan pernyataan definisi berikut dalam file header umum sebelum menyertakan Ntddk.h:

#define RTL_USE_AVL_TABLES 0

Jika RTL_USE_AVL_TABLES tidak ditentukan, Anda harus menggunakan bentuk AVL dari rutinitas tabel generik. Misalnya, gunakan rutinitas RtlEnumerateGenericTableAvl alih-alih RtlEnumerateGenericTable. Dalam panggilan ke RtlEnumerateGenericTableAvl, pemanggil harus melewati struktur tabel RTL_AVL_TABLE daripada RTL_GENERIC_TABLE.

Penelepon RtlEnumerateGenericTable harus berjalan di IRQL < DISPATCH_LEVEL jika memori yang dialokasikan pemanggil untuk tabel generik dapat dipaginasi.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header ntddk.h (termasuk Ntddk.h, Ntifs.h, Fltkernel.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL IRQL < (lihat bagian Keterangan)

Lihat juga

ExInitializeFastMutex

RtlEnumerateGenericTableWithoutSplaying

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements