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:
- PFLT_POST_OPERATION_CALLBACK
- PFLT_PRE_OPERATION_CALLBACK
- PFLT_COMPLETED_ASYNC_IO_CALLBACK
- PFLT_GENERATE_FILE_NAME
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_PARAMETERS für IRP_MJ_ACQUIRE_FOR_MOD_WRITE
- FLT_PARAMETERS für IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS für IRP_MJ_CREATE
- FLT_PARAMETERS für IRP_MJ_CREATE_MAILSLOT
- FLT_PARAMETERS für IRP_MJ_CREATE_NAMED_PIPE
- FLT_PARAMETERS für IRP_MJ_DEVICE_CONTROL
- FLT_PARAMETERS für IRP_MJ_DIRECTORY_CONTROL
- FLT_PARAMETERS für IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE
- FLT_PARAMETERS für IRP_MJ_FILE_SYSTEM_CONTROL
- FLT_PARAMETERS für IRP_MJ_INTERNAL_DEVICE_CONTROL
- FLT_PARAMETERS für IRP_MJ_LOCK_CONTROL
- FLT_PARAMETERS für IRP_MJ_MDL_READ
- FLT_PARAMETERS für IRP_MJ_MDL_READ_COMPLETE
- FLT_PARAMETERS für IRP_MJ_MDL_WRITE_COMPLETE
- FLT_PARAMETERS für IRP_MJ_NETWORK_QUERY_OPEN
- FLT_PARAMETERS für IRP_MJ_PNP
- FLT_PARAMETERS für IRP_MJ_PREPARE_MDL_WRITE
- FLT_PARAMETERS für IRP_MJ_QUERY_EA
- FLT_PARAMETERS für IRP_MJ_QUERY_INFORMATION
- FLT_PARAMETERS für IRP_MJ_QUERY_OPEN
- FLT_PARAMETERS für IRP_MJ_QUERY_QUOTA
- FLT_PARAMETERS für IRP_MJ_QUERY_SECURITY
- FLT_PARAMETERS für IRP_MJ_QUERY_VOLUME_INFORMATION
- FLT_PARAMETERS für IRP_MJ_READ
- FLT_PARAMETERS für IRP_MJ_RELEASE_FOR_MOD_WRITE
- FLT_PARAMETERS für IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS für IRP_MJ_SET_EA
- FLT_PARAMETERS für IRP_MJ_SET_INFORMATION
- FLT_PARAMETERS für IRP_MJ_SET_QUOTA
- FLT_PARAMETERS für IRP_MJ_SET_SECURITY
- FLT_PARAMETERS für IRP_MJ_SET_VOLUME_INFORMATION
- FLT_PARAMETERS für IRP_MJ_SYSTEM_CONTROL
- FLT_PARAMETERS für IRP_MJ_VOLUME_MOUNT
- FLT_PARAMETERS für IRP_MJ_WRITE