IRP_MJ_LOCK_CONTROL (FS 和篩選驅動程式)

傳送時

I/O 管理員、其他作業系統元件和其他內核模式驅動程式會傳送IRP_MJ_LOCK_CONTROL要求。

作業:檔案系統驅動程式

文件系統驅動程式應該擷取和譯碼檔案物件,以判斷目標裝置物件是否為文件系統的控制裝置物件。 如果是,文件系統驅動程式應該適當地完成 IRP,而不需處理鎖定要求。

否則,如果要求已在代表使用者檔案開啟的句柄上發出,則文件系統驅動程式應該執行次要函式程式代碼所指示的作業,並完成 IRP。 如果沒有,驅動程式應該會失敗 IRP。

以下是有效的次要函式程式代碼:

程式碼 描述
IRP_MN_LOCK 表示位元組範圍鎖定要求,可能代表呼叫 Win32 LockFile 函式的使用者模式應用程式。
IRP_MN_UNLOCK_ALL 表示釋放檔案所有位元組範圍鎖定的要求,通常是因為檔案對象的最後一個未處理句柄正在關閉。
IRP_MN_UNLOCK_ALL_BY_KEY 指出以指定的索引鍵值釋放所有位元組範圍鎖定的要求。
IRP_MN_UNLOCK_SINGLE 表示釋放單一位元組範圍鎖定的要求,可能代表呼叫Win32 UnlockFile 函式的使用者模式應用程式。

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

文件系統篩選驅動程式應該在執行任何必要的處理之後,將 IRP 向下傳遞至堆疊上的下一個較低驅動程式。

參數

文件系統或篩選驅動程式會使用指定的 IRP 呼叫 IoGetCurrentIrpStackLocation ,以取得 IRP 中本身 堆疊位置 的指標,如下列清單所示的 IrpSp。 (IRP 會顯示為 Irp.) 驅動程式可以使用 IRP 的下列成員中所設定的資訊,以及處理鎖定控制要求的 IRP 堆疊位置:

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

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

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

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

  • IrpSp->旗標 可以是下列一或多個值:

旗標 意義
SL_EXCLUSIVE_LOCK 如果設定此旗標,則會要求獨佔位元組範圍鎖定。 否則,會要求共用鎖定。
SL_FAIL_IMMEDIATELY 如果設定此旗標,如果無法立即授與鎖定要求,則鎖定要求應該會失敗。
  • IrpSp->MajorFunction 設定為 IRP_MJ_LOCK_CONTROL。

  • IrpSp->MinorFunction 設定為下列其中一個值:

    • IRP_MN_LOCK
    • IRP_MN_UNLOCK_ALL
    • IRP_MN_UNLOCK_ALL_BY_KEY
    • IRP_MN_UNLOCK_SINGLE
  • IrpSp->Parameters.LockControl.ByteOffset 是要鎖定或解除鎖定之位元組範圍檔案中的起始位元組位移。

  • IrpSp->Parameters.LockControl.Key 是位元組範圍鎖定的索引鍵。

  • IrpSp->Parameters.LockControl.Length 是要鎖定或解除鎖定之位元組範圍的長度,以位元組為單位。

另請參閱

FltProcessFileLock

FsRtlProcessFileLock

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP