Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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. |