FltQueueDeferredIoWorkItem-Funktion (fltkernel.h)
Die FltQueueDeferredIoWorkItem Routine sendet einen IRP-basierten E/A-Vorgang in einer Arbeitswarteschlange.
Syntax
NTSTATUS FLTAPI FltQueueDeferredIoWorkItem(
[in] PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
[in] PFLT_CALLBACK_DATA Data,
[in] PFLT_DEFERRED_IO_WORKITEM_ROUTINE WorkerRoutine,
[in] WORK_QUEUE_TYPE QueueType,
[in] PVOID Context
);
Parameter
[in] FltWorkItem
Ein Zeiger auf die Arbeitsaufgabe, die der Arbeitswarteschlange hinzugefügt werden soll. Die Arbeitsaufgabe muss durch Aufrufen FltAllocateDeferredIoWorkItem-zugewiesen worden sein.
[in] Data
Ein Zeiger auf die FLT_CALLBACK_DATA Struktur für den E/A-Vorgang. Der Vorgang muss ein IRP-basierter E/A-Vorgang sein. Um zu bestimmen, ob eine bestimmte Rückrufdatenstruktur einen IRP-basierten E/A-Vorgang darstellt, verwenden Sie das FLT_IS_IRP_OPERATION Makro.
[in] WorkerRoutine
Ein Zeiger auf eine vom Anrufer bereitgestellte Workerrückrufroutine. Diese Routine wird wie folgt deklariert:
typedef VOID
(*PFLT_DEFERRED_IO_WORKITEM_ROUTINE) (
_In_ PFLT_DEFERRED_IO_WORKITEM FltWorkItem,
_In_ PFLT_CALLBACK_DATA CallbackData,
_In_opt_ PVOID Context
);
wo:
- FltWorkItem- ist ein undurchsichtiger Zeiger auf eine Struktur zurückgestellter Arbeitsaufgaben.
- CallbackData- ist ein Zeiger auf die Rückrufdatenstruktur für den E/A-Vorgang.
- Context ist ein optionaler Kontextinformationspunkt, der als Context-Parameter von FltQueueDeferredIoWorkItemübergeben wurde.
[in] QueueType
Gibt die Warteschlange an, in die die Arbeitsaufgabe FltWorkItem Punkt eingefügt werden soll. QueueType- kann einer der folgenden Werte sein:
Wert | Bedeutung |
---|---|
CriticalWorkQueue- | Fügen Sie die Arbeitsaufgabe in die Warteschlange ein, aus der ein Systemthread mit einem Attribut mit Echtzeitpriorität die Arbeitsaufgabe verarbeitet. |
DelayedWorkQueue | Fügen Sie die Arbeitsaufgabe in die Warteschlange ein, aus der ein Systemthread mit einem variablen Prioritätsattribut die Arbeitsaufgabe verarbeitet. |
Der QueueType-wertHyperCriticalWorkQueue für die Systemverwendung reserviert ist.
[in] Context
Ein Zeiger zum Aufrufen von kontextdefinierten Kontextinformationen, die als Context-Parameter der rückrufroutinierten Parameter übergeben werden sollen.
Rückgabewert
Die FltQueueDeferredIoWorkItem- Routine gibt STATUS_SUCCESS oder einen entsprechenden NTSTATUS-Wert wie einen der folgenden zurück:
Rückgabecode | Beschreibung |
---|---|
STATUS_FLT_DELETING_OBJECT | Die Zielinstanz für den E/A-Vorgang (Data->Iopb->TargetInstance) wird heruntergerissen. Dies ist ein Fehlercode. |
STATUS_FLT_NOT_SAFE_TO_POST_OPERATION | Der E/A-Vorgang kann nicht sicher in einen Arbeitsthread gepostet werden. Mögliche Gründe für die Rückgabe dieses Fehlercodes finden Sie in den Hinweisen. |
Bemerkungen
Die FltQueueDeferredIoWorkItem Routine sendet einen E/A-Vorgang in einer Systemarbeitswarteschlange. Die angegebene WorkerRoutine Rückrufroutine wird im Kontext eines Systemthreads bei IRQL-PASSIVE_LEVEL aufgerufen.
Der Vorgang muss ein IRP-basierter E/A-Vorgang sein. Um zu bestimmen, ob eine bestimmte Rückrufdatenstruktur einen IRP-basierten E/A-Vorgang darstellt, verwenden Sie das FLT_IS_IRP_OPERATION Makro.
FltQueueDeferredIoWorkItem- gibt STATUS_FLT_NOT_SAFE_TO_POST_OPERATION zurück, wenn der E/A-Vorgang nicht sicher in einen Arbeitsthread gepostet werden kann. Mögliche Gründe sind:
FltQueueDeferredIoWorkItem kann keinen Auslagerungs-E/A-Vorgang in einem Arbeitsthread bereitstellen.
FltQueueDeferredIoWorkItem kann keinen E/A-Vorgang in einem Arbeitsthread bereitstellen, wenn das TopLevelIrp- Feld des aktuellen Threads nicht NULL-ist, da die resultierende Dateisystem-Rekursion Deadlocks oder Stapelüberläufe verursachen kann. Weitere Informationen finden Sie unter IoGetTopLevelIrp.
Ein Minifiltertreiber kann FltQueueDeferredIoWorkItem- in einer Preoperation-Rückrufroutine (PFLT_PRE_OPERATION_CALLBACK) wie folgt verwenden:
Der Voroperationsrückruf ruft FltAllocateDeferredIoWorkItem- auf, um die Arbeitsaufgabe zuzuweisen.
Der Voroperationsrückruf ruft FltQueueDeferredIoWorkItem- auf, um den Vorgang in der Arbeitswarteschlange zu veröffentlichen.
Der Voroperationsrückruf gibt FLT_PREOP_PENDING zurück.
Nach der Verarbeitung des E/A-Vorgangs ruft die Arbeitsroutine FltCompletePendedPreOperation auf, um den E/A-Vorgang an den Filter-Manager zurückzugeben.
Die Arbeitsroutine ruft FltFreeDeferredIoWorkItem- auf, um die Arbeitsaufgabe frei zu geben.
Ein Minifiltertreiber kann FltQueueDeferredIoWorkItem- in einer Post-Operation-Rückrufroutine (PFLT_POST_OPERATION_CALLBACK) wie folgt verwenden:
Der Rückruf nach dem Vorgang ruft FltAllocateDeferredIoWorkItem- auf, um die Arbeitsaufgabe zuzuweisen.
Der Rückruf nach dem Vorgang ruft FltQueueDeferredIoWorkItem- auf, um den Vorgang in der Arbeitswarteschlange zu veröffentlichen.
Der Rückruf nach dem Vorgang gibt FLT_POSTOP_MORE_PROCESSING_REQUIRED zurück.
Nach der Verarbeitung des E/A-Vorgangs ruft die Arbeitsroutine FltCompletePendedPostOperation auf, um den E/A-Vorgang an den Filter-Manager zurückzugeben.
Die Arbeitsroutine ruft FltFreeDeferredIoWorkItem- auf, um die Arbeitsaufgabe frei zu geben.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 2000 |
Zielplattform- | Universal |
Header- | fltkernel.h (include Fltkernel.h) |
Library | Fltmgr.lib |
DLL- | Fltmgr.sys |
IRQL- | <= DISPATCH_LEVEL |
Siehe auch
FltAllocateDeferredIoWorkItem-