RtlLookupFirstMatchingElementGenericTableAvl 函式 (ntddk.h)

RtlLookupFirstMatchingElementGenericTableAvl 例程會在樹狀結構中尋找最左邊的元素,且該專案符合指定的數據。

語法

NTSYSAPI PVOID RtlLookupFirstMatchingElementGenericTableAvl(
  [in]  PRTL_AVL_TABLE Table,
  [in]  PVOID          Buffer,
  [out] PVOID          *RestartKey
);

參數

[in] Table

泛型 Adelson-Velsky/Landis (AVL) 數據表的指標, (RTL_AVL_TABLE) 。

[in] Buffer

包含搜尋數據的緩衝區。

[out] RestartKey

在輸出中,包含要與列舉例程搭配使用的搜尋內容,例如 RtlEnumerateGenericTableWithoutSplayingAvl

傳回值

RtlLookupFirstMatchingElementGenericTableAvl例程會傳回相符數據的指標,如果找不到相符專案,則傳回 NULL

備註

實作泛型數據表的樹狀結構可能包含數個只有在大小寫時不同的檔名。 搜尋演算法可以使用這個例程來找出第一個相符專案,而不參考案例,並使用列舉例程,例如 RtlEnumerateGenericTableWithoutSplayingAvl,傳回每個後續相符專案。

根據預設,操作系統會使用 splay 樹狀結構來實作一般數據表,但 RtlLookupFirstMatchingElementGenericTableAvl例程只適用於 Adelson-Velsky/Landis (AVL) 樹狀結構。 在某些情況下,Splay 樹狀結構上的作業會讓樹狀結構深而窄,甚至可能會變成直線。 非常深的樹狀結構會降低搜尋的效能。 您可以使用 Adelson-Velsky/Landis (AVL) 樹狀結構,確保泛型數據表的更平衡、淺層樹狀結構實作。 如果您想要將泛型數據表例程設定為使用AVL樹狀結構,而不是驅動程式中的splay樹狀結構,請在包含 Ntddk.h之前,先在通用頭檔中插入下列 define 語句:

#define RTL_USE_AVL_TABLES 0

如果未定義RTL_USE_AVL_TABLES,您必須使用泛型數據表例程的AVL格式。

如果下列任一條件成立, 則 RtlLookupFirstMatchingElementGenericTableAvl 的呼叫端必須執行於 <= APC_LEVEL:

  • 數據表Buffer 的呼叫端配置記憶體是可分頁的。
  • 呼叫端提供的 CompareRoutine 包含可分頁程序代碼。

規格需求

需求
最低支援的用戶端 從 Windows Vista 開始提供。
目標平台 Universal
標頭 ntddk.h (包含 FltKernel.h、Ntifs.h、Ntddk.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= APC_LEVEL (请参阅一节)

另請參閱

RtlEnumerateGenericTableWithoutSplayingAvl