MRxLowIOSubmit[LOWIO_OP_WRITE] ルーチン
MRxLowIOSubmit[LOWIO_OP_WRITE] ルーチンは、RDBSS によって呼び出され、ネットワーク ミニ リダイレクターに書き込み要求を発行します。
構文
PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_WRITE];
NTSTATUS MRxLowIOSubmit[LOWIO_OP_WRITE](
_Inout_ PRX_CONTEXT RxContext
)
{ ... }
パラメーター
RxContext [in, out]
RX_CONTEXT 構造体へのポインター。 このパラメーターには、操作を要求している IRP が含まれています。
戻り値
MRxLowIOSubmit[LOWIO_OP_WRITE] は、成功した場合の STATUS_SUCCESS や、次のいずれかのような該当する NTSTATUS 値を返します。
リターン コード | 説明 |
---|---|
STATUS_FILE_CLOSED | FCB 構造体は取得されましたが、関連付けられている SRV_OPEN 構造体は閉じられています。 |
STATUS_INSUFFICIENT_RESOURCES | 要求を完了するためのリソースが不足していました。 |
STATUS_INVALID_DEVICE_REQUEST | 無効なデバイス要求が指定されました。 |
STATUS_INVALID_PARAMETER | RxContext に無効なパラメータが指定されました。 |
STATUS_NOT_IMPLEMENTED | このルーチンは実装されていません。 |
STATUS_NOT_SUPPORTED | 指定された要求は、ネットワーク ミニ リダイレクターではサポートされていません。 |
解説
RDBSS は、IRP_MJ_WRITE 要求の受信に応答して MRxLowIOSubmit[LOWIO_OP_WRITE] を呼び出します。
MRxLowIOSubmit[LOWIO_OP_WRITE] を呼び出す前に、RDBSS は RxContext パラメーターが指す RX_CONTEXT 構造体の次のメンバーを変更します。
LowIoContext.Operation メンバーが LOWIO_OP_WRITE に設定されています。
LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドに設定されます。
LowIoContext.ParamsFor.ReadWrite.Key メンバーは IrpSp->Parameters.Read.Key の値に設定されます。
ParamsFor.ReadWrite.Flags メンバーは、Irp->Flags が IRP_PAGING_IO ビットをオンにしている場合、LOWIO_READWRITEFLAG_PAGING_IO ビットが設定されます。
ParamsFor.ReadWrite.Buffer メンバーは、IoWriteAccess 用にロックされているユーザー バッファーに設定されます。
LowIoContext.ParamsFor.ReadWrite.ByteCount メンバーは IrpSp->Parameters.Write.Length の値に設定されます。
通常、書き込み要求は、ネットワーク ミニ リダイレクターによって非同期操作として実装されます。これにはかなりの時間がかかる可能性があるためです。 通常、この操作は、リモート サーバーへのネットワーク要求の送信で構成されます。 応答は、サーバーで書き込み要求が完了したときに取得されます。 これは、ローカルで開始されたキャンセルを処理するために、ネットワーク ミニ リダイレクターがコンテキストを登録する必要がある操作の例です。
MRxLowIOSubmit[LOWIO_OP_WRITE] ルーチンが処理されている間、RX_CONTEXTの LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドを示していることが保証されます。 LowIoContext.ResourceThreadId メンバーを使用して、別のスレッドの代わりに FCB 構造を解放できます。 非同期ルーチンが完了すると、初期スレッドから取得された FCB 構造体を解放できます。 FCB 構造体を解放するには、RxReleaseFcbResourceForThreadInMRx を呼び出します。
要件
対象プラットフォーム |
デスクトップ |
ヘッダー |
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]