IRP_MJ_SET_INFORMATION (FS 和篩選驅動程式)

傳送時

I/O 管理員、其他作業系統元件和其他內核模式驅動程式會傳送IRP_MJ_SET_INFORMATION要求。 例如,當使用者模式應用程式呼叫 Win32 函式,例如 SetEndOfFile 或核心模式元件呼叫 ZwSetInformationFile 時,可以傳送它。

作業:檔案系統驅動程式

文件系統驅動程式應該擷取和譯碼檔案物件,以判斷它是否代表開啟的使用者檔案或目錄。 如果這樣做,文件系統驅動程式應該適當地處理要求,並完成 IRP。

您可以在檔案 目錄上設定下列型態的資訊:

  • FileBasicInformation
  • FileDispositionInformation
  • FileLinkInformation (,允許在目錄階層中建立迴圈的文件系統)
  • FilePositionInformation
  • FileRenameInformation

下列資訊類型只能在檔案上設定:

  • FileAllocationInformation
  • FileEndOfFileInformation
  • FileLinkInformation:例如,針對文件系統 (,不允許在目錄階層中建立迴圈的 NTFS)
  • FileValidDataLengthInformation

作業:舊版文件系統篩選驅動程式

篩選驅動程式必須將此 IRP 向下傳遞至堆疊上的下一個較低驅動程式。

參數

文件系統或篩選驅動程式會針對指定的 IRP 呼叫 IoGetCurrentIrpStackLocation ,以取得 IRP 中本身堆疊位置的指標。 在下列參數中, Irp 會指向 IRP而 IrpSp 指向 IO_STACK_LOCATION。 驅動程式可以使用下列 IRP 成員和 IRP 堆疊位置中設定的資訊來處理設定的檔案資訊要求:

  • DeviceObject 是目標裝置物件的指標。

  • Irp->AssociatedIrp.SystemBuffer 指向包含要設定之檔案或目錄資訊的輸入緩衝區。 此資訊會儲存在下列其中一個結構中:

  • Irp->IoStatus 指向接收最終完成狀態和所要求作業相關信息 的IO_STATUS_BLOCK 結構。 如需詳細資訊,請參閱 IoStatusBlock 參數對 ZwSetInformationFile 的描述。

  • IrpSp->FileObject 指向與 DeviceObject 相關聯的檔案物件。 此參數包含 RelatedFileObject 字段的指標,這也是FILE_OBJECT結構。 FILE_OBJECT 結構的 RelatedFileObject 字段在處理IRP_MJ_SET_INFORMATION期間無效,不應使用。

  • IrpSp->MajorFunction* 設定為 IRP_MJ_SET_INFORMATION。

  • IrpSp->當Irp-Parameters.SetFile.FileInformationClass>FileValidDataLengthInformation 時,可以IRP_MN_KERNEL_CALL MinorFunction* 。 此程式代碼表示要求的來源是受信任的核心元件,可讓驅動程式略過安全性檢查。

  • IrpSp->Parameters.SetFile.AdvanceOnly 是文件尾作業的旗標。 當 FileInformationClassFileEndOfFileInformation 時,這個旗標會決定 EndOfFile 成員FILE_END_OF_FILE_INFORMATION結構的用法。 如果為 TRUE,則只有當檔案增加目前的有效數據長度時,才會從 EndOfFile 設定新的有效數據長度。 如果為 FALSE,則會從 EndOfFile 設定新的檔案大小。

  • IrpSp->Parameters.SetFile.ClusterCount 保留供系統使用。

  • IrpSp->Parameters.SetFile.DeleteHandle 保留供系統使用。

  • IrpSp->Parameters.SetFile.FileInformationClass 指出要為檔案設定的資訊類型,而且可以是下列其中一個值。

    意義
    FileAllocationInformation 設定檔案 FILE_ALLOCATION_INFORMATION
    FileBasicInformation 為檔案設定 FILE_BASIC_INFORMATION
    FileDispositionInformation 設定檔案 FILE_DISPOSITION_INFORMATION
    FileEndOfFileInformation 設定檔案 FILE_END_OF_FILE_INFORMATION
    FileLinkInformation 設定 檔案FILE_LINK_INFORMATION
    FilePositionInformation 設定 檔案FILE_POSITION_INFORMATION
    FileRenameInformation 設定 檔案FILE_RENAME_INFORMATION
    FileValidDataLengthInformation 為檔案設定 FILE_VALID_DATA_LENGTH_INFORMATION 。 如需詳細資訊,請參閱 Irp-MinorFunction>
  • IrpSp->Parameters.SetFile.FileObject 用於重新命名或鏈接作業。 如果 Irp-AssociatedIrp.SystemBuffer-FileName>> 包含完整檔名,或者如果 Irp-AssociatedIrp.SystemBuffer-RootDirectory>> 為非 NULL,則此成員是作業目標檔案之父目錄的檔案物件指標。 否則為 NULL

  • IrpSp->Parameters.SetFile.LengthIrp-AssociatedIrp.SystemBuffer> 所指向緩衝區的長度,以位元組為單位。

  • IrpSp->Parameters.SetFile.ReplaceIfExists 會設定為 TRUE ,以指定如果具有相同名稱的檔案已經存在,則應以指定的檔案取代。 如果具有指定名稱的檔案已經存在,則重新命名作業應該會失敗,則設定為 FALSE

備註

Cache Manager 會將 AdvanceOnly 成員設定為 TRUE ,以通知文件系統將磁碟上的目前有效數據長度前進到 EndOfFile 中新的有效數據長度。 如果 AdvanceOnlyFALSE則會在 EndOfFile 成員中設定新的檔案大小,其大小可以大於或小於目前的檔案大小。

另請參閱

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