Функция FltCbdqRemoveIo (fltkernel.h)

FltCbdqRemoveIo удаляет определенный элемент из очереди данных обратного вызова драйвера минифильтра.

Синтаксис

PFLT_CALLBACK_DATA FLTAPI FltCbdqRemoveIo(
  [in, out] PFLT_CALLBACK_DATA_QUEUE            Cbdq,
  [in]      PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);

Параметры

[in, out] Cbdq

Указатель на очередь данных обратного вызова, безопасную для отмены. Эта очередь должна быть инициализирована путем вызова Метода FltCbdqInitialize.

[in] Context

Указатель контекста для удаляемого элемента. Этот контекст инициализируется fltCbdqInsertIo при первой вставке запроса ввода-вывода в очередь. Этот параметр является обязательным и должен иметь значение, отличное от NULL.

Возвращаемое значение

FltCbdqRemoveIo возвращает указатель на структуру данных обратного вызова для запроса ввода-вывода, который был удален из очереди. Если соответствующий запрос ввода-вывода не найден или очередь пуста, Функция FltCbdqRemoveIo возвращает значение NULL.

Комментарии

FltCbdqRemoveIo удаляет структуру данных обратного вызова (FLT_CALLBACK_DATA) для конкретной операции ввода-вывода из очереди данных обратного вызова драйвера мини-фильтра. FltCbdqRemoveIo можно использовать только для удаления структуры данных обратного вызова с связанной с ней структурой контекста . Эта связь создается при вставке структуры данных обратного вызова в очередь данных обратного вызова с помощью FltCbdqInsertIo.

Драйверы минифильтра могут использовать подпрограммы FltCbdqXxx для реализации очереди данных обратного вызова для операций ввода-вывода на основе IRP. Используя эти процедуры, драйверы минифильтра могут сделать свои очереди отмены безопасными; система прозрачно обрабатывает отмену ввода-вывода для драйверов минифильтра.

Подпрограммы FltCbdqXxx можно использовать только для операций ввода-вывода на основе IRP. Чтобы определить, представляет ли данная структура данных обратного вызова операцию ввода-вывода на основе IRP, используйте макрос FLT_IS_IRP_OPERATION .

Очередь данных обратного вызова инициализируется с помощью FltCbdqInitialize. FltCbdqRemoveIo использует процедуры, предоставленные в таблице диспетчеризации очереди, для блокировки очереди и удаления структуры данных обратного вызова из очереди. Сама операция удаления выполняется подпрограммой обратного вызова CbdqRemoveIo драйвера минифильтра.

Если очередь защищена спин-блокировкой , а не объектом мьютекса или переменной ресурса, вызывающий объект FltCbdqRemoveIo может выполняться в IRQL <= DISPATCH_LEVEL. Если используется мьютекс или ресурс, вызывающий объект должен работать в среде IRQL <= APC_LEVEL.

Существует потенциальная гонка между диспетчером фильтров, удалив отмененный запрос ввода-вывода, и драйвером фильтра, удаляя его, потому что он был завершен. Важно отметить, что контекст запроса остается действительным после первого удаления, что приведет к сбою второй попытки удаления.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
IRQL См. раздел "Примечания".

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

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveNextIo