FltDoCompletionProcessingWhenSafe-Funktion (fltkernel.h)
Wenn dies sicher ist, führt die FltDoCompletionProcessingWhenSafe-Funktion eine Rückrufroutine für minifilter-Treiber nach dem Vorgang aus.
Syntax
BOOLEAN FLTAPI FltDoCompletionProcessingWhenSafe(
[in] PFLT_CALLBACK_DATA Data,
[in] PCFLT_RELATED_OBJECTS FltObjects,
[in, optional] PVOID CompletionContext,
[in] FLT_POST_OPERATION_FLAGS Flags,
[in] PFLT_POST_OPERATION_CALLBACK SafePostCallback,
[out] PFLT_POSTOP_CALLBACK_STATUS RetPostOperationStatus
);
Parameter
[in] Data
Zeiger auf die Rückrufdatenstruktur (FLT_CALLBACK_DATA) für den E/A-Vorgang. Normalerweise entspricht dies dem Datenzeiger , der an die Postoperation-Rückrufroutine (PFLT_POST_OPERATION_CALLBACK) übergeben wurde, die FltDoCompletionProcessingWhenSafe aufgerufen hat.
[in] FltObjects
Zeiger auf die zugehörige Objektstruktur (FLT_RELATED_OBJECTS) für den E/A-Vorgang. In der Regel entspricht dies dem FltObjects-Zeiger , der an die Rückrufroutine nach der Operation übergeben wurde, die FltDoCompletionProcessingWhenSafe aufgerufen hat.
[in, optional] CompletionContext
Zeiger auf eine vom Aufrufer bereitgestellte Kontextinformation, die an die Rückruffunktion übergeben wird, die im SafePostCallback-Parameter angegeben ist.
[in] Flags
Bitmaske von Flags, die angeben, wie die Vervollständigungsverarbeitung ausgeführt wird. In der Regel entspricht dies dem Flags-Wert , der an die Rückrufroutine nach der Operation übergeben wurde, die FltDoCompletionProcessingWhenSafe aufgerufen hat. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
[in] SafePostCallback
Zeiger auf eine vom Anrufer bereitgestellte PFLT_POST_OPERATION_CALLBACK typisierte Rückrufroutine, die das Betriebssystem aufruft, wenn dies sicher ist.
[out] RetPostOperationStatus
Vom Aufrufer zugewiesene Variable, die den endgültigen status Wert für den E/A-Vorgang empfängt. Weitere Informationen zum Festlegen dieses Parameters finden Sie im abschnitt "Hinweise".
Rückgabewert
FltDoCompletionProcessingWhenSafe gibt TRUE zurück, wenn die Abschlussverarbeitung für den E/A-Vorgang sofort ausgeführt werden kann oder der E/A-Vorgang erfolgreich an einen Workerthread gesendet wurde; Andernfalls wird FALSE zurückgegeben.
Hinweise
FltDoCompletionProcessingWhenSafe führt den SafePostCallback sofort aus, wenn der Aufrufer unter IRQL <= APC_LEVEL ausgeführt wird. Andernfalls wird die SafePostCallback-Verarbeitung zurückgestellt, wenn es sicher ist, den Vorgang in einem Workerthread zu posten, bis sie in einem Threadkontext aufgerufen werden kann, in dem IRQL <= APC_LEVEL.
Wenn IRQL < DISPATCH_LEVEL:
- FltDoCompletionProcessingWhenSafe ruft sofort die Rückrufroutine SafePostCallback auf.
- Der Parameter RetPostOperationStatus empfängt einen FLT_POSTOP_CALLBACK_STATUS Wert, der von SafePostCallback zurückgegeben wird.
- FltDoCompletionProcessingWhenSafe gibt TRUE zurück.
Wenn IRQL >= DISPATCH_LEVEL:
- FltDoCompletionProcessingWhenSafe versucht, den E/A-Vorgang in einem Workerthread zu posten und dann die SafePostCallback-Routine aus dem Workerthread aufzurufen.
- Wenn der E/A-Vorgang sicher veröffentlicht werden konnte:
- Der Filter-Manager legt RetPostOperationStatus auf FLT_POSTOP_MORE_PROCESSING_REQUIRED fest.
- FltDoCompletionProcessingWhenSafe gibt TRUE zurück.
- Wenn der E/A-Vorgang nicht sicher veröffentlicht werden konnte:
- Der Filter-Manager legt RetPostOperationStatus auf FLT_POSTOP_FINISHED_PROCESSING fest.
- FltDoCompletionProcessingWhenSafe gibt FALSE zurück.
FltDoCompletionProcessingWhenSafe kann nur für IRP-basierte Vorgänge aufgerufen werden. Verwenden Sie das Makro FLT_IS_IRP_OPERATION , um zu ermitteln, ob es sich bei dem Vorgang um einen IRP-basierten Vorgang handelt.
FltDoCompletionProcessingWhenSafe kann nicht verwendet werden, um den Abschluss eines Paging-E/A-Vorgangs in einem Workerthread nachzuvollständigen.
FltDoCompletionProcessingWhenSafe kann nur über die Postoperation-Rückrufroutine eines Minifiltertreibers (PFLT_POST_OPERATION_CALLBACK) aufgerufen werden. Beachten Sie, dass FltDoCompletionProcessingWhenSafe niemals aufgerufen werden sollte, wenn für den Flags-Parameter des Postoperation-Rückrufs das FLTFL_POST_OPERATION_DRAINING Bit festgelegt ist.
Wenn ein Minifilter FltDoCompletionProcessingWhenSafe aufruft und der SafePostCallback in einem Workerthread aufgerufen wird, weil es nicht sicher ist, ihn im aktuellen Threadkontext aufzurufen, setzt der Filter-Manager die Verarbeitung der Abschluss fort, solange der Minifilter nicht FLT_POSTOP_MORE_PROCESSING_REQUIRED aus dem SafePostCallback zurückgibt.
Wenn der Minifilter FLT_POSTOP_MORE_PROCESSING_REQUIRED aus dem SafePostCallback zurückgibt, muss der Minifilter FltCompletePendedPostOperation aufrufen, um die Abschlussverarbeitung fortzusetzen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar in Microsoft Windows 2000 UpdateRollup 1 für SP4, Windows XP SP2, Windows Server 2003 SP1 und höher. Nicht verfügbar in Windows 2000 SP4 und früheren Betriebssystemen. |
Zielplattform | Universell |
Header | fltkernel.h (include Fltkernel.h) |
Bibliothek | Fltmgr.lib |
IRQL | Alle. |