IRP_MJ_DIRECTORY_CONTROL (FS 和篩選驅動程式)

傳送時

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

作業:檔案系統驅動程式

文件系統驅動程式應該檢查次要函式程式碼,以判斷要求哪些目錄控制作業。 以下是有效的次要函式代碼:

程式碼 描述
IRP_MN_QUERY_DIRECTORY 指出目錄查詢要求。 可查詢的信息類型取決於文件系統,但通常包含下列值:FileBothDirectoryInformation、FileDirectoryInformation、FileFullDirectoryInformation、FileIdBothDirectoryInformation、FileIdFullDirectoryInformation、FileNamesInformation、FileObjectIdInformation、FileReparsePointInformation。
IRP_MN_NOTIFY_CHANGE_DIRECTORY 指出要求通知目錄的變更。 通常,文件系統驅動程式通常會在私人佇列中保存 IRP,而不是立即滿足此要求。 當目錄發生變更時,文件系統驅動程式會執行通知,並排入佇列並完成 IRP。 檔系統驅動程式會傳回 FILE_NOTIFY_INFORMATION 結構中的資訊。
IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX 指出要求通知目錄的變更。 通常,文件系統驅動程式通常會在私人佇列中保存 IRP,而不是立即滿足此要求。 當目錄發生變更時,文件系統驅動程式會執行通知,並排入佇列並完成 IRP。 文件系統驅動程式會根據指定的 IrpSp-Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass> 傳回資訊。

注意

FileQuotaInformation 資訊類別已過時。 應該改用IRP_MJ_QUERY_QUOTA

文件系統驅動程式在執行要求的作業之後,應該完成 IRP。

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

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

參數

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

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

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

  • Irp->UserBuffer 指向呼叫端提供的輸出緩衝區,以接收目錄內容的要求資訊。

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

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

  • IrpSp->旗標 可以設定為下列一或多個IRP_MN_QUERY_DIRECTORY值。

旗標 意義
SL_INDEX_SPECIFIED 開始掃描目錄中索引由 IrpSp-Parameters.QueryDirectory.FileIndex> 提供的專案。
SL_RESTART_SCAN 在目錄中的第一個項目開始掃描。 如果未設定此旗標,請從先前的IRP_MN_QUERY_DIRECTORY要求繼續掃描。
SL_RETURN_SINGLE_ENTRY 只傳回找到的第一個專案。
SL_RETURN_ON_DISK_ENTRIES_ONLY 指示執行目錄虛擬化或 Just-In-Time 擴充的任何篩選,只將要求傳遞至文件系統,並傳回目前位於磁碟上的專案。

您可以針對IRP_MN_NOTIFY_CHANGE_DIRECTORY設定下列旗標:

旗標 意義
SL_WATCH_TREE 如果也應該監看此目錄的所有子目錄,請將 設定為 TRUE 。 如果只有目錄本身要監看,則設定為 FALSE
  • IrpSp->MajorFunction 設定為 IRP_MJ_DIRECTORY_CONTROL。

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

    • IRP_MN_QUERY_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX
  • IrpSp->Parameters.QueryDirectory.FileIndex 是開始目錄掃描之檔案的索引。 如果未設定SL_INDEX_SPECIFIED旗標,則會忽略此值。 此參數無法在任何 Win32 函式或核心模式支援例程中指定。 目前只有 NT 虛擬 DOS 電腦 (NTVDM) 才使用,只有 32 位 NT 型平臺上存在。 檔案索引未定義給文件系統,例如NTFS,其中父目錄中的檔案位置並未固定,而且可以隨時變更以維護排序順序。

  • IrpSp->Parameters.QueryDirectory.FileInformationClass 設定為下列其中一個值。

    意義
    FileBothDirectoryInformation 傳回每個檔案 的FILE_BOTH_DIR_INFORMATION 結構。
    FileDirectoryInformation 傳回每個檔案 的FILE_DIRECTORY_INFORMATION 結構。
    FileFullDirectoryInformation 傳回每個檔案 的FILE_FULL_DIR_INFORMATION」結構。
    FileIdBothDirectoryInformation 傳回每個檔案 的FILE_ID_BOTH_DIR_INFORMATION 結構。
    FileIdFullDirectoryInformation 傳回每個檔案 的FILE_ID_FULL_DIR_INFORMATION 結構。
    FileNamesInformation 傳回每個檔案 的FILE_NAMES_INFORMATION 結構。
    FileObjectIdInformation 傳回每個檔案 的FILE_OBJECTID_INFORMATION 結構。
    FileQuotaInformation 已過時。 請改用 IRP_MJ_QUERY_QUOTA
    FileReparsePointInformation 傳回目錄的單一 FILE_REPARSE_POINT_INFORMATION 結構。
  • IrpSp->Parameters.QueryDirectory.FileName 是指定目錄中檔案的選擇性名稱。

  • IrpSp->Parameters.QueryDirectory.LengthIrp-UserBuffer> 所指向之緩衝區的位元組長度。

  • IrpSp->Parameters.NotifyDirectory.LengthIrp-UserBuffer> 所指向之緩衝區的位元組長度。

  • IrpSp->Parameters.NotifyDirectory.CompletionFilter:如需詳細資訊,請參閱 FsRtlNotifyFullChangeDirectoryCompletionFilter 參數描述。

  • IrpSp->Parameters.NotifyDirectoryEx.LengthIrp-UserBuffer> 所指向之緩衝區的位元組長度。

  • IrpSp->Parameters.NotifyDirectoryEx.CompletionFilter:如需詳細資訊,請參閱 FsRtlNotifyFullChangeDirectoryCompletionFilter 參數描述。

  • IrpSp->Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass 是下列其中一個值。

    意義
    DirectoryNotifyInformation 傳回目錄變更 FILE_NOTIFY_INFORMATION 結構。
    DirectoryNotifyExtendedInformation 傳回每個目錄變更 的FILE_NOTIFY_EXTENDED_INFORMATION 結構。
    DirectoryNotifyFullInformation 傳回每個目錄變更 的FILE_NOTIFY_FULL_INFORMATION 結構。

另請參閱

FILE_BOTH_DIR_INFORMATION

FILE_DIRECTORY_INFORMATION

FILE_FULL_DIR_INFORMATION

FILE_ID_BOTH_DIR_INFORMATION

FILE_ID_FULL_DIR_INFORMATION

FILE_NAMES_INFORMATION

FILE_OBJECTID_INFORMATION

FILE_REPARSE_POINT_INFORMATION

FsRtlNotifyFullChangeDirectory

FILE_NOTIFY_INFORMATION

FILE_NOTIFY_EXTENDED_INFORMATION

FILE_NOTIFY_FULL_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_QUOTA

ZwQueryDirectoryFile

ZwQueryDirectoryFileEx