Функция 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 отвечают за исключительно синхронизацию доступа к универсальной таблице. Эксклюзивный быстрый мьютекс является наиболее эффективным механизмом синхронизации для этой цели.

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

#define RTL_USE_AVL_TABLES 0

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

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

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

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL См. раздел "Примечания".

См. также раздел

RtlInitializeGenericTable

RtlInsertElementGenericTable