Поделиться через


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

FltCbdqInsertIo вставляет структуру данных обратного вызова для операции ввода-вывода в очередь обратного вызова драйвера фильтра.

Синтаксис

NTSTATUS FLTAPI FltCbdqInsertIo(
  [in, out]      PFLT_CALLBACK_DATA_QUEUE            Cbdq,
  [in]           PFLT_CALLBACK_DATA                  Cbd,
  [in, optional] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
  [in, optional] PVOID                               InsertContext
);

Параметры

[in, out] Cbdq

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

[in] Cbd

Указатель на структуру данных обратного вызова (FLT_CALLBACK_DATA) для очереди операции ввода-вывода. Операция должна быть операцией ввода-вывода на основе IRP.

[in, optional] Context

Вызываемая переменная, которая получает непрозрачный указатель контекста для запроса ввода-вывода. Драйверы фильтров могут использовать этот указатель для идентификации определенного элемента в очереди, чтобы его можно было удалить, вызвав FltCbdqRemoveIo. Если драйвер фильтра не требуется для удаления определенных запросов ввода-вывода из очереди, этот параметр может быть null.

[in, optional] InsertContext

Указатель контекста, передаваемый в подпрограмму обратного вызова драйвера фильтра CbdqInsertIo.

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

FltCbdqInsertIo возвращает STATUS_SUCCESS при вставке структуры данных обратного вызова в очередь данных обратного вызова или соответствующее значение NTSTATUS, например следующее:

Возвращаемый код Описание
STATUS_FLT_CBDQ_DISABLED Структура данных обратного вызова не была вставлена в очередь данных обратного вызова, так как в настоящее время очередь отключена. Чтобы повторно создать очередь, вызовите FltCbdqEnable. Это код ошибки.

Заметка

В случае успеха FltCbdqInsertIo возвращает все обратного вызова insertIo фильтра; Например, фильтр может возвращать STATUS_SUCCESS или STATUS_PENDING, чтобы указать успешность. Важно, чтобы фильтр был самосообразующимся в любом значении, которое он использует для указания успешности.

Замечания

FltCbdqInsertIo вставляет указанную структуру данных обратного вызова (FLT_CALLBACK_DATA) в очередь обратного вызова драйвера фильтра.

  • Обратите внимание, что существует потенциальное условие гонки между драйвером фильтра, вставляющим данные обратного вызова, и соответствующим IRP отменяется. Это можно избежать, немедленно вызвав подпрограмму отмены очереди, если IRP уже отменен.

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

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

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

Дополнительные сведения о создании очереди данных обратного вызова см. в FltCbdqInitialize. Используйте FltCbdqRemoveIo для удаления конкретного запроса ввода-вывода из очереди или FltCbdqRemoveNextIo для удаления следующего доступного запроса ввода-вывода.

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка fltkernel.h (include Fltkernel.h)
IRQL См. раздел "Примечания".

См. также

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqRemoveIo

FltCbdqRemoveNextIo