FltCbdqInsertIo-Funktion (fltkernel.h)
FltCbdqInsertIo fügt die Rückrufdatenstruktur für einen E/A-Vorgang in die Rückrufdatenwarteschlange eines Filtertreibers ein.
Syntax
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
);
Parameter
[in, out] Cbdq
Zeigen Sie auf die anrufsichere Rückrufdatenwarteschlange des Anrufers. Diese Warteschlange muss durch Aufrufen von FltCbdqInitializeinitialisiert worden sein.
[in] Cbd
Zeigen Sie auf die Rückrufdatenstruktur (FLT_CALLBACK_DATA), damit der E/A-Vorgang in die Warteschlange gestellt wird. Der Vorgang muss ein IRP-basierter E/A-Vorgang sein.
[in, optional] Context
Vom Aufrufer bereitgestellte Variable, die einen undurchsichtigen Kontextzeiger für die E/A-Anforderung empfängt. Filtertreiber können diesen Zeiger verwenden, um ein bestimmtes Element in der Warteschlange zu identifizieren, damit es durch Aufrufen von FltCbdqRemoveIoentfernt werden kann. Wenn der Filtertreiber nicht erforderlich ist, um bestimmte E/A-Anforderungen aus der Warteschlange zu entfernen, kann dieser Parameter NULL-werden.
[in, optional] InsertContext
Kontextzeiger, der an die CbdqInsertIo- Rückrufroutine des Filtertreibers übergeben werden soll.
Rückgabewert
FltCbdqInsertIo gibt STATUS_SUCCESS zurück, wenn die Rückrufdatenstruktur in die Rückrufdatenwarteschlange eingefügt wurde, oder einen geeigneten NTSTATUS-Wert wie den folgenden:
Rückgabecode | Beschreibung |
---|---|
STATUS_FLT_CBDQ_DISABLED | Die Rückrufdatenstruktur wurde nicht in die Rückrufdatenwarteschlange eingefügt, da die Warteschlange derzeit deaktiviert ist. Rufen Sie FltCbdqEnableauf, um die Warteschleife erneut zu erhalten. Dies ist ein Fehlercode. |
Anmerkung
Im Falle eines Erfolgs gibt FltCbdqInsertIo zurück, was die InsertIo Rückruf des Filters zurückgibt; Beispielsweise kann ein Filter entweder STATUS_SUCCESS oder STATUS_PENDING zurückgeben, um den Erfolg anzuzeigen. Es ist wichtig, dass der Filter selbstkonsensiert ist, je nachdem, welcher Wert verwendet wird, um den Erfolg anzugeben.
Bemerkungen
FltCbdqInsertIo fügt die angegebene Rückrufdatenstruktur (FLT_CALLBACK_DATA) in die Rückrufdatenwarteschlange eines Filtertreibers ein.
- Beachten Sie, dass zwischen einem Filtertreiber, der die Rückrufdaten einfügt, und dem zugehörigen IRP, das abgebrochen wird, eine potenzielle Rennbedingung besteht. Dies kann vermieden werden, indem sie sofort die Abbruchroutine der Warteschlange aufruft, wenn die IRP bereits abgebrochen wurde.
Filtertreiber 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 Filtertreiber ihre Warteschlangen abbruchsicher machen; Das System verarbeitet den E/A-Abbruch für die Filtertreiber transparent.
Die FltCbdqXxx Routinen können nur für IRP-basierte E/A-Vorgänge verwendet werden. Um zu bestimmen, 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 Aufrufen FltCbdqInitializeinitialisiert. FltCbdqInsertIo verwendet die in der Verteilertabelle der Warteschlange bereitgestellten Funktionen, um die Warteschlange zu sperren und die Rückrufdatenstruktur in die Warteschlange einzufügen. Der Einfügevorgang selbst erfolgt durch die CbdqInsertIo Routine der Warteschlange.
Weitere Informationen zum Erstellen einer Rückrufdatenwarteschlange finden Sie unter FltCbdqInitialize. Verwenden Sie FltCbdqRemoveIo-, um eine bestimmte E/A-Anforderung aus der Warteschlange zu entfernen, oder FltCbdqRemoveNextIo, um die nächste verfügbare E/A-Anforderung zu entfernen.
Wenn die Warteschlange durch eine Drehsperre geschützt ist, anstelle eines mutex-Objekts oder Ressourcenvariablen, kann der Aufrufer von FltCbdqInsertIo 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.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | fltkernel.h (include Fltkernel.h) |
IRQL- | Siehe Abschnitt "Hinweise". |