IRP_MJ_SET_INFORMATION (FS- und Filtertreiber)

Sendebedingungen

Der E/A-Manager, andere Betriebssystemkomponenten und andere Kernelmodustreiber senden die IRP_MJ_SET_INFORMATION Anforderung. Sie kann beispielsweise gesendet werden, wenn eine Anwendung im Benutzermodus eine Win32-Funktion wie SetEndOfFile aufgerufen hat oder wenn eine Kernelmoduskomponente ZwSetInformationFile aufgerufen hat.

Vorgang: Dateisystemtreiber

Der Dateisystemtreiber sollte das Dateiobjekt extrahieren und decodieren, um zu bestimmen, ob es eine geöffnete Benutzerdatei oder ein geöffnetes Verzeichnis darstellt. Wenn dies der Fall ist, sollte der Dateisystemtreiber die Anforderung entsprechend verarbeiten und die IRP abschließen.

Die folgenden Arten von Informationen können für Dateien und Verzeichnisse festgelegt werden:

  • FileBasicInformation
  • FileDispositionInformation
  • FileLinkInformation (für Dateisysteme, die das Erstellen von Zyklen in der Verzeichnishierarchie ermöglichen)
  • FilePositionInformation
  • FileRenameInformation

Die folgenden Arten von Informationen können nur für Dateien festgelegt werden:

  • FileAllocationInformation
  • FileEndOfFileInformation
  • FileLinkInformation: Für Dateisysteme (z. B. NTFS), die das Erstellen von Zyklen in der Verzeichnishierarchie nicht zulassen
  • FileValidDataLengthInformation

Vorgang: Legacy-Dateisystemfiltertreiber

Der Filtertreiber muss diesen IRP an den nächstniedrigen Treiber auf dem Stapel übergeben.

Parameter

