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. |