MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] ルーチン
MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] ルーチンは、ネットワーク ミニ リダイレクターがファイル オブジェクトの排他ロックを開くよう要求するために RDBSS によって呼び出されます。
構文
PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK];
NTSTATUS MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK](
_Inout_ PRX_CONTEXT RxContext
)
{ ... }
パラメーター
RxContext [in, out]
RX_CONTEXT 構造体へのポインター。 このパラメーターには、操作を要求している IRP が含まれています。
戻り値
MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] は、成功した場合の STATUS_SUCCESS や、次のいずれかのような該当する NTSTATUS 値を返します。
リターン コード | 説明 |
---|---|
STATUS_CONNECTION_DISCONNECTED | 接続が切断されました。 |
STATUS_INSUFFICIENT_RESOURCES | 要求を完了するためのリソースが不足していました。 |
STATUS_INVALID_NETWORK_RESPONSE | リモート サーバーから無効な応答を受信しました。 |
STATUS_INVALID_PARAMETER | RxContext に無効なパラメータが指定されました。 |
STATUS_LINK_FAILED | リモート サーバーに再接続して要求を完了できませんでした。 |
STATUS_NOT_IMPLEMENTED | このルーチンは実装されていません。 |
STATUS_SHARING_VIOLATION | 共有違反が発生しました。 |
STATUS_UNSUCCESSFUL | 呼び出しに失敗しました。 |
解説
RDBSS は、IrpSp->Flags にSL_EXCLUSIVE_LOCK ビットが設定されている場合、IRP_MN_LOCKのマイナー コードで IRP_MJ_LOCK_CONTROL 要求を受信した場合に応答して MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] を呼び出します。
MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] を呼び出す前に、RDBSS は RxContext パラメーターが指す RX_CONTEXT 構造体の次のメンバーを変更します。
LowIoContext.Operation メンバーが LOWIO_OP_EXCLUSIVELOCK に設定されています。
LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドに設定されます。
LowIoContext.ParamsFor.Locks.ByteOffset メンバーは IrpSp->Parameters.LockControl.ByteOffset.QuadPart の値に設定されます。
LowIoContext.ParamsFor.Locks.Key メンバーは IrpSp->Parameters.LockControl.Key の値に設定されます。
LowIoContext.ParamsFor.Locks.Flags メンバーは IrpSp->Flags の値に設定されます。
LowIoContext.ParamsFor.Locks.Length メンバーは IrpSp->Parameters.LockControl.Length.QuadPart の値に設定されます。
RX_CONTEXT 構造体の LowIoContext.Operation メンバーは、実行する低速 I/O 操作を指定します。 この LowIoContext.Operation メンバーは、要求された低速 I/O 操作を区別するために使用できるため、複数の低速 I/O ルーチンがネットワーク ミニリダイレクターの同じルーチンを指すことができます。 たとえば、ファイル ロックに関連するすべての I/O 呼び出しは、ネットワーク ミニ リダイレクターで同じ低速 I/O ルーチンを呼び出すことができ、そのルーチンは LowIoContext.Operation メンバーを使用して、要求されたロック操作とロック解除操作を区別できます。
MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] ルーチンの完了に時間がかかる場合、ネットワーク ミニ リダイレクター ドライバーは、ネットワーク通信を開始する前に FCB 構造体を解放する必要があります。 FCB 構造体を解放するには、RxReleaseFcbResourceForThreadInMRx を呼び出します。 MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] ルーチンが処理されている間、RX_CONTEXTの LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドを示していることが保証されます。
RX_CONTEXTの LowIoContext.ResourceThreadId メンバーを使用して、別のスレッドの代わりに FCB 構造体を解放できます。 非同期ルーチンが完了すると、初期スレッドから取得された FCB 構造体を解放できます。
要件
対象プラットフォーム |
デスクトップ |
ヘッダー |
Mrx.h (Mrx.h を含む) |
関連項目
MRxLowIOSubmit[LOWIO_OP_FSCTL]
MRxLowIOSubmit[LOWIO_OP_IOCTL]
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]