Freigeben über


FltDoCompletionProcessingWhenSafe-Funktion (fltkernel.h)

Wenn dies sicher ist, führt die funktion FltDoCompletionProcessingWhenSafe eine Minifiltertreiber-Rückrufroutine 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. In der Regel entspricht dies dem Data Zeiger, der an die Postoperation-Rückrufroutine (PFLT_POST_OPERATION_CALLBACK) übergeben wurde, die FltDoCompletionProcessingWhenSafeaufgerufen wurde.

[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 Postoperation-Rückrufroutine übergeben wurde, die FltDoCompletionProcessingWhenSafeaufgerufen wurde.

[in, optional] CompletionContext

Zeiger auf eine vom Aufrufer bereitgestellte Kontextinformationen, die an die Rückruffunktion übergeben werden, 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 Postoperation-Rückrufroutine übergeben wurde, die FltDoCompletionProcessingWhenSafeaufgerufen wurde. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[in] SafePostCallback

Zeiger auf eine vom Aufrufer bereitgestellte PFLT_POST_OPERATION_CALLBACK-typierte Rückrufroutine, die das Betriebssystem aufruft, wenn dies sicher ist.

[out] RetPostOperationStatus

Vom Aufrufer zugewiesene Variable, die den endgültigen Statuswert für den E/A-Vorgang empfängt. Weitere Informationen dazu, wie dieser Parameter festgelegt wird, finden Sie im folgenden 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 in einen Arbeitsthread gepostet wurde; andernfalls wird FALSE-zurückgegeben.

Bemerkungen

FltDoCompletionProcessingWhenSafe führt die SafePostCallback- sofort aus, wenn der Aufrufer bei IRQL <= APC_LEVEL ausgeführt wird. Andernfalls wird die SafePostCallback- verarbeitung zurückgestellt, bis sie in einem Threadkontext aufgerufen werden kann, in dem IRQL <= APC_LEVEL aufgerufen werden kann.

Wenn IRQL < DISPATCH_LEVEL:

  • FltDoCompletionProcessingWhenSafe ruft sofort die SafePostCallback Rückrufroutine auf.
  • Der RetPostOperationStatus Parameter empfängt einen von SafePostCallbackzurückgegebenen FLT_POSTOP_CALLBACK_STATUS Wert.
  • FltDoCompletionProcessingWhenSafe gibt TRUEzurück.

Wenn IRQL >= DISPATCH_LEVEL:

  • FltDoCompletionProcessingWhenSafe versucht, den E/A-Vorgang in einen Arbeitsthread zu veröffentlichen, und rufen Sie dann die SafePostCallback Routine aus dem Arbeitsthread auf.
  • Wenn der E/A-Vorgang sicher gepostet werden könnte:
    • Filter-Manager legt RetPostOperationStatus- auf FLT_POSTOP_MORE_PROCESSING_REQUIRED fest.
    • FltDoCompletionProcessingWhenSafe gibt TRUEzurück.
  • Wenn der E/A-Vorgang nicht sicher gepostet werden konnte:
    • 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. Um zu bestimmen, ob es sich bei dem Vorgang um einen IRP-basierten Vorgang handelt, verwenden Sie das FLT_IS_IRP_OPERATION Makro.

FltDoCompletionProcessingWhenSafe- kann nicht verwendet werden, um den Abschluss eines Auslagerungs-E/A-Vorgangs an einen Arbeitsthread zu senden.

FltDoCompletionProcessingWhenSafe- kann nur aus der Postoperationsrückrufroutine (PFLT_POST_OPERATION_CALLBACK) eines Minifiltertreibers aufgerufen werden. Beachten Sie, dass FltDoCompletionProcessingWhenSafe- nie aufgerufen werden sollte, wenn der parameter Flags Parameter des Postoperation-Rückrufs den FLTFL_POST_OPERATION_DRAINING Bitsatz aufweist.

Wenn ein Minifilter FltDoCompletionProcessingWhenSafe- aufruft und die SafePostCallback- in einem Arbeitsthread aufgerufen wird, da es nicht sicher ist, sie im aktuellen Threadkontext aufzurufen, setzt der Filter-Manager die Abschlussverarbeitung 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
mindestens unterstützte Client- Verfügbar in Microsoft Windows 2000 UpdateRollup 1 für SP4, Windows XP SP2, Windows Server 2003 SP1 und höher. In Windows 2000 SP4 und früheren Betriebssystemen nicht verfügbar.
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
Library Fltmgr.lib
IRQL- Jegliche.

Siehe auch

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK