Freigeben über


FLT_IO_PARAMETER_BLOCK Struktur (fltkernel.h)

Die FLT_IO_PARAMETER_BLOCK-Struktur enthält die Parameter für den E/A-Vorgang, dargestellt durch eine FLT_CALLBACK_DATA Rückrufdatenstruktur.

Syntax

typedef struct _FLT_IO_PARAMETER_BLOCK {
  ULONG          IrpFlags;
  UCHAR          MajorFunction;
  UCHAR          MinorFunction;
  UCHAR          OperationFlags;
  UCHAR          Reserved;
  PFILE_OBJECT   TargetFileObject;
  PFLT_INSTANCE  TargetInstance;
  FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;

Angehörige

IrpFlags

Eine Bitmaske von Flags, die verschiedene Aspekte des E/A-Vorgangs angeben. Diese Flags werden nur für IRP-basierte Vorgänge verwendet. Die folgende Tabelle zeigt Flagwerte.

Wert Bedeutung
IRP_BUFFERED_IO Der Vorgang ist ein gepufferter E/A-Vorgang.
IRP_CLOSE_OPERATION Der Vorgang ist ein Bereinigungs- oder Abschlussvorgang.
IRP_DEALLOCATE_BUFFER Der E/A-Manager befreit den Puffer während der Abschlussphase für das IRP.
IRP_INPUT_OPERATION Der Vorgang ist ein Eingabevorgang.
IRP_NOCACHE Der Vorgang ist ein nicht zwischengespeicherter E/A-Vorgang.
IRP_PAGING_IO Der Vorgang ist ein Auslagerungs-E/A-Vorgang.
IRP_SYNCHRONOUS_API Der E/A-Vorgang ist synchron.
IRP_SYNCHRONOUS_PAGING_IO Der Vorgang ist ein synchroner Auslagerungs-E/A-Vorgang.
IRP_MOUNT_COMPLETION Für den Vorgang wird eine Volume-Bereitstellung abgeschlossen.
IRP_CREATE_OPERATION Der Vorgang ist ein Erstellungs- oder Öffnungsvorgang.
IRP_READ_OPERATION Der E/A-Vorgang dient zum Lesen.
IRP_WRITE_OPERATION Der E/A-Vorgang dient zum Schreiben.
IRP_DEFER_IO_COMPLETION Der E/A-Abschluss des Vorgangs wird zurückgestellt.
IRP_ASSOCIATED_IRP Der Vorgang ist einem Master-IRP zugeordnet.
IRP_OB_QUERY_NAME Der Vorgang ist eine asynchrone Namensabfrage.
IRP_HOLD_DEVICE_QUEUE Reserviert.
IRP_UM_DRIVER_INITIATED_IO Der Vorgang stammt von einem Benutzermodustreiber.

MajorFunction

Der Hauptfunktionscode für den E/A-Vorgang. Wichtige Funktionscodes werden für IRP-basierte Vorgänge, schnelle E/A-Vorgänge und Dateisystem-Rückrufvorgänge (FSFilter) verwendet. Weitere Informationen zu zusätzlichen Vorgängen finden Sie unter FLT_PARAMETERS.

MinorFunction

Der Hilfsfunktionscode für den E/A-Vorgang. Dieses Element ist optional und kann NULL-sein. Der Wert des MajorFunction Member bestimmt die möglichen Werte. Weitere Informationen zu Hilfsfunktionscodes finden Sie unter FLT_PARAMETERS.

OperationFlags

Eine Bitmaske von Flags, die verschiedene Aspekte des E/A-Vorgangs angeben. Diese Flags werden nur für IRP-basierte Vorgänge verwendet. Der Filter-Manager kopiert diese Flags aus dem Flags Mitglied der IO_STACK_LOCATION Struktur, die dem IRP-zugeordnet ist. In der folgenden Tabelle sind die am häufigsten verwendeten Flagwerte aufgeführt.

Wert Bedeutung
SL_CASE_SENSITIVE Wird für IRP_MJ_CREATEverwendet. Wenn dieses Flag festgelegt ist, sollte bei Dateinamenvergleichen die Groß-/Kleinschreibung beachtet werden.
SL_EXCLUSIVE_LOCK Wird für IRP_MJ_LOCK_CONTROLverwendet. Wenn dieses Kennzeichen festgelegt ist, wird eine exklusive Bytebereichssperre angefordert. Andernfalls wird eine freigegebene Sperre angefordert.
SL_FAIL_IMMEDIATELY Wird für IRP_MJ_LOCK_CONTROLverwendet. Wenn dieses Kennzeichen festgelegt ist, sollte die Sperranforderung fehlschlagen, wenn sie nicht sofort gewährt werden kann.
SL_FORCE_ACCESS_CHECK Wird für IRP_MJ_CREATEverwendet. Wenn dieses Flag festgelegt ist, müssen Zugriffsüberprüfungen auch dann ausgeführt werden, wenn der Wert des RequestorMode Member des IRP KernelModeist.
SL_FORCE_DIRECT_WRITE Wird für IRP_MJ_WRITE und IOCTL_DISK_COPY_DATA verwendet. Wenn dieses Flag festgelegt ist, können Kernelmodustreiber in Volumebereiche schreiben, in die sie normalerweise aufgrund von Sicherheitsgründen nicht schreiben können. Dieses Kennzeichen wird sowohl auf der Dateisystemebene als auch auf der Speicherstapelebene überprüft. Das kennzeichen SL_FORCE_DIRECT_WRITE ist in Windows Vista und höheren Versionen von Windows verfügbar.
SL_INDEX_SPECIFIED Wird für IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EAund IRP_MJ_SET_QUOTAverwendet. Wenn dieses Kennzeichen festgelegt ist, sollte die Suche nach Verzeichnis-, Kontingent- oder erweiterten Attributinformationen am Eintrag in der Liste beginnen, deren Index angegeben ist.
SL_OPEN_PAGING_FILE Wird für IRP_MJ_CREATEverwendet. Wenn dieses Flag festgelegt ist, handelt es sich bei der Datei um eine Auslagerungsdatei.
SL_OPEN_TARGET_DIRECTORY Wird für IRP_MJ_CREATEverwendet. Wenn dieses Flag festgelegt ist, sollte das übergeordnete Verzeichnis der Datei geöffnet werden.
SL_OVERRIDE_VERIFY_VOLUME Wird für IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_READund IRP_MJ_WRITEverwendet. Wenn dieses Kennzeichen festgelegt ist, sollte der E/A-Vorgang auch dann ausgeführt werden, wenn das DO_VERIFY_VOLUME Flag für das Geräteobjekt des Volumes festgelegt ist.
SL_RESTART_SCAN Wird für IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EAund IRP_MJ_SET_QUOTAverwendet. Wenn dieses Kennzeichen festgelegt ist, sollte die Suche nach Verzeichnis-, Kontingent- oder erweiterten Attributinformationen beim ersten Eintrag im Verzeichnis oder in der Liste beginnen. Andernfalls sollte der Scan aus dem vorherigen Scan fortgesetzt werden.
SL_RETURN_SINGLE_ENTRY Wird für IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EAund IRP_MJ_SET_QUOTAverwendet. Wenn dieses Flag festgelegt ist, sollte die Suche nach Verzeichnis-, Kontingent- oder erweiterten Attributinformationen nur den ersten gefundenen Eintrag zurückgeben.
SL_WATCH_TREE Wird für IRP_MJ_DIRECTORY_CONTROLverwendet. Wenn dieses Kennzeichen festgelegt ist, sollten auch alle Unterverzeichnisse dieses Verzeichnisses überwacht werden. Andernfalls wird nur das Verzeichnis selbst überwacht.
SL_WRITE_THROUGH Wird für IRP_MJ_WRITEverwendet. Wenn dieses Flag festgelegt ist, müssen die Dateidaten in beständigen Speicher geschrieben werden, nicht nur in den Cache geschrieben.

Reserved

Reserviert für die Systemverwendung. Nicht verwenden.

TargetFileObject

Ein Dateiobjektzeiger für die Datei oder das Verzeichnis, das das Ziel für diesen E/A-Vorgang ist.

TargetInstance

Ein undurchsichtiger Instanzzeiger für den Minifilter, der das Ziel für diesen E/A-Vorgang ist.

Parameters

Eine FLT_PARAMETERS Struktur, die die Parameter für den E/A-Vorgang enthält, die durch die elemente MajorFunction und MinorFunction angegeben werden.

Bemerkungen

Die FLT_IO_PARAMETER_BLOCK-Struktur enthält die Parameter für den E/A-Vorgang, der durch eine Rückrufdatenstruktur (FLT_CALLBACK_DATA) dargestellt wird. Die Rückrufdatenstruktur enthält einen Zeiger auf die FLT_IO_PARAMETER_BLOCK Struktur in ihrem Iopb--Element.

Ein Minifilter empfängt einen Zeiger auf die Rückrufdatenstruktur als Data oder CallbackData Eingabeparameter auf die folgenden Rückrufroutintypen:

Die Voroperations- und Postoperationsrückrufroutinen eines Minifilters können den Inhalt der FLT_IO_PARAMETER_BLOCK Struktur für den E/A-Vorgang ändern, mit Ausnahme der MajorFunction und Reserved Members. Wenn dies der Fall ist, muss FltSetCallbackDataDirtyaufgerufen werden, es sei denn, sie hat auch das IoStatus Member der Rückrufdatenstruktur für den Vorgang geändert. Andernfalls werden die geänderten Werte ignoriert.

Wenn der Filter-Manager einen Voroperations- oder Postoperationsrückruf auf einen Minifilter ausgibt, sind FltObjects->FileObject- und TargetFileObject- (CallbackData->Iopb->TargetFileObject) anfänglich identisch. Wenn ein Minifilter TargetFileObject oder TargetInstance-ändert, wird der nachfolgende Aufruf von FltSetCallbackDataDir ty von einem Der Voroperationsrückruf bewirkt, dass der Filter-Manager FltObjects->FileObject- und FltObjects->Instance- ersetzt, bevor der Vorgang an niedrigere Filter gesendet wird.

Wenn die Voroperationsrückrufroutine eines Minifilters die Parameter für einen E/A-Vorgang ändert, erhalten alle Minifilter darunter im Minifilterinstanzstapel die geänderten Parameter in ihren Voroperations- und Postoperationsrückrufroutinen.

Die geänderten Parameter werden nicht von der eigenen Postoperationsrückrufroutine des Minifilters oder von Minifiltern oberhalb dieses Minifilters im Minifilterinstanzstapel empfangen. In allen Fällen erhalten die Voroperations- und Postoperationsrückrufroutinen eines Minifilters dieselben Eingabeparameterwerte.

Wenn ein Minifilter den Wert des TargetInstance Member ändert, muss der neue Wert ein Zeiger auf eine Instanz desselben Minifilters in derselben Höhe auf einem anderen Volume sein. Darüber hinaus muss das Geräteobjekt des neuen Volumes eine Stapelgröße aufweisen, die größer oder gleich dem des Geräteobjekts des ursprünglichen Volumes ist.

Gehen Sie wie folgt vor, um die Stapelgröße für ein Volumegerätobjekt abzurufen, wenn ein undurchsichtiger Instanzzeiger für eine Instanz angegeben wird, die an das Volume angefügt ist:

  • Rufen Sie FltGetVolumeFromInstance- auf, um den Volumezeiger abzurufen.
  • Rufen Sie FltGetDeviceObject- auf, um einen Zeiger auf das Volumegerätobjekt abzurufen. Dieser Zeiger wird im parameter DeviceObject zurückgegeben. Die Stapelgröße des Geräteobjekts befindet sich in DeviceObject->StackSize-.
  • Wenn der Volumezeiger nicht mehr benötigt wird, rufen Sie FltObjectDereference- auf, um die Referenzanzahl zu verringern.
  • Wenn der Zeiger des Volumegerätobjekts nicht mehr benötigt wird, rufen Sie ObDereferenceObject- auf, um die Referenzanzahl zu verringern.

Ein Minifilter kann den Wert des TargetFileObject Members ändern. Der neue Wert muss jedoch ein Zeiger auf ein Dateiobjekt für eine Datei sein, die sich auf demselben Volume befindet wie die vom TargetInstance Member angegebene Instanz.

Ein Minifilter kann den Wert des MajorFunction Members nicht sicher ändern. Stattdessen muss ein neuer E/A-Vorgang initiiert werden.

Ein Minifilter kann einen E/A-Vorgang initiieren, indem eine Supportroutine wie FltReadFile- aufgerufen oder FltAllocateCallbackData aufgerufen wird, um eine Rückrufdatenstruktur zuzuweisen; Initialisieren der E/A-Parameter in der FLT_IO_PARAMETER_BLOCK-Struktur und Übergeben der Rückrufdatenstruktur an FltPerformSynchronousIo oder FltPerformAsynchronousIo.

Anmerkung

Verwenden Sie Supportroutinen nach Möglichkeit beim Initiieren von E/A-Vorgängen. Ein Minifilter sollte nur dann eigene Rückrufdaten zuordnen, wenn keine Unterstützungsfunktion für einen bestimmten E/A-Vorgang vorhanden ist.

Anforderungen

Anforderung Wert
Header- fltkernel.h (include Fltkernel.h)

Siehe auch

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FltAllocateCallbackData-

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile-

FltSetCallbackDataDirty

IO_STACK_LOCATION

IRP-

FLT_PARAMETERS

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_SHUTDOWN

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK