Функция 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 | См. раздел "Примечания". |