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 是文件尾作業的旗標。 當 FileInformationClass 為 FileEndOfFileInformation 時,這個旗標會決定 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.Length 是 Irp-AssociatedIrp.SystemBuffer> 所指向緩衝區的長度,以位元組為單位。
IrpSp->Parameters.SetFile.ReplaceIfExists 會設定為 TRUE ,以指定如果具有相同名稱的檔案已經存在,則應以指定的檔案取代。 如果具有指定名稱的檔案已經存在,則重新命名作業應該會失敗,則設定為 FALSE 。
備註
Cache Manager 會將 AdvanceOnly 成員設定為 TRUE ,以通知文件系統將磁碟上的目前有效數據長度前進到 EndOfFile 中新的有效數據長度。 如果 AdvanceOnly 為 FALSE, 則會在 EndOfFile 成員中設定新的檔案大小,其大小可以大於或小於目前的檔案大小。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應