MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] ルーチン
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] ルーチンは、ネットワーク ミニ リダイレクターがファイル オブジェクトに保持されている複数のロックを削除するように要求するために RDBSS によって呼び出されます。
構文
PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE];
NTSTATUS MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE](
_Inout_ PRX_CONTEXT RxContext
)
{ ... }
パラメーター
RxContext [in, out]
RX_CONTEXT 構造体へのポインター。 このパラメーターには、操作を要求している IRP が含まれています。
戻り値
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] は、成功した場合の 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 は、IRP_MN_UNLOCK_ALL または IRP_MN_UNLOCK_ALL_BY_KEY のマイナー コードで IRP_MJ_LOCK_CONTROL 要求を受信した場合に応答して MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] を呼び出します。
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] を呼び出す前に、RDBSS は RxContext パラメーターが指す RX_CONTEXT 構造体の次のメンバーを変更します。
LowIoContext.Operation メンバーが LOWIO_OP_UNLOCK_MULTIPLE に設定されています。
LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドに設定されます。
LowIoContext.ParamsFor.Locks.LockList メンバーは、LOWIO_LOCK_LIST 要素の一覧に設定されます。 各要素は、ロックを解除する範囲を指定します。
ロック解除するバイト範囲は、RX_CONTEXT 構造体の LowIoContext.ParamsFor.Locks.LockList メンバーで指定されます。 LOWIO_LOCK_LIST 構造体は次のように定義されます。
typedef struct _LOWIO_LOCK_LIST {
struct _LOWIO_LOCK_LIST *Next;
ULONG LockNumber;
RXVBO ByteOffset;
LONGLONG Length;
ULONG Key;
BOOLEAN ExclusiveLock;
} LOWIO_LOCK_LIST, *PLOWIO_LOCK_LIST;
RX_CONTEXTの LowIoContext.Operation メンバーは、実行する低速 I/O 操作を指定します。 この LowIoContext.Operation メンバーは、要求された低速 I/O 操作を区別するために使用できるため、複数の低速 I/O ルーチンがネットワーク ミニリダイレクターの同じルーチンを指すことができます。 たとえば、ファイル ロックに関連するすべての I/O 呼び出しは、ネットワーク ミニ リダイレクターで同じ低速 I/O ルーチンを呼び出すことができ、このルーチンは LowIoContext.Operation メンバーを使用して、要求されたロック操作とロック解除操作を区別できます。
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] ルーチンの完了に時間がかかる場合、ネットワーク ミニ リダイレクター ドライバーは、ネットワーク通信を開始する前に FCB 構造体を解放する必要があります。 FCB 構造体を解放するには、RxReleaseFcbResourceForThreadInMRx を呼び出します。 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] ルーチンが処理されている間、RX_CONTEXTの LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドを示していることが保証されます。
RX_CONTEXTの LowIoContext.ResourceThreadId メンバーを使用して、別のスレッドの代わりに FCB 構造体を解放できます。 非同期ルーチンが完了すると、初期スレッドから取得された FCB 構造体を解放できます。
要件
対象プラットフォーム |
デスクトップ |
ヘッダー |
Mrx.h (Mrx.h を含む) |
関連項目
MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]
MRxLowIOSubmit[LOWIO_OP_FSCTL]
MRxLowIOSubmit[LOWIO_OP_IOCTL]
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK]