FLT_PARAMETERS für IRP_MJ_FILE_SYSTEM_CONTROL Union

Union-Komponente, die verwendet wird, wenn das Feld MajorFunction der FLT_IO_PARAMETER_BLOCK Struktur für den Vorgang IRP_MJ_FILE_SYSTEM_CONTROL wird.

Syntax

typedef union _FLT_PARAMETERS {
  ...   ;
  union {
    struct {
      PVPB           Vpb;
      PDEVICE_OBJECT DeviceObject;
    } VerifyVolume;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
    } Common;
    struct {
      ULONG                    OutputBufferLength;
      ULONG POINTER_ALIGNMENT  InputBufferLength;
      ULONG POINTER_ALIGNMENT  FsControlCode;
      PVOID                    InputBuffer;
      PVOID                    OutputBuffer;
      PMDL                     OutputMdlAddress;
    } Neither;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   SystemBuffer;
    } Buffered;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   InputSystemBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Direct;
  } FileSystemControl;
  ...   ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

Member

  • FileSystemControl: Struktur, die die folgenden Member enthält.

  • VerifyVolume: Union-Komponente, die für IRP_MN_VERIFY_VOLUME Vorgänge verwendet wird.

  • Vpb: Zeiger auf den Volumeparameterblock (VPB) für das zu überprüfende Volume.

  • DeviceObject: Zeiger auf das Geräteobjekt für das zu überprüfende Volume.

  • Common: Union-Komponente, die für alle Puffermethoden für IRP_MN_KERNEL_CALL- und IRP_MN_USER_FS_REQUEST-Vorgänge verwendet wird.

  • Common.OutputBufferLength: Länge des Puffers in Bytes, auf den das Neither.OutputBuffer - oder Direct.OutputBuffer-Element verweist.

  • Common.InputBufferLength: Länge des Puffers in Bytes, auf den das Element Neither.InputBuffer, Buffered.SystemBuffer oder Direct.InputSystemBuffer verweist.

  • Common.FsControlCode: FSCTL-Funktionscode, der an das Dateisystem, den Dateisystemfilter oder den Minifiltertreiber für das Zielgerät übergeben werden soll.

Ausführliche Informationen zu IOCTL- und FSCTL-Anforderungen finden Sie unter Verwenden von E/A-Steuerungscodes im Kernelmodusarchitekturhandbuch und "Geräteeingabe- und Ausgabesteuerungscodes" in der Microsoft Windows SDK-Dokumentation. (Diese Ressource ist in einigen Sprachen und Ländern möglicherweise nicht verfügbar.)

  • Weder: Union-Komponente, die für IRP_MN_KERNEL_CALL- und IRP_MN_USER_FS_REQUEST-Vorgänge verwendet wird, wenn die Puffermethode METHOD_NEITHER wird. Weitere Informationen zu Puffermethoden finden Sie unter Definieren von E/A-Steuerungscodes.

  • Neither.InputBuffer: Virtuelle Benutzermodusadresse des Eingabepuffers, den der ursprüngliche Anforderer des vorgangs angegeben hat. Diese Adressen werden vom E/A-Manager und vom Filter-Manager nicht überprüft. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und MmProbeAndLockPages verwenden und alle Pufferverweise in try/except-Blöcken einschließen. Weitere Informationen finden Sie unter Verwenden von weder gepufferten noch direkten E/A-Vorgängen und Fehlern beim Verweisen auf User-Space Adressen.

  • Weder.OutputBuffer: Virtuelle Benutzermodusadresse des Ausgabepuffers, den der ursprüngliche Anforderer des Vorgangs angegeben hat. Diese Adressen werden vom E/A-Manager und vom Filter-Manager nicht überprüft. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und MmProbeAndLockPages verwenden und alle Pufferverweise in try/except-Blöcken einschließen. Weitere Informationen finden Sie unter Verwenden von weder gepufferten noch direkten E/A-Vorgängen und Fehlern beim Verweisen auf User-Space Adressen. Weder.OutputBuffer ist optional und kann NULL sein, wenn eine MDL in Neither.OutputMdlAddress bereitgestellt wird. Siehe Hinweise.

  • Neither.OutputMdlAddress: Adresse einer Speicherdeskriptorliste (MDL), die den Puffer beschreibt, auf den das Neither.OutputBuffer-Element verweist. Dieser Member ist optional und kann NULL sein, wenn ein Puffer in Neither.OutputBuffer bereitgestellt wird.

  • Gepuffert: Union-Komponente, die für IRP_MN_KERNEL_CALL- und IRP_MN_USER_FS_REQUEST-Vorgänge verwendet wird, wenn die Puffermethode METHOD_BUFFERED ist. Weitere Informationen zu Puffermethoden finden Sie unter Definieren von E/A-Steuerungscodes.

  • Buffered.SystemBuffer: Adresse des vom System zugewiesenen Puffers für den Vorgang. In METHOD_BUFFERED E/A wird dieser Puffer sowohl für die Eingabe als auch für die Ausgabe verwendet. Weitere Informationen finden Sie unter Methoden für den Zugriff auf Datenpuffer.

  • Direkt: Union-Komponente, die für IRP_MN_KERNEL_CALL- und IRP_MN_USER_FS_REQUEST-Vorgänge verwendet wird, wenn die Puffermethode METHOD_IN_DIRECT oder METHOD_OUT_DIRECT ist. Weitere Informationen zu Puffermethoden finden Sie unter Definieren von E/A-Steuerungscodes im Kernelmodusarchitekturhandbuch.

  • Direct.InputSystemBuffer: Adresse des Eingabepuffers für den Vorgang. Dieser Puffer wird vom Betriebssystem gesperrt, sodass der Zugriff aus dem Kernelmodus sicher ist. Weitere Informationen finden Sie unter Methoden für den Zugriff auf Datenpuffer.

  • Direct.OutputBuffer: Virtuelle Adresse des Ausgabepuffers im Benutzermodus, den der ursprüngliche Anforderer des vorgangs angegeben hat. Bei direkter E/A sperrt das Betriebssystem im Gegensatz zu METHOD_NEITHER E/A diesen Puffer so, dass der Zugriff aus dem Kernelmodus sicher ist, solange sich der Minifilter im gleichen Prozesskontext wie der ursprüngliche Anforderer des E/A-Vorgangs befindet. (Andernfalls muss mmGetSystemAddressForMdlSafe aufgerufen werden, um die Systemadresse von der MDL abzurufen, auf die das OutputMdlAddress-Mitglied verweist.) Weitere Informationen finden Sie unter Using Direct E/O and Errors in Direct E/O .

  • Direct.OutputMdlAddress: Adresse einer Speicherdeskriptorliste (Memory Descriptor List, MDL), die den Puffer beschreibt, auf den das Direct.OutputBuffer-Element verweist. Dieser Member ist erforderlich und darf nicht NULL sein.

Hinweise

Die FLT_PARAMETERS-Struktur für IRP_MJ_FILE_SYSTEM_CONTROL-Vorgänge enthält die Parameter für einen Dateisystem-Control-Information-Vorgang, der durch eine Rückrufdatenstruktur (FLT_CALLBACK_DATA) dargestellt wird. Sie ist in einer FLT_IO_PARAMETER_BLOCK-Struktur enthalten.

Wenn sowohl ein Neither.OutputBuffer - als auch ein Neither.MdlAddress-Puffer bereitgestellt werden, wird empfohlen, dass Minifilter die MDL verwenden.

Wenn ein Minifilter den Wert von Neither.MdlAddress ändert, gibt der Filter-Manager nach dem Rückruf nach dem Vorgang die derzeit in Neither.MdlAddress gespeicherte MDL frei und stellt den vorherigen Wert von Neither.MdlAddress wieder her.

IRP_MJ_FILE_SYSTEM_CONTROL ist ein IRP-basierter Vorgang.

Anforderungen

Anforderungstyp Anforderung
Header Fltkernel.h (einschließlich Fltkernel.h)

Weitere Informationen

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltFsControlFile

IoBuildAsynchronfsdRequest

IoBuildSynchronousFsdRequest

IoVerifyVolume

IRP_MJ_FILE_SYSTEM_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwFsControlFile