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 是要鎖定或解除鎖定之位元組範圍的長度,以位元組為單位。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應