共用方式為


IRP_MJ_FILE_SYSTEM_CONTROL (FS 和篩選驅動程式)

傳送時

I/O 管理員、其他作業系統元件和其他核心模式驅動程式會傳送IRP_MJ_FILE_SYSTEM_CONTROL要求。 例如,當使用者模式應用程式呼叫 Win32 DeviceIoControl 函式以傳送檔系統 I/O 控制項 (FSCTL) 要求時,可以傳送它。

作業:檔案系統驅動程式

檔系統驅動程式或辨識器應該檢查次要函式程式代碼,以判斷所要求的檔系統控制作業。

檔案系統驅動程式應該處理下列次要函式代碼:

程式碼 描述
IRP_MN_KERNEL_CALL 此要求與下列) 所述IRP_MN_USER_FS_REQUEST (相同,不同之處在於要求的來源是受信任的核心元件。
IRP_MN_MOUNT_VOLUME 指出磁碟區掛接要求。 如果文件系統驅動程式收到此 IRP,其格式不符合文件系統的磁碟區,則檔系統驅動程式應該傳回STATUS_UNRECOGNIZED_VOLUME。
IRP_MN_USER_FS_REQUEST 表示 FSCTL 要求,可能是代表呼叫 Microsoft Win32 DeviceIoControl 函式的使用者模式應用程式,或代表名為 ZwDeviceIoControlFileIoBuildDeviceIoControlRequest 的核心模式元件。 如需 FSCTL 要求的詳細資訊,請參閱 Windows SDK 檔中的「裝置輸入和輸出控制代碼」。
IRP_MN_VERIFY_VOLUME 指出磁碟區驗證要求。 對於抽取式媒體,檔系統在偵測到媒體已移除並傳回時,必須驗證磁碟區,以確保它仍是相同的已知磁碟區。 如果磁碟區已變更,文件系統應該使所有未處理的句柄失效。 如果這個新媒體上的文件系統已變更,它也應該傳回錯誤。 此要求最常用於磁碟驅動器。

檔案系統辨識器必須處理下列次要函式程式代碼:

程式碼 描述
IRP_MN_LOAD_FILE_SYSTEM 表示載入檔案系統要求。

檔系統驅動程式或辨識器應該執行要求的作業,然後完成 IRP。

作業:舊版檔案系統篩選驅動程式

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

參數

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

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

  • Irp->AssociatedIrp.SystemBuffer 指向系統提供的輸入緩衝區,以傳遞給目標磁碟區的文件系統或文件系統篩選驅動程式。 用於METHOD_BUFFERED或METHOD_DIRECT I/O。 是否需要此參數,取決於特定的文件系統控制項程式代碼。

  • Irp->IoStatus 指向 IO_STATUS_BLOCK結構, 該結構會接收最終完成狀態和所要求作業的相關信息。

  • Irp->MdlAddress 是記憶體描述項清單的位址, (MDL) 描述要傳遞給目標磁碟區的檔案系統或文件系統篩選驅動程式的輸出緩衝區。 用於METHOD_DIRECT I/O。 是否需要此參數,取決於特定的 I/O 控制項程式代碼。

  • Irp->UserBuffer 指向呼叫端提供的輸出緩衝區,以傳遞至目標磁碟區的文件系統或文件系統篩選驅動程式。 用於METHOD_BUFFERED或METHOD_NEITHER I/O。 此參數是否為選擇性或必要,取決於特定的 I/O 控件程式代碼。

  • IrpSp->FileObject 指向與 DeviceObject 相關聯的檔案物件。

    IrpSp-FileObject> 參數包含 RelatedFileObject 字段的指標,這也是FILE_OBJECT結構。 FILE_OBJECT 結構的 RelatedFileObject 字段在處理IRP_MJ_FILE_SYSTEM_CONTROL期間無效,不應使用。

  • IrpSp->旗標 可以設定為 IRP_MN_VERIFY_VOLUME的SL_ALLOW_RAW_MOUNT。

  • IrpSp->MajorFunction 設定為 IRP_MJ_FILE_SYSTEM_CONTROL。

  • IrpSp->MinorFunction 可以設定為下列其中一個值。

    • IRP_MN_KERNEL_CALL
    • IRP_MN_LOAD_FILE_SYSTEM
    • IRP_MN_MOUNT_VOLUME
    • IRP_MN_USER_FS_REQUEST
    • IRP_MN_VERIFY_VOLUME
  • IrpSp->Parameters.FileSystemControl.FsControlCode 是要傳遞至目標磁碟區的文件系統或文件系統篩選驅動程式的 FSCTL 函式程序代碼。 僅供IRP_MN_USER_FS_REQUEST使用。

    如需IOCTL和 FSCTL 要求的詳細資訊,請參閱 Windows SDK 檔中 的使用 I/O 控制代碼 和「裝置輸入和輸出控制代碼」。

  • IrpSp->Parameters.FileSystemControl.InputBufferLengthIrp-AssociatedIrp.SystemBuffer> 所指向之緩衝區位元組的大小。

  • IrpSp->Parameters.FileSystemControl.OutputBufferLengthIrp-UserBuffer> 所指向之緩衝區的位元組大小。

  • IrpSp->Parameters.FileSystemControl.Type3InputBuffer 是使用 METHOD_NEITHER的核心模式要求輸入緩衝區。

  • IrpSp->Parameters.MountVolume.DeviceObject 指向要掛接磁碟區之實際裝置的裝置物件。 檔系統篩選驅動程式不應使用此參數。

  • IrpSp->Parameters.MountVolume.Vpb 指向要掛接之磁碟區的磁碟區參數區塊 (VPB) 。 支援卸除式媒體的文件系統可能會將先前使用的 VPB 取代為此參數中傳遞的檔案。 在這類文件系統上,掛接磁碟區之後,就無法再假設此指標有效。 篩選這些文件系統的文件系統篩選驅動程式應該使用此參數,如下所示:篩選應該先將 IrpSp-Parameters.MountVolume.Vpb-RealDevice>> 的值儲存到較低層級的驅動程式。 成功掛接磁碟區之後,篩選條件可以使用存儲設備對象的這個指標來取得正確的 VPB 指標。

  • IrpSp->Parameters.VerifyVolume.DeviceObject 指向要驗證磁碟區的裝置物件。

  • IrpSp->Parameters.VerifyVolume.Vpb 指向要驗證之磁碟區的 VPB。

另請參閱

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoGetCurrentIrpStackLocation

IRP

ZwDeviceIoControlFile