Ein Dateisystem oder Filtertreiber ruft IoGetCurrentIrpStackLocation für den angegebenen IRP auf, um einen Zeiger auf den eigenen Stapelspeicherort im IRP abzurufen. In den folgenden Parametern zeigt Irp auf den IRP und IrpSp auf den IO_STACK_LOCATION. Der Treiber kann die Informationen verwenden, die in den folgenden Elementen des IRP- und des IRP-Stapelspeicherorts festgelegt sind, um eine festgelegte Dateiinformationsanforderung zu verarbeiten:

  • DeviceObject ist ein Zeiger auf das Zielgerätobjekt.

  • Irp->AssociatedIrp.SystemBuffer verweist auf einen Eingabepuffer, der die festzulegenden Datei- oder Verzeichnisinformationen enthält. Diese Informationen werden in einer der folgenden Strukturen gespeichert:

  • Irp->IoStatus verweist auf eine IO_STATUS_BLOCK-Struktur, die die endgültige Vervollständigung status und Informationen zum angeforderten Vorgang empfängt. Weitere Informationen finden Sie in der Beschreibung des IoStatusBlock-Parameters in ZwSetInformationFile.

  • IrpSp->FileObject zeigt auf das Dateiobjekt, das DeviceObject zugeordnet ist. Dieser Parameter enthält einen Zeiger auf das Feld RelatedFileObject , das ebenfalls eine FILE_OBJECT-Struktur ist. Das Feld RelatedFileObject der FILE_OBJECT-Struktur ist während der Verarbeitung von IRP_MJ_SET_INFORMATION ungültig und sollte nicht verwendet werden.

  • IrpSp->MajorFunction* ist auf IRP_MJ_SET_INFORMATION festgelegt.

  • IrpSp->MinorFunction* kann IRP_MN_KERNEL_CALL werden, wenn Irp-Parameters.SetFile.FileInformationClass>FileValidDataLengthInformation ist. Dieser Code gibt an, dass die Quelle der Anforderung eine vertrauenswürdige Kernelkomponente ist, sodass Treiber Sicherheitsüberprüfungen umgehen können.

  • IrpSp->Parameters.SetFile.AdvanceOnly ist ein Flag für Dateiendevorgänge. Dieses Flag bestimmt die Verwendung des EndOfFile-MembersFILE_END_OF_FILE_INFORMATION-Struktur , wenn FileInformationClassFileEndOfFileInformation ist. Bei TRUE wird eine neue gültige Datenlänge für die Datei nur dann von EndOfFile festgelegt, wenn die aktuell gültige Datenlänge erhöht wird. Bei FALSE wird eine neue Dateigröße von EndOfFile festgelegt.

  • IrpSp->Parameters.SetFile.ClusterCount ist für die Systemverwendung reserviert.

  • IrpSp->Parameters.SetFile.DeleteHandle ist für die Systemverwendung reserviert.

  • IrpSp->Parameters.SetFile.FileInformationClass gibt den Typ der Informationen an, die für die Datei festgelegt werden sollen, und kann einer der folgenden Werte sein.

    Wert Bedeutung
    FileAllocationInformation Legen Sie FILE_ALLOCATION_INFORMATION für die Datei fest.
    FileBasicInformation Legen Sie FILE_BASIC_INFORMATION für die Datei fest.
    FileDispositionInformation Legen Sie FILE_DISPOSITION_INFORMATION für die Datei fest.
    FileEndOfFileInformation Legen Sie FILE_END_OF_FILE_INFORMATION für die Datei fest.
    FileLinkInformation Legen Sie FILE_LINK_INFORMATION für die Datei fest.
    FilePositionInformation Legen Sie FILE_POSITION_INFORMATION für die Datei fest.
    FileRenameInformation Legen Sie FILE_RENAME_INFORMATION für die Datei fest.
    FileValidDataLengthInformation Legen Sie FILE_VALID_DATA_LENGTH_INFORMATION für die Datei fest. Weitere Informationen finden Sie unter Irp-MinorFunction>.
  • IrpSp->Parameters.SetFile.FileObject ist für Umbenennungs- oder Linkvorgänge vorgesehen. Wenn Irp-AssociatedIrp.SystemBuffer-FileName>> einen vollqualifizierten Dateinamen enthält oder wenn Irp-AssociatedIrp.SystemBuffer-RootDirectory>> nicht NULL ist, ist dieses Element ein Dateiobjektzeiger für das übergeordnete Verzeichnis der Datei, die das Ziel des Vorgangs ist. Andernfalls ist es NULL.

  • IrpSp->Parameters.SetFile.Length ist die Länge des Puffers in Bytes, auf den Irp-AssociatedIrp.SystemBuffer> verweist.

  • IrpSp->Parameters.SetFile.ReplaceIfExists wird auf TRUE festgelegt, um anzugeben, dass eine Datei mit demselben Namen bereits vorhanden ist, sie durch die angegebene Datei ersetzt werden soll. Legen Sie auf FALSE fest, wenn beim Umbenennungsvorgang ein Fehler auftreten soll, wenn eine Datei mit dem angegebenen Namen bereits vorhanden ist.

Hinweise

Das AdvanceOnly-Element wird vom Cache-Manager auf TRUE festgelegt, um das Dateisystem zu benachrichtigen, die aktuell gültige Datenlänge auf dem Datenträger auf die neue gültige Datenlänge in EndOfFile zu ändern. Wenn AdvanceOnlyFALSE ist, wird eine neue Dateigröße im EndOfFile-Element festgelegt, die größer oder kleiner als die aktuelle Dateigröße sein kann.

Weitere Informationen

FILE_ALLOCATION_INFORMATION

FILE_BASIC_INFORMATION

FILE_DISPOSITION_INFORMATION

FILE_END_OF_FILE_INFORMATION

FILE_LINK_INFORMATION

FILE_POSITION_INFORMATION

FILE_RENAME_INFORMATION

FILE_VALID_DATA_LENGTH_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_INFORMATION

ZwSetInformationFile