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 FltCbdqInitialize initialisiert worden sein.

[in] Context

Kontextzeiger für das zu entfernende Element. Dieser Kontext wird von FltCbdqInsertIo initialisiert, wenn die E/A-Anforderung zum ersten Mal in die Warteschlange eingefügt wird. Dieser Parameter ist erforderlich und muss nicht NULL 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.

Hinweise

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, der eine Kontextstruktur zugeordnet ist. Diese Zuordnung wird erstellt, wenn die Rückrufdatenstruktur von FltCbdqInsertIo in 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 gestalten. 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. Verwenden Sie das Makro FLT_IS_IRP_OPERATION , um zu bestimmen, ob eine bestimmte Rückrufdatenstruktur einen IRP-basierten E/A-Vorgang darstellt.

Eine Rückrufdatenwarteschlange wird von FltCbdqInitialize initialisiert. FltCbdqRemoveIo verwendet die in der Dispatchtabelle der Warteschlange bereitgestellten Routinen, um die Warteschlange zu sperren und die Rückrufdatenstruktur aus der Warteschlange zu entfernen. Der Entfernungsvorgang selbst wird von der CbdqRemoveIo-Rückrufroutine des Minifiltertreibers ausgeführt.

Wenn die Warteschlange durch eine Drehsperre und nicht durch ein Mutex-Objekt oder eine Ressourcenvariable geschützt ist, kann der Aufrufer von FltCbdqRemoveIo unter IRQL <= DISPATCH_LEVEL ausgeführt werden. Wenn ein Mutex oder eine Ressource verwendet wird, muss der Aufrufer unter IRQL <= APC_LEVEL ausgeführt werden.

Es gibt ein potenzielles Rennen zwischen dem Filter-Manager, der eine abgebrochene E/A-Anforderung entfernt, und dem Filtertreiber, der sie entfernt, weil sie abgeschlossen wurde. Es ist wichtig zu beachten, dass der Anforderungskontext nach dem ersten Entfernen gültig bleibt, was dazu führt, dass ein zweiter Entfernungsversuch fehlschlägt.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header fltkernel.h (fltkernel.h einschließen)
IRQL Weitere Informationen finden Sie im Abschnitt mit den Hinweisen.

Weitere Informationen

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveNextIo