Freigeben über


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.

Weitere Informationen

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK