次の方法で共有


RtlDeleteElementGenericTable 関数 (ntddk.h)

RtlDeleteElementGenericTable ルーチンは、ジェネリック テーブルから要素を削除します。

構文

NTSYSAPI BOOLEAN RtlDeleteElementGenericTable(
  [in] PRTL_GENERIC_TABLE Table,
  [in] PVOID              Buffer
);

パラメーター

[in] Table

ジェネリック テーブルへのポインター (RTL_GENERIC_TABLE)。 テーブルは RtlInitializeGenericTable を呼び出して初期化されている必要があります。

[in] Buffer

削除する要素を一意に識別する値を含む、呼び出し元によって割り当てられたバッファーへのポインター。

戻り値

RtlDeleteElementGenericTable は 、要素が正常に削除された場合は TRUE 、それ以外の場合は FALSE を 返します。

注釈

RtlDeleteElementGenericTable はRtlInitializeGenericTable の呼び出しに登録された CompareRoutineFreeRoutine を呼び出します。

Rtl の呼び出し元..GenericTable ルーチンは、ジェネリック テーブルへのアクセスを排他的に同期する役割を担います。 排他高速ミューテックスは、この目的で使用する最も効率的な同期メカニズムです。

既定では、オペレーティング システムは splay ツリーを使用して汎用テーブルを実装します。 状況によっては、スプレイ ツリーを操作すると、ツリーが深く狭く、直線に変わる場合もあります。 非常に深いツリーでは、検索のパフォーマンスが低下します。 Adelson-Velsky/Landis (AVL) ツリーを使用して、ジェネリック テーブルのよりバランスの取れた浅いツリー実装を確保できます。 ドライバーでツリーを再生する代わりに AVL ツリーを使用するように汎用テーブル ルーチンを構成する場合は、 Ntddk.h を含める前に、共通ヘッダー ファイルに次の define ステートメントを挿入します。

#define RTL_USE_AVL_TABLES 0

RTL_USE_AVL_TABLESが定義されていない場合は、汎用テーブル ルーチンの AVL 形式を使用する必要があります。 たとえば、 RtlDeleteElementGenericTable の代わりに RtlDeleteElementGenericTableAvl ルーチンを使用します。 RtlDeleteElementGenericTableAvl の呼び出しでは、呼び出し元はRTL_GENERIC_TABLEではなく、RTL_AVL_TABLEテーブル構造渡す必要があります。

次のいずれかの条件が満たされている場合、 RtlDeleteElementGenericTable の呼び出し元は IRQL < DISPATCH_LEVELで実行されている必要があります。

  • 呼び出し元によって割り当てられたメモリ ( Table または Buffer) はページング可能です。
  • 呼び出し元から提供された CompareRoutine または FreeRoutine には、ページング可能なコードが含まれています。

要件

要件
対象プラットフォーム ユニバーサル
Header ntddk.h (Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL 「解説」を参照してください。

こちらもご覧ください

RtlInitializeGenericTable

RtlInsertElementGenericTable