Функция 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 вызывает CompareRoutine и FreeRoutine, зарегистрированные в вызове RtlInitializeGenericTable.

Вызывающие объект Rtl.. Подпрограммы GenericTable отвечают за исключительно синхронизацию доступа к универсальной таблице. Эксклюзивный быстрый мьютекс является наиболее эффективным механизмом синхронизации, используемым для этой цели.

По умолчанию операционная система использует деревья воспроизведения для реализации универсальных таблиц. При некоторых обстоятельствах операции с деревом воспроизведения сделают дерево глубоким и узким и даже может превратить его в прямую линию. Очень глубокие деревья ухудшают производительность поиска. Вы можете обеспечить более сбалансированную, неглубокую реализацию универсальных таблиц с помощью деревьев Adelson-Velsky/Landis (AVL). Если вы хотите настроить универсальные подпрограммы таблиц для использования деревьев AVL вместо деревьев воспроизведения в драйвере, вставьте следующую инструкцию определения в общий файл заголовка перед включением Ntddk.h:

#define RTL_USE_AVL_TABLES 0

Если RTL_USE_AVL_TABLES не определен, необходимо использовать форму AVL универсальных подпрограмм таблиц. Например, используйте подпрограмму RtlDeleteElementGenericTableAvl вместо RtlDeleteElementGenericTable. В вызове RtlDeleteElementGenericTableAvlвызывающий объект должен передать структуру таблицы RTL_AVL_TABLE, а не RTL_GENERIC_TABLE.

Вызывающие RtlDeleteElementGenericTable должны выполняться в IRQL < DISPATCH_LEVEL, если имеет одно из следующих условий:

  • Выделенная вызывающей памятью таблица или буфера можно пространить.
  • Вызывающий CompareRoutine или FreeRoutine содержит код, доступный для страниц.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка ntddk.h (include Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL См. раздел "Примечания".

См. также

RtlInitializeGenericTable

RtlInsertElementGenericTable