Freigeben über


FltCbdqRemoveIo-Funktion (fltkernel.h)

FltCbdqRemoveIo entfernt ein bestimmtes Element aus der Rückrufdatenwarteschlange eines Minifiltertreibers.

Syntax

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

Parameter

[in, out] Cbdq

Zeiger auf eine abbruchsichere Rückrufdatenwarteschlange. Diese Warteschlange muss durch Aufrufen von FltCbdqInitializeinitialisiert worden sein.

[in] Context

Kontextzeiger für das zu entfernende Element. Dieser Kontext wird von FltCbdqInsertIo initialisiert, wenn die E/A-Anforderung zuerst in die Warteschlange eingefügt wird. Dieser Parameter ist erforderlich und muss nichtNULL-sein.

Rückgabewert

FltCbdqRemoveIo gibt einen Zeiger auf die Rückrufdatenstruktur für die E/A-Anforderung zurück, die aus der Warteschlange entfernt wurde. Wenn keine übereinstimmende E/A-Anforderung gefunden wird oder die Warteschlange leer ist, gibt FltCbdqRemoveIoNULL-zurück.

Bemerkungen

FltCbdqRemoveIo entfernt die Rückrufdatenstruktur (FLT_CALLBACK_DATA) für einen bestimmten E/A-Vorgang aus der Rückrufdatenwarteschlange eines Minifiltertreibers. FltCbdqRemoveIo kann nur verwendet werden, um eine Rückrufdatenstruktur zu löschen, die eine kontextbezogene Struktur zugeordnet ist. Diese Zuordnung wird erstellt, wenn die Rückrufdatenstruktur von FltCbdqInsertIoin die Rückrufdatenwarteschlange eingefügt wird.

Minifiltertreiber können die FltCbdqXxx Routinen verwenden, um eine Rückrufdatenwarteschlange für IRP-basierte E/A-Vorgänge zu implementieren. Mithilfe dieser Routinen können Minifiltertreiber ihre Warteschlangen abbruchsicher machen; Das System verarbeitet den E/A-Abbruch für die Minifiltertreiber transparent.

Die FltCbdqXxx Routinen können nur für IRP-basierte E/A-Vorgänge verwendet werden. Um festzustellen, ob eine bestimmte Rückrufdatenstruktur einen IRP-basierten E/A-Vorgang darstellt, verwenden Sie das FLT_IS_IRP_OPERATION Makro.

Eine Rückrufdatenwarteschlange wird durch FltCbdqInitializeinitialisiert. FltCbdqRemoveIo verwendet die Routinen in der Verteilertabelle der Warteschlange, um die Warteschlange zu sperren und die Rückrufdatenstruktur aus der Warteschlange zu entfernen. Der Entfernungsvorgang selbst erfolgt durch die CbdqRemoveIo Rückrufroutine des Minifiltertreibers.

Wenn die Warteschlange durch eine Drehsperre geschützt ist, anstelle eines Mutex-Objekts oder Ressourcenvariablen, kann der Aufrufer von FltCbdqRemoveIo unter IRQL <= DISPATCH_LEVEL ausgeführt werden. Wenn ein Mutex oder eine Ressource verwendet wird, muss der Aufrufer bei IRQL <= APC_LEVEL ausgeführt werden.

Es gibt ein potenzielles Rennen zwischen dem Filtermanager, der eine abgebrochene E/A-Anforderung entfernt, und der Filtertreiber entfernt es, da er abgeschlossen wurde. Es ist wichtig zu beachten, dass der Anforderungskontext nach dem ersten Entfernen gültig bleibt, was zu einem zweiten Entfernungsversuch führt.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
IRQL- Siehe Abschnitt "Hinweise".

Siehe auch

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveNextIo