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 関数を呼び出したユーザー モード アプリケーションの代わりに、1 バイト範囲のロックを解放する要求を示します。 |
操作: レガシー ファイル システム フィルター ドライバー
ファイル システム フィルター ドライバーは、必要な処理を実行した後、スタック上の 1 つ下のドライバーに IRP を渡す必要があります。
パラメーター
ファイル システムまたはフィルター ドライバーの呼び出し IoGetCurrentIrpStackLocation 指定された IRP を使用して、独自の IRP へのポインターを取得します。stack location IRP では、次のリストに示されています。IrpSp. (IRP は次のように表示されますIrp.) ドライバーは、ロック制御要求を処理する際に、IRP の次のメンバーと IRP スタックの場所に設定されている情報を使用できます。
DeviceObject ターゲット デバイス オブジェクトへのポインターです。
Irp->Ioステータス は、最終的な完了ステータスと要求された操作に関する情報を受け取る IO_STATUS_BLOCK構造体を指します。
IrpSp->FileObject は、DeviceObject に関連付けられているファイル オブジェクトを指します。
IrpSp->FileObject パラメーターには、FILE_OBJECT構造体でもある RelatedFileObject フィールドへのポインターが含まれています。 RelatedFileObject FILE_OBJECT 構造体のフィールドは、IRP_MJ_LOCK_CONTROL の処理中は無効であるため、使用しないでください。
IrpSp->フラグ 次の 1 つ以上の値を指定できます。
フラグ | 意味 |
---|---|
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 ロックまたはロック解除するバイト範囲の長さ (バイト単位) です。