PMRX_CALLDOWN コールバック関数 (mrx.h)
このコールバックは、RDBSS によって呼び出され、ネットワーク ミニ リダイレクターが指定された IRP に基づいてアクションを実行するように要求します。
構文
PMRX_CALLDOWN PmrxCalldown;
NTSTATUS PmrxCalldown(
[in, out] IN OUT PRX_CONTEXT RxContext
)
{...}
パラメーター
[in, out] RxContext
RX_CONTEXT構造体へのポインター。 このパラメーターには、操作を要求している IRP が含まれています。
戻り値
このコールバックは、成功したSTATUS_SUCCESS、または次のような適切な NTSTATUS 値を返します。
リターン コード | 説明 |
---|---|
STATUS_ACCESS_DENIED | ネットワーク ミニ リダイレクターを停止または開始するための要求が行われましたが、呼び出し元にこの操作に対する適切なセキュリティが不足していました。 |
STATUS_BUFFER_OVERFLOW | 拡張属性情報を受け取るバッファーが小さすぎます。 この戻り値は成功と見なされ、RxContext パラメーターによって指されるRX_CONTEXT構造体の Info.Buffer メンバーに、可能な限り有効なデータを返す必要があります。 |
STATUS_BUFFER_TOO_SMALL | バッファーが小さすぎて、要求されたデータを受信できません。 この値が返された場合、RxContext パラメーターによって指されるRX_CONTEXT構造体の InformationToReturn メンバーは、呼び出しが成功するために予想されるバッファーの最小サイズに設定する必要があります。 |
STATUS_CONNECTION_DISCONNECTED | 接続が切断されました。 |
STATUS_EA_CORRUPT_ERROR | リモート サーバーから無効な拡張属性情報が受信されました。 |
STATUS_EA_TOO_LARGE | 渡される拡張属性情報は、リモート共有でサポートされているサイズよりも大きくなります。 |
STATUS_FILE_CLOSED | FCB 構造体は取得されましたが、関連付けられているSRV_OPEN構造体は閉じられました。 |
STATUS_INSUFFICIENT_RESOURCES | 操作を完了するためのリソースが不足していました。 |
STATUS_INTERNAL_ERROR | ネットワーク ミニ リダイレクターで内部エラーが発生しました。 |
STATUS_INVALID_BUFFER_SIZE | 要求されたバッファー サイズが大きすぎます。 |
STATUS_INVALID_DEVICE_REQUEST | 無効なデバイス要求がネットワーク ミニ リダイレクターに送信されました。 |
STATUS_INVALID_NETWORK_RESPONSE | リモート サーバーから無効な応答が受信されました。 |
STATUS_INVALID_PARAMETER | RxContext で無効なパラメーターが指定されました。 |
STATUS_LINK_FAILED | リモート サーバーに再接続して要求を完了しようとしましたが失敗しました。 |
STATUS_MORE_PROCESSING_REQUIRED | ネットワーク ミニ リダイレクターは、このオープン要求の折りたたみを無効にするために、この値を返します。 |
STATUS_NETWORK_ACCESS_DENIED | ネットワーク アクセスが拒否されました。 このエラーは、ネットワーク ミニ リダイレクターが読み取り専用共有で新しいファイルを開くように求められた場合に返される可能性があります。 |
STATUS_NETWORK_NAME_DELETED | ネットワーク名が削除されました。 |
STATUS_NONEXISTENT_EA_ENTRY | ファイル オブジェクトに拡張属性がなく、ユーザーが拡張属性インデックスを指定しました。 |
STATUS_NOT_IMPLEMENTED | 要求された機能 (リモート ブートやリモート ページ ファイルなど) は実装されていません。 |
STATUS_NOT_SUPPORTED | 要求された機能 (拡張属性など) はサポートされていません。 |
STATUS_OBJECT_NAME_COLLISION | ネットワーク ミニ リダイレクターは、既に存在するファイルを作成するように求められました。 |
STATUS_OBJECT_NAME_NOT_FOUND | オブジェクト名が見つかりませんでした。 このエラーは、ネットワーク ミニ リダイレクターが存在しないファイルを開くように求められた場合に返される可能性があります。 |
STATUS_OBJECT_PATH_NOT_FOUND | オブジェクト パスが見つかりませんでした。 NTFS ストリーム オブジェクトが要求され、リモート ファイル システムがストリームをサポートしていない場合、このエラーが返される可能性があります。 |
STATUS_ONLY_IF_CONNECTED | SRV_OPEN構造体が接続されていません。 |
STATUS_REDIRECTOR_HAS_OPEN_HANDLES | これはネットワーク ミニ リダイレクターを停止する要求でしたが、リダイレクターには、この時点で停止できないオープン ハンドルがあります。 |
STATUS_REDIRECTOR_NOT_STARTED | これはネットワーク ミニ リダイレクターを停止する要求でしたが、リダイレクターは開始されませんでした。 |
STATUS_REDIRECTOR_STARTED | これはネットワーク ミニ リダイレクターを開始するための要求でしたが、リダイレクターは既に開始されています。 |
STATUS_REPARSE | シンボリック リンクを処理するには、再解析が必要です。 |
STATUS_REQUEST_ABORTED | ネットワーク要求が中止されました。 |
STATUS_RETRY | 操作を再試行する必要があります。 このエラーは、ネットワーク ミニ リダイレクターで共有違反またはアクセス拒否エラーが発生した場合に返される可能性があります。 |
STATUS_SHARING_VIOLATION | 共有違反が発生しました。 |
STATUS_UNSUCCESSFUL | 呼び出しが失敗しました。 |
注釈
MRxCloseSrvOpen ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがSRV_OPEN構造体を閉じるよう要求します。
MRxCloseSrvOpen は、ファイル オブジェクトに対するクリーンアップおよびクローズ操作の一環として RDBSS によって呼び出されます。 ネットワーク ミニ リダイレクターは、ネットワーク経由でファイルを閉じると想定されます。
MRxCloseSrvOpen を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
MajorFunction が IRP_MJ_CLOSE に設定されている
pFcb は、クローズ処理を開始する FCB 構造体に設定されます
pFobx は、クローズ処理を開始する FOBX 構造体に設定されます
RDBSS とネットワーク ミニ リダイレクターは、ユーザーがファイルを閉じるときに、必ずしもSRV_OPEN構造を閉じるとは限りません。 場合によっては、パフォーマンスを向上させるために、ネットワーク ミニ リダイレクターは、サーバーに接続せずに、SRV_OPENとキャッシュされたデータを再利用しようとする場合があります。 一部の Microsoft Windows アプリケーションでは、ファイルを開いて読み取り、閉じてから、同じファイルをすばやく再度開く動作が示されます。 このような場合、SRV_OPEN構造を再利用すると、パフォーマンスが向上します。
RDBSS は MRxCloseSrvOpen を呼び出して、FOBX 構造体の清掃中に遅延終了処理を行います。 これは、オープン要求を予期してクローズ処理が遅延し、オープン要求が今後発生しなかった場合に発生します。
MRxCloseSrvOpen は、呼び出しを再試行する必要があることを示すSTATUS_RETRYの値を返すことはできません。 再試行ループが必要な場合は、ネットワーク ミニ リダイレクターによって MRxCloseSrvOpen ルーチンで内部的に処理する必要があります。
MRxCollapseOpen ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターが開いているファイル システム要求を既存のSRV_OPEN構造に折りたたむよう要求します。
MRxCollapseOpen は RDBSS によって呼び出され、SRV_OPEN構造体をローカルで折りたたみます。 ネットワーク ミニ リダイレクターを 2 回呼び出す理由がないように、折りたたみが可能かどうかを判断するために、ネットワーク ミニ リダイレクターが参照されます。 ネットワーク ミニ リダイレクターがSRV_OPEN構造を折りたたむ場合は、それを行い、戻り可能な状態を返します。 STATUS_SUCCESS の戻り値は、終了する戻り値です。 別の戻り値 (たとえば、STATUS_MORE_PROCESSING_REQUIRED) は、終了しない戻り値と見なされます。
MRxCollapseOpen を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
pRelevantSrvOpen は、折りたたむSRV_OPEN構造体に設定されます。
Create.pSrvCall は、SRV_OPENに関連付けられているSRV_CALL構造体に設定されます。
ネットワーク ミニ リダイレクターがSRV_OPEN構造体を折りたたむ場合は、RX_CONTEXT構造体の SrvOpen メンバーを、折りたたまれたSRV_OPEN構造体に設定する必要があります。
MRxCreate ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターでファイル システム オブジェクトを作成するように要求します。
MRxCreate は RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがネットワーク経由でファイル システム オブジェクトを開くよう要求します。 この呼び出しは、 IRP_MJ_CREATE 要求の受信に応じて RDBSS によって発行されます。
MRxCreate を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
pRelevantSrvOpen は、SRV_OPEN構造体に設定されます。
Create.pSrvCall は、SRV_CALL構造体に設定されます。
Create.NtCreateParameters は、要求されたNT_CREATE_PARAMETERSに設定されます。
ネットワーク ミニ リダイレクターのコンテキストでは、ファイル オブジェクトは、関連付けられているファイル制御ブロック (FCB) とファイル オブジェクト拡張子 (FOBX) 構造体を参照します。 ファイル オブジェクトと FOBX の間には、1 対 1 の対応があります。 多くのファイル オブジェクトは、リモート サーバー上の 1 つのファイルを表す同じ FCB を参照します。 クライアントは、同じ FCB に対して複数の異なるオープン要求 (NtCreateFile 要求) を持つ場合があり、それぞれに新しいファイル オブジェクトが作成されます。 RDBSS とネットワーク ミニ リダイレクターは、受信した NtCreateFile 要求よりも少ない MRxCreate 要求を送信することを選択できます。実際には、複数の FOBX 間でSRV_OPEN構造を共有します。
MRxCreate 要求がファイルの上書きに対して行われ、MRxCreate がSTATUS_SUCCESS返された場合、RDBSS はページング I/O リソースを取得し、ファイルを切り捨てます。 ファイルがキャッシュ マネージャーによってキャッシュされている場合、RDBSS は、キャッシュ マネージャーがサーバーから受信したサイズでキャッシュ マネージャーのサイズを更新します。
を返す前に、MRxCreate は RxContext パラメーターによって指されるRX_CONTEXT構造体の CurrentIrp-IoStatus.Information> メンバーを設定する必要があります。
MRxDevFcbXXXControlFile ルーチンは RDBSS によって呼び出され、デバイス FCB 制御要求 (IOCTL または FSCTL 要求) をネットワーク ミニ リダイレクターに渡します。
MRxDevFcbXXXControlFile は 、ネットワーク ミニ リダイレクターに送信されるデバイス FCB に関連する IOCTL および FSCTL 要求を処理します。
MRxDevFcbXXXControlFile を呼び出す前に、RDBSS は RxContext パラメーターによって指されるRX_CONTEXT構造体の次のメンバーを変更します。
MajorFunction が IRP の主要な機能に設定されている
これがIRP_MJ_FILE_SYSTEM_CONTROL要求の場合、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
LowIoContext.ParamsFor.FsCtl.MinorFunction が FSCTL コードのマイナー関数コードに設定されている
LowIoContext.ParamsFor.FsCtl.FsControlCode が IRP の FSCTL コードに設定されている
これがIRP_MJ_DEVICE_CONTROLまたはIRP_MJ_INTERNAL_DEVICE_CONTROL要求である場合、RDBSS は RxContext パラメーターによって指されるRX_CONTEXT構造体の次のメンバーを変更します。
LowIoContext.ParamsFor.FsCtl.FsControlCode は、IRP のコントロール コードに設定されます。
MRxDevFcbXXXControlFile がSTATUS_SUCCESSを返した場合、ルーチンは成功しました。 その他の戻り値は、エラーが発生したことを示します。
MRxFlush ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトの内容をストレージに書き込むよう要求します。 RDBSS は、 IRP_MJ_FLUSH_BUFFERS 要求の受信に応じてこの呼び出しを発行します。
MRxFlush は、ファイル フラッシュのネットワーク要求を処理します。
MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル オブジェクトの排他ロックを開くよう要求します。
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 構造体を解放できます。
MRxLowIOSubmit[LOWIO_OP_FSCTL] ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがリモート ファイルに対してファイル システム制御要求を発行するように要求します。
RDBSS は、IRP_MJ_FILE_SYSTEM_CONTROL要求の受信に応じて MRxLowIOSubmit[LOWIO_OP_FSCTL] を呼び出します。
MRxLowIOSubmit[LOWIO_OP_FSCTL]を呼び出す前に、RDBSS は RxContext パラメーターによって指されるRX_CONTEXT構造体の次のメンバーを変更します。
LowIoContext.Operation メンバーは、LOWIO_OP_FSCTLに設定されます。
LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドに設定されます。
LowIoContext.ParamsFor.FsCtl.FsControlCode メンバーは、FSCTL メジャー コントロール コードに設定されます。
LowIoContext.ParamsFor.FsCtl.MinorFunction メンバーは、FSCTL マイナー コントロール コードに設定されます。
LowIoContext.ParamsFor.FsCtl.pInputBuffer メンバーは入力バッファーに設定されます。
LowIoContext.ParamsFor.FsCtl.InputBufferLength メンバーは、入力バッファーの長さに設定されます。
LowIoContext.ParamsFor.FsCtl.pOutputBuffer メンバーは出力バッファーに設定されます。
LowIoContext.ParamsFor.FsCtl.OutputBufferLength メンバーは、出力バッファーの長さに設定されます。
ネットワーク ミニ リダイレクターによって処理されるファイル システム制御コード (FSCTL) 要求は、いくつかのカテゴリのいずれかに分類できます。
RDBSS とネットワーク ミニ リダイレクターによって実装および使用される FSCTL
ネットワーク ミニ リダイレクターによってのみ実装および使用される FSCTL
ネットワーク ミニ リダイレクターによって決して表示されない FSCTL。 これらの FSCTL は、デバッグ支援のみを目的としています。
MRxLowIOSubmit[LOWIO_OP_FSCTL] ルーチンの処理中、RX_CONTEXT の LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドを示す保証があります。 RX_CONTEXT の LowIoContext.ResourceThreadId メンバーを使用すると、別のスレッドに代わって入力リソースを解放できます。 非同期ルーチンが完了すると、初期スレッドから取得された入力リソースを解放できます。
MRxLowIOSubmit[LOWIO_OP_IOCTL] ルーチンは、ネットワーク ミニ リダイレクターに I/O システム制御要求を発行するために RDBSS によって呼び出されます。
RDBSS は、IRP_MJ_DEVICE_CONTROLまたはIRP_MJ_INTERNAL_DEVICE_CONTROL要求の受信に応じて MRxLowIOSubmit[LOWIO_OP_IOCTL] を呼び出します。
MRxLowIOSubmit[LOWIO_OP_IOCTL]を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
LowIoContext.Operation メンバーは LOWIO_OP_IOCTL に設定されます。
LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドに設定されます。
LowIoContext.ParamsFor.IoCtl.IoControlCode メンバーは IOCTL コントロール コードに設定されます。
LowIoContext.ParamsFor.IoCtl.pInputBuffer メンバーは入力バッファーに設定されます。
LowIoContext.ParamsFor.IoCtl.InputBufferLength メンバーは、入力バッファーの長さに設定されます。
LowIoContext.ParamsFor.IoCtl.pOutputBuffer メンバーは出力バッファーに設定されます。
LowIoContext.ParamsFor.IoCtl.OutputBufferLength メンバーは、出力バッファーの長さに設定されます。
MRxLowIOSubmit[LOWIO_OP_IOCTL] ルーチンの処理中、RX_CONTEXT の LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドを示す保証があります。 RX_CONTEXT の LowIoContext.ResourceThreadId メンバーを使用すると、別のスレッドに代わって入力リソースを解放できます。 非同期ルーチンが完了すると、初期スレッドから取得された入力リソースを解放できます。
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] ルーチンは RDBSS によって呼び出され、ディレクトリ変更通知操作のネットワーク ミニ リダイレクターに要求を発行します。
RDBSS は、IRP_MJ_DIRECTORY_CONTROL要求の受信に応じて MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] を呼び出します。
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
LowIoContext.Operation メンバーは LOWIO_OP_NOTIFY_CHANGE_DIRECTORY に設定されます。
LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドに設定されます。
IrpSp-Flags> にSL_WATCH_TREEビットが設定されている場合、LowIoContext.ParamsFor.NotifyChangeDirectory.WatchTree メンバーは TRUE に設定されます。
LowIoContext.ParamsFor.NotifyChangeDirectory.CompletionFilter メンバーは、IrpSp-Parameters.NotifyDirectory.CompletionFilter> の値に設定されます。
LowIoContext.ParamsFor.NotifyChangeDirectory.NotificationBufferLength メンバーは、IrpSp-Parameters.NotifyDirectory.Length> の値に設定されます。
LowIoContext.ParamsFor.NotifyChangeDirectory.pNotificationBuffer メンバーは、Irp-MdlAddress> と NormalPagePriority を渡して MmGetSystemAddressForMdlSafe を呼び出すことによって返される値に設定されます。 ユーザー バッファーもプローブされ、書き込みアクセス用にロックされます。
ディレクトリ変更通知操作は、通常、ネットワーク ミニ リダイレクターによって非同期操作として実装されます。これは、かなりの時間がかかる可能性があるためです。 通常、この操作は、変更通知を要求するリモート サーバーにネットワーク要求を送信することで構成されます。 応答は、サーバーで目的の変更が影響を受けた場合に取得されます。 これは、ローカルで開始されたキャンセルを処理するために、ネットワーク ミニ リダイレクターが一意のコンテキスト値を登録する必要がある操作の例です。
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] ルーチンの処理中に、RX_CONTEXT の LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドを示す保証があります。 LowIoContext.ResourceThreadId メンバーを使用して、別のスレッドの代わりに FCB 構造体を解放できます。 非同期ルーチンが完了すると、初期スレッドから取得された FCB 構造体を解放できます。 FCB 構造体は、 RxReleaseFcbResourceForThreadInMRx を呼び出すことによって解放できます。
MRxLowIOSubmit[LOWIO_OP_READ] ルーチンは、ネットワーク ミニ リダイレクターに読み取り要求を発行するために RDBSS によって呼び出されます。
RDBSS は、IRP_MJ_READ要求の受信に応じて MRxLowIOSubmit[LOWIO_OP_READ] を呼び出します。
MRxLowIOSubmit[LOWIO_OP_READ]を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
LowIoContext.Operation メンバーは LOWIO_OP_READ に設定されます。
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 メンバーは、IoReadAccess 用にロックされたユーザー バッファーに設定されます。
LowIoContext.ParamsFor.ReadWrite.ByteCount メンバーは、IrpSp-Parameters.Read.Length> の値に設定されます。
通常、読み取り要求は、ネットワーク ミニ リダイレクターによって非同期操作として実装されます。これは、かなりの時間がかかる可能性があるためです。 通常、この操作はネットワーク要求をリモート サーバーに送信して構成されます。 応答は、サーバーで読み取り要求が完了したときに取得されます。 これは、ネットワーク ミニ リダイレクターがローカルで開始されたキャンセルを処理するためのコンテキストを登録する必要がある操作の例です。
MRxLowIOSubmit[LOWIO_OP_READ] ルーチンの処理中、RX_CONTEXT の LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドを示す保証があります。 LowIoContext.ResourceThreadId メンバーを使用して、別のスレッドの代わりに FCB 構造体を解放できます。 非同期ルーチンが完了すると、初期スレッドから取得された FCB 構造体を解放できます。 FCB 構造体は、 RxReleaseFcbResourceForThreadInMRx を呼び出すことによって解放できます。
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] ルーチンは、ネットワーク リダイレクターがファイル オブジェクトの共有ロックを開くよう要求するために RDBSS によって呼び出されます。
RDBSS は、IrpSp-Flags> にSL_EXCLUSIVE_LOCK ビットが設定されていない場合、マイナー コードが IRP_MN_LOCK のIRP_MJ_LOCK_CONTROL要求を受信した場合に応答して MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] を呼び出します。
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
LowIoContext.Operation メンバーは LOWIO_OP_SHAREDLOCK に設定されます。
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_SHAREDLOCK] ルーチンの完了に長い時間がかかる場合、ネットワーク ミニ リダイレクター ドライバーは、ネットワーク通信を開始する前に FCB 構造体を解放する必要があります。 FCB 構造体は、 RxReleaseFcbResourceForThreadInMRx を呼び出すことによって解放できます。 MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] ルーチンが処理中に、RX_CONTEXT の LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドを示す保証があります。
RX_CONTEXT構造体の LowIoContext.ResourceThreadId メンバーを使用すると、別のスレッドの代わりに FCB 構造体を解放できます。 非同期ルーチンが完了すると、初期スレッドから取得された FCB 構造体を解放できます。
MRxLowIOSubmit[LOWIO_OP_UNLOCK] ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル オブジェクトの 1 つのロックを削除するように要求します。
RDBSS は MRxLowIOSubmit[LOWIO_OP_UNLOCK] を 呼び出し、IRP_MN_UNLOCK_SINGLEのマイナー コードで IRP_MJ_LOCK_CONTROL 要求を受信した場合に応答します。
MRxLowIOSubmit[LOWIO_OP_UNLOCK]を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
LowIoContext.Operation メンバーは LOWIO_OP_UNLOCK に設定されます。
LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドに設定されます。
LowIoContext.ParamsFor.Locks.ByteOffset メンバーは、IrpSp-Parameters.LockControl.ByteOffset.QuadPart> の値に設定されます。
LowIoContext.ParamsFor.Locks.Key メンバーは、IrpSp-Parameters.LockControl.Key> の値に設定されます。
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_UNLOCK] ルーチンの完了に長い時間がかかる場合、ネットワーク ミニ リダイレクター ドライバーは、ネットワーク通信を開始する前に FCB 構造体を解放する必要があります。 FCB 構造体は、 RxReleaseFcbResourceForThreadInMRx を呼び出すことによって解放できます。 MRxLowIOSubmit[LOWIO_OP_UNLOCK] ルーチンの処理中、RX_CONTEXT の LowIoContext.ResourceThreadId メンバーは、RDBSS で操作を開始したプロセスのスレッドを示す保証があります。
RX_CONTEXT の LowIoContext.ResourceThreadId メンバーを使用すると、別のスレッドに代わって FCB 構造体を解放できます。 非同期ルーチンが完了すると、初期スレッドから取得された FCB 構造体を解放できます。
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] ルーチンは、ネットワーク ミニ リダイレクターがファイル オブジェクトに保持されている複数のロックを削除するように要求するために RDBSS によって呼び出されます。
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 構造体を解放できます。
MRxLowIOSubmit[LOWIO_OP_WRITE] ルーチンは、ネットワーク ミニ リダイレクターに書き込み要求を発行するために RDBSS によって呼び出されます。
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 を呼び出すことによって解放できます。
MRxQueryDirectory ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル ディレクトリに関する情報を照会するように要求します。
MRxQueryDirectory を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.FileInformationClass メンバーは IrpSp-Parameters.QueryDirectory.FileInformationClass> に設定されます。
Info.Buffer メンバーは、I/O 要求パケットからユーザー バッファーに設定されます。 このバッファーは、必要に応じて RDBSS によって既にロックされています。
Info.LengthRemaining メンバーは IrpSp-Parameters.QueryDirectory.Length> に設定されています。
QueryDirectory.FileIndex メンバーは IrpSp-Parameters.QueryDirectory.FileIndex> に設定されています。
IrpSp-Flags> にSL_RESTART_SCAN ビットがオンになっている場合、QueryDirectory.RestartScan メンバーは 0 以外に設定されます。
IrpSp-Flags> のSL_RETURN_SINGLE_ENTRY ビットがオンの場合、QueryDirectory.ReturnSingleEntry メンバーは 0 以外に設定されます。
IrpSp-Flags> にSL_INDEX_SPECIFIED ビットがオンになっている場合、QueryDirectory.IndexSpecified メンバーは 0 以外に設定されます。
関連付けられた FOBX の UnicodeQueryTemplate.Buffer メンバーが NULL で、FOBX の Flags メンバーに FOBX_FLAG_MATCH_ALL ビットが設定されていない場合、QueryDirectory.InitialQuery メンバーは 0 以外に設定されます。
ワイルド カード クエリ ("."など) の場合、RDBSS は、関連付けられた FOBX の UnicodeQueryTemplate.Buffer メンバーを、渡されたワイルド カード クエリに設定します。
MRxQueryDirectory からの戻り時にRX_CONTEXT構造体の PostRequest メンバーが TRUE の場合、RDBSS は RxFsdPostRequest を呼び出し、ファイル システム プロセス (FSP) によって処理するために、RX_CONTEXT構造体をワーカー キューに渡します。
MRxQueryEaInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトの拡張属性情報を照会するように要求します。
RDBSS は、IRP_MJ_QUERY_EA要求の受信に応じて MRxQueryEaInfo の呼び出しを発行します。
MRxQueryEaInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.Buffer メンバーは、I/O 要求パケットからのユーザー バッファーに設定されます。 このバッファーは、必要に応じて RDBSS によって既にロックされています。
Info.LengthRemaining メンバーは IrpSp-Parameters.QueryEa.Length> に設定されています。
QueryEa.UserEaList メンバーは IrpSp-Parameters.QueryEa.EaList> に設定されています。
QueryEa.UserEaListLength メンバーは IrpSp-Parameters.QueryEa.EaListLength> に設定されます。
QueryEa.UserEaIndex メンバーは IrpSp-Parameters.QueryEa.EaIndex> に設定されています。
IrpSp-Flags> にSL_RESTART_SCAN ビットがオンになっている場合、QueryEa.RestartScan メンバーは 0 以外に設定されます。
IrpSp-Flags> のSL_RETURN_SINGLE_ENTRY ビットがオンの場合、QueryEa.ReturnSingleEntry メンバーは 0 以外に設定されます。
IrpSp-Flags> にSL_INDEX_SPECIFIED ビットがオンになっている場合、QueryEa.IndexSpecified メンバーは 0 以外に設定されます。
成功した場合、MRxQueryEaInfo は、RX_CONTEXT構造体の Info.LengthRemaining メンバーを、返される拡張属性情報の長さに設定し、Fobx-OffsetOfNextEaToReturn> メンバーも更新する必要があります。 MRxQueryEaInfo の呼び出しが成功した場合、RDBSS は IRP の IoStatus.Information メンバーを IrpSp-Parameters.QueryEa.Length> からRX_CONTEXTの Info.LengthRemaining メンバーを引いた値に設定します。
MRxQueryFileInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトのファイル情報を照会するように要求します。
RDBSS は、IRP_MJ_QUERY_INFORMATION要求の受信に応じて MRxQueryFileInfo の呼び出しを発行します。
MRxQueryFileInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.FileInformationClass メンバーは、要求されたFILE_INFORMATION_CLASS値である IrpSp-Parameters.QueryFile.FileInformationClass> に設定されます。
Info.Buffer メンバーは、I/O 要求パケットからユーザー バッファーに設定されます。
Info.LengthRemaining メンバーは IrpSp-Parameters.QueryFile.Length> に設定されています。
QueryDirectory.FileIndex メンバーは IrpSp-Parameters.QueryDirectory.FileIndex> に設定されています。
IrpSp-Flags> にSL_RESTART_SCANビットが設定されている場合、QueryDirectory.RestartScan メンバーが設定されます。
IrpSp-Flags> にビットが設定されている場合、QueryDirectory.ReturnSingleEntry メンバー SL_RETURN_SINGLE_ENTRY設定されます。
Fobx-UnicodeQueryTemplate.Buffer が NULL で、Fobx-Flags>> にFOBX_FLAG_MATCH_ALL ビットが設定されていない場合、QueryDirectory.InitialQuery メンバーが設定されます。
成功した場合、ネットワーク ミニ リダイレクターは、RX_CONTEXT構造体の Info.LengthRemaining メンバーをInfo.Length メンバーから返されるファイル情報の長さを差し引いた値に設定する必要があります。 MRxQueryFileInfo の呼び出しが成功した場合、RDBSS は IRP の IoStatus.Information メンバーを IrpSp-Parameters.QueryFile.Length> から RX_CONTEXT の Info.LengthRemaining メンバーを引いた値に設定します。
RDBSS では、IrpSp-Flags> セットのSL_INDEX_SPECIFIED ビットを使用した要求はサポートされていません。 ネットワーク ミニ リダイレクターは、IrpSp-Flags> のSL_INDEX_SPECIFIED ビットが設定された MRxQueryFileInfo の呼び出しを受信しません。
MRxQueryQuotaInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトのクォータ情報を照会するように要求します。
RDBSS は、IRP_MJ_QUERY_QUOTA要求の受信に応じて MRxQueryQuotaInfo の呼び出しを発行します。
MRxQueryQuotaInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.Buffer メンバーは、I/O 要求パケットからユーザー バッファーに設定されます。 このバッファーは、必要に応じて RDBSS によって既にロックされています。
Info.LengthRemaining メンバーは IrpSp-Parameters.QueryQuota.Length> に設定されています。
QueryQuota.SidList メンバーは IrpSp-Parameters.QueryQuota.SidList> に設定されます。
QueryQuota.SidListLength メンバーは IrpSp-Parameters.QueryQuota.SidListLength> に設定されます。
QueryQuota.StartSid メンバーは IrpSp-Parameters.QueryQuota.StartSid> に設定されます。
QueryQuota.Length メンバーは IrpSp-Parameters.QueryQuota.Length> に設定されています。
IrpSp-Flags> にSL_RESTART_SCAN ビットが設定されている場合、QueryQuota.RestartScan メンバーは 0 以外に設定されます。
IrpSp-Flags> にSL_RETURN_SINGLE_ENTRYビットが設定されている場合、QueryQuota.ReturnSingleEntry メンバーは 0 以外に設定されます。
IrpSp-Flags> にSL_INDEX_SPECIFIEDビットが設定されている場合、QueryQuota.IndexSpecified メンバーは 0 以外に設定されます。
成功した場合、ネットワーク ミニ リダイレクターは、RX_CONTEXT構造体の Info.LengthRemaining メンバーを、返されるクォータ情報の長さに設定する必要があります。 MRxQueryQuotaInfo の呼び出しが成功した場合、RDBSS は IRP の IoStatus.Information メンバーを RX_CONTEXT の Info.LengthRemaining メンバーに設定します。
MRxQueryQuotaInfo の呼び出しが成功した場合、RX_CONTEXT構造体の InformationToReturn メンバーは、返されるクォータ情報の長さに設定する必要があります。 呼び出しが失敗した場合は、RX_CONTEXT の InformationToReturn メンバーを 0 に設定する必要があります。
MRxQuerySdInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトのセキュリティ記述子情報を照会するように要求します。
RDBSS は、IRP_MJ_QUERY_SECURITY要求の受信に応じて MRxQuerySdInfo の呼び出しを発行します。
MRxQuerySdInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
QuerySecurity.SecurityInformation メンバーは IrpSp-Parameters.QuerySecurity.SecurityInformation> に設定されます。
Info.Buffer メンバーは、I/O 要求パケットからユーザー バッファーに設定されます。 このバッファーは、必要に応じて RDBSS によって既にロックされています。
Info.LengthRemaining メンバーは IrpSp-Parameters.QuerySecurity.Length> に設定されています。
成功した場合、ネットワーク ミニ リダイレクターは、RX_CONTEXT構造体の InformationToReturn メンバーを、返されるセキュリティ情報の長さに設定する必要があります。 MRxQuerySdInfo の呼び出しが成功した場合、RDBSS は IRP の IoStatus.Information メンバーをRX_CONTEXTの InformationToReturn メンバーに設定します。
MRxQueryVolumeInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがボリューム情報を照会するように要求します。
RDBSS は、次のいずれかの場合に MRxQueryVolumeInfo の呼び出しを発行します。
RDBSS は 、IRP_MJ_QUERY_VOLUME_INFORMATION 要求を受信します。
RDBSS は、FSCTL_LMR_GET_LINK_TRACKING_INFORMATIONコントロール コードの IRP_MJ_FILE_SYSTEM_CONTROL 要求を受け取ります。
IRP_MJ_QUERY_VOLUME_INFORMATION要求の場合に MRxQueryVolumeInfo を呼び出す前に、RDBSS は RxContext パラメーターによって指されるRX_CONTEXT構造体の次のメンバーを変更します。
Info.FsInformationClass メンバーは IrpSp-Parameters.QueryVolume.FsInformationClass> に設定されます。
Info.Buffer メンバーは Irp-AssociatedIrp.SystemBuffer> に設定されます。
Info.LengthRemaining メンバーは IrpSp-Parameters.QueryVolume.Length> に設定されています。
IRP_MJ_QUERY_VOLUME_INFORMATION要求の場合、MRxQueryVolumeInfo から返されるときに、RX_CONTEXT構造体の PostRequest メンバーが TRUE の場合、RDBSS は RxFsdPostRequest を呼び出して要求を投稿します。 この場合、IRP_MJ_QUERY_VOLUME_INFORMATION要求は、ファイル システム プロセス (FSP) によって処理するために、ワーカー キューにRX_CONTEXTキューにRX_CONTEXT構造体を渡します。
MRxQueryVolumeInfo から返されるときに、RX_CONTEXT構造体の PostRequest メンバーが FALSE の場合、ネットワーク ミニ リダイレクターは、RX_CONTEXT構造体の Info.LengthRemaining メンバーを、返されるボリューム情報の長さに設定する必要があります。 RDBSS は、IRP の IoStatus.Information メンバーを IrpSp-Parameters.QueryVolume.Length> からRX_CONTEXT構造体の Info.LengthRemaining メンバーを引いた値に設定します。
MRxQueryVolumeInfo の呼び出しが成功した場合、ネットワーク ミニ リダイレクターは、RX_CONTEXT構造体の Info.LengthRemaining メンバーをInfo.Length メンバーから返されるボリューム情報の長さを差し引いた値に設定する必要があります。 MRxQueryVolumeInfo の呼び出しが成功した場合、RDBSS は IRP の IoStatus.Information メンバーを IrpSp-Parameters.QueryVolume.Length> からRX_CONTEXT構造体の Info.LengthRemaining メンバーを引いた値に設定します。
Info.FsInformationClass メンバーが FileFsDeviceInformation に設定されたIRP_MJ_QUERY_VOLUME_INFORMATION要求の場合、ネットワーク ミニリダイレクターは RxContext パラメーターによって指されるRX_CONTEXT構造体で次の情報を返します。
Info.Buffer メンバーには、FILE_FS_DEVICE_INFORMATION構造体が含まれています
Info.Buffer.Characteristics メンバーはボリュームの特性に設定され、オプションの 1 つとしてFILE_REMOTE_DEVICEを含める必要があります。
Info.Buffer.DeviceType メンバーは、関連付けられているNET_ROOT構造体の DeviceType メンバーに設定されます。 関連付けられているNET_ROOTの Type メンバーがNET_ROOT_PIPE場合、 Info.Buffer.DeviceType メンバーは FILE_DEVICE_NAMED_PIPE に設定されます。
Info.FsInformationClass メンバーが FileFsVolumeInformation に設定されたIRP_MJ_QUERY_VOLUME_INFORMATION要求の場合、ネットワーク ミニ リダイレクターは、RxContext パラメーターによって指されるRX_CONTEXT構造体で次の情報を返します。
Info.Buffer メンバーには、FILE_FS_VOLUME_INFORMATION構造体が含まれています。
Info.Buffer メンバーは、関連付けられているNET_ROOT構造体の VolumeInfo メンバーに設定されます。
Info.LengthRemaining メンバーは、関連付けられているNET_ROOT構造体の VolumeInfoLength メンバーに設定されます。
IRP_MJ_FILE_SYSTEM_CONTROL の RDBSS からの MRxQueryVolumeInfo 呼び出しは、リンク追跡情報の要求です。 IRP_MJ_FILE_SYSTEM_CONTROLの MRxQueryVolumeInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.FsInformationClass メンバーは FileFsObjectIdInformation に設定されます。
Info.Buffer メンバーは、FILE_FS_OBJECTID_INFORMATION構造体に設定されます。
Info.LengthRemaining メンバーは sizeof(FILE_FS_OBJECTID_INFORMATION) に設定されています。
この場合、IRP_MJ_FILE_SYSTEM_CONTROL要求の IRP の AssociatedIrp.SystemBuffer メンバーは、LINK_TRACKING_INFORMATION構造体を指します。
要求が MRxQueryVolumeInfo へのIRP_MJ_FILE_SYSTEM_CONTROLとしてSTATUS_SUCCESSまたはSTATUS_BUFFER_OVERFLOWの戻り値として開始された場合、RDBSS は、RX_CONTEXT 構造体の Info.Buffer メンバーで渡されたFILE_FS_OBJECTID_INFORMATION構造体の ObjectId メンバーを FCB 構造体の NetRoot-DiskParameters.VolumeId> メンバーにコピーし、IRP の AssociatedIrp.SystemBuffer.VolumeId メンバーにコピーします。 MRxQueryVolumeInfo の呼び出しが成功した場合、RDBSS はLINK_TRACKING_INFORMATION構造体の Type メンバーを設定します。 FCB 構造体の NetRoot-Flags> メンバーにNETROOT_FLAG_DFS_AWARE_NETROOT ビットが設定されている場合、Type メンバーは RDBSS によって DfsLinkTrackingInformation に設定されます。 FCB 構造体の NetRoot-Flags> メンバーにNETROOT_FLAG_DFS_AWARE_NETROOTビットが設定されていない場合、Type メンバーは RDBSS によって NtfsLinkTrackingInformation に設定されます。 成功した場合、RDBSS は IRP の IoStatus.Information メンバーをLINK_TRACKING_INFORMATION構造体のサイズに設定します。
MRxSetEaInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトに拡張属性情報を設定するように要求します。
RDBSS は、IRP_MJ_SET_EA要求の受信に応じて MRxSetEaInfo の呼び出しを発行します。
MRxSetEaInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.Buffer メンバーは、I/O 要求パケットからのユーザー バッファーに設定されます。 このバッファーは、必要に応じて RDBSS によって既にロックされています。
Info.LengthRemaining メンバーは IrpSp-Parameters.QueryEa.Length> に設定されています。
MRxSetFileInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトにファイル情報を設定するように要求します。
RDBSS は、IRP_MJ_SET_INFORMATION要求の受信に応じて MRxSetFileInfo の呼び出しを発行します。
MRxSetFileInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.FileInformationClass メンバーは、指定されたFILE_INFORMATION_CLASS値である IrpSp-Parameters.SetFile.FileInformationClass> に設定されます。
Info.Buffer メンバーは Irp-AssociatedIrp.SystemBuffer> に設定されます。
Info.Length メンバーは IrpSp-Parameters.SetFile.Length> に設定されます。
MRxSetFileInfoAtCleanup ルーチンは、ネットワーク ミニ リダイレクターがクリーンアップ時にファイル システム オブジェクトにファイル情報を設定するように要求するために RDBSS によって呼び出されます。
RDBSS は、ファイル オブジェクトへの最後のハンドルが閉じられたときに、クリーンアップ中に MRxSetFileInfoAtCleanup の呼び出しを発行します。 これは、ファイル オブジェクトへの最後の参照が削除されたときに呼び出される閉じる操作とは異なります。
ファイルのタイムスタンプまたはファイルのサイズが変更された場合、MRxSetFileInfoAtCleanup は RDBSS によって呼び出されます。 RDBSS による MRxSetFileInfoAtCleanup の呼び出しは、これらの変更ごとに個別に行われます。 ファイル サイズとタイムスタンプの両方が変更された場合、RDBSS は MRxSetFileInfoAtCleanup を 2 回呼び出します。
MRxSetFileInfoAtCleanup を呼び出す前に、RDBSS は、ファイルのタイムスタンプが変更された場合に RxContext パラメーターによって指されるRX_CONTEXT構造体の次のメンバーを変更します。
Info.FileInformationClass メンバーは、FileBasicInformation のFILE_INFORMATION_CLASS値に設定されます。
Info.Buffer メンバーは、スタックに割り当てられたFILE_BASIC_INFORMATION構造体に設定されます。
Info.Length メンバーは、FILE_BASIC_INFORMATION構造体の size に設定されます。
MRxSetFileInfoAtCleanup を呼び出す前に、RDBSS は、ファイルのサイズが変更された場合に RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.FileInformationClass メンバーは、FileEndOfFileInformation のFILE_INFORMATION_CLASS値に設定されます。
Info.Buffer メンバーは、スタックに割り当てられたFILE_END_OF_FILE_INFORMATION構造体に設定されます。
Info.Length メンバーは sizeof(FILE_END_OF_FILE_INFORMATION) に設定されます。
RDBSS は 、MRxSetFileInfoAtCleanup からの戻り値を無視します。
ネットワーク ミニ リダイレクターは、このルーチンで何も実行せず、STATUS_SUCCESSを返すことができます。 ファイル サイズまたはタイムスタンプに対する変更は、クリーンアップ操作中に処理されます。
MRxSetQuotaInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトにクォータ情報を設定するように要求します。
RDBSS は、IRP_MJ_SET_QUOTA要求の受信に応じて MRxSetQuotaInfo の呼び出しを発行します。
MRxSetQuotaInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.Buffer メンバーは、I/O 要求パケットからのユーザー バッファーに設定されます。 このバッファーは、必要に応じて RDBSS によって既にロックされています。
Info.LengthRemaining メンバーは IrpSp-Parameters.SetQuota.Length> に設定されています。
MRxSetSdInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトにセキュリティ記述子情報を設定するように要求します。
RDBSS は、IRP_MJ_SET_SECURITY要求の受信に応じて MRxSetSdInfo の呼び出しを発行します。
MRxSetSdInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
SetSecurity.SecurityInformation メンバーは IrpSp-Parameters.SetSecurity.SecurityInformation> に設定されます。
SetSecurity.SecurityDescriptor メンバーは IrpSp-Parameters.SetSecurity.SecurityDescriptor> に設定されています。
MRxSetVolumeInfo ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがボリューム情報を設定するように要求します。
RDBSS は、IRP_MJ_SET_VOLUME_INFORMATION要求の受信に応じて MRxSetVolumeInfo の呼び出しを発行します。
MRxSetVolumeInfo を呼び出す前に、RDBSS は RxContext パラメーターが指すRX_CONTEXT構造体の次のメンバーを変更します。
Info.FsInformationClass メンバーは IrpSp-Parameters.SetVolume.FsInformationClass> に設定されます。
Info.Buffer メンバーは Irp-AssociatedIrp.SystemBuffer> に設定されます。
Info.LengthRemaining メンバーは IrpSp-Parameters.SetVolume.Length> に設定されています。
MRxShouldTryToCollapseThisOpen ルーチンは、RDBSS によって呼び出され、RDBSS が開いている要求を既存のファイル システム オブジェクトに折りたたむかどうかをネットワーク ミニ リダイレクターが示すように要求します。
MRxShouldTryToCollapseThisOpen は、開いている要求を折りたたむべきではないかどうかを判断するために呼び出されます。
MRxShouldTryToCollapseThisOpen を呼び出す前に、RDBSS は RxContext パラメーターによって指されるRX_CONTEXT構造体の次のメンバーを変更します。
pRelevantSrvOpen メンバーは、SRV_OPENに設定されます。
MRxShouldTryToCollapseThisOpen の呼び出しは、ディレクトリの変更通知要求である可能性があります。 そのため、ネットワーク ミニ リダイレクターでは、変更通知が正しく機能するように、開いている要求の折りたたみが許可されない場合があります。
RDBSS では、RX_CONTEXT構造体の Create.NtCreateParameters.CreateOptions メンバーに FILE_OPEN_FOR_BACKUP_INTENT オプションまたは FILE_DELETE_ON_CLOSE オプション セットがある場合、折りたたみが開かなくても構っていません。
MRxTruncate ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトの内容を切り捨てるよう要求します。
MRxTruncate は、次の両方の条件に該当する場合、クリーンアップ操作の一部として呼び出されます。
ファイル オブジェクトは、ディスク ファイルまたはディレクトリに対応します
これは最後のクリーンアップ呼び出しであり、ファイル オブジェクトは切り捨て用にマークされました。
FCB 構造体の fcbstate メンバーにFCB_STATE_TRUNCATE_ON_CLOSE ビットが設定されている場合、ファイル オブジェクトは切り捨て用にマークされます。 RDBSS は、後でキャッシュ マップの初期化を解除します。
MRxTruncate の呼び出しの後に、クリーンアップ操作の一部として MRxCleanupFobx の呼び出しが行われます。
RDBSS は 、MRxTruncate からの戻り値を無視します。
MRxZeroExtend ルーチンは RDBSS によって呼び出され、ネットワーク ミニ リダイレクターがファイル システム オブジェクトの内容を切り捨てるよう要求します。
MRxZeroExtend は、ファイル オブジェクトが削除対象としてマークされておらず、ファイル オブジェクトがページング ファイルでない場合に、クリーンアップ操作の一部として呼び出されます。 MRxZeroExtend が呼び出され、有効なデータ長とファイル サイズの間の部分がゼロ拡張されます。 MRxZeroExtend を呼び出した後、RDBSS は FCB 構造体の構造体の Header.ValidDataLength.QuadPart メンバーを FCB 構造体の Header.FileSize.QuadPart メンバーに設定します。
MRxZeroExtend の呼び出しの後に、クリーンアップ操作の一部として MRxCleanupFobx の呼び出しが行われます。
RDBSS は 、MRxZeroExtend からの戻り値を無視します。
MRxCleanupFobx ルーチンは RDBSS によって呼び出され、ファイル システム オブジェクト拡張子を閉じるネットワーク ミニ リダイレクターを要求します。 RDBSS は、ファイル オブジェクトに対するIRP_MJ_CLEANUP要求の受信に応答して、この呼び出しを発行します。
MRxCleanupFobx は、ファイル オブジェクトに対するクリーンアップおよびクローズ操作の一環として RDBSS によって呼び出されます。
MRxCleanupFobx は、呼び出しを再試行する必要があることを示すSTATUS_RETRYの値を返すことはできません。 再試行ループが必要な場合は、ネットワーク ミニ リダイレクターによって MRxCleanupFobx ルーチン内で内部的に処理する必要があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | mrx.h (Mrx.h を含む) |