NDK_FN_REGISTER_MR コールバック関数 (ndkpi.h)
NdkRegisterMr (NDK_FN_REGISTER_MR) 関数は、仮想的に連続したメモリ領域を NDK アダプターに登録します。
構文
NDK_FN_REGISTER_MR NdkFnRegisterMr;
NTSTATUS NdkFnRegisterMr(
[in] NDK_MR *pNdkMr,
[in] MDL *Mdl,
[in] SIZE_T Length,
[in] ULONG Flags,
[in] NDK_FN_REQUEST_COMPLETION RequestCompletion,
[in, optional] PVOID RequestContext
)
{...}
パラメーター
[in] pNdkMr
NDK メモリ領域 (MR) オブジェクト (NDK_MR) へのポインター。
[in] Mdl
開始仮想アドレスから Length パラメーターで指定されたバイト数までの仮想連続メモリ領域を表す MDL または MDL のチェーン。
[in] Length
最初の MDL の仮想アドレスから開始して登録するバイト数。 最初の MDL の仮想アドレスは、 MmGetMdlVirtualAddress マクロを呼び出すことによって取得できます。 長さは、MDL チェーンによって表されるバイトの合計数を超えてはなりません。
[in] Flags
登録済みメモリ領域のアクセス許可を指定するフラグのビットマスク。 次のフラグを設定できます。
[in] RequestCompletion
要求完了コールバック ルーチン NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION) へのポインター。
[in, optional] RequestContext
RequestCompletion パラメーターで指定されたコールバック関数の Context パラメーターに渡すコンテキスト値。
戻り値
NdkRegisterMr 関数は、次のいずれかの NTSTATUS コードを返します。
リターン コード | 説明 |
---|---|
|
MR 登録が正常に完了しました。 |
|
操作は保留中であり、後で完了します。 ドライバーは、保留中の操作を完了するために、指定した RequestCompletion (NDK_FN_REQUEST_COMPLETION) 関数を呼び出します。 |
|
開始仮想アドレスからバイト単位の長さまでの MDL チェーンの部分は、事実上連続するメモリ領域を表していません。 |
|
リソースが不足しているため、要求は失敗しました。
大事な 要求はインラインで失敗し、この状態コードを使用して非同期的に失敗する可能性があります。
|
|
エラーが発生しました。 |
解説
FastRegister パラメーターを FALSE に設定して作成されたNDK_MR オブジェクトでは、NdkRegisterMr を使用して、事実上連続したメモリ領域をアダプターに登録します。
NDK コンシューマーは、物理メモリに固定されている事実上連続したメモリ領域を表す MDL または MDL のチェーンを渡す必要があります。 登録されているメモリ領域のベース仮想アドレスは、 MmGetMdlVirtualAddress マクロによって示される仮想アドレスです。 MDL チェーンが、開始仮想アドレスから指定された長さ (バイト単位) までの仮想連続メモリ領域を表さない場合、NDK プロバイダーは要求を失敗させる必要があります。
プロバイダーは、 MmGetMdlVirtualAddress が返す仮想アドレスを、登録されているメモリ領域の先頭のインデックスとして扱う必要があります。 プロバイダーは、バッファーの内容を読み取りまたは書き込むための有効な仮想アドレスとして仮想アドレスを使用することはできません。
登録要求が保留中の間、NDK コンシューマーは MDL チェーンを使用しないでください。
NdkRegisterMr では 、0 から始まる仮想アドレスはサポートされていません。
NDK コンシューマーは、RDMA 読み取り要求のシンク バッファーとして使用できるメモリを登録するときに、 NDK_MR_FLAG_RDMA_READ_SINK フラグを渡す必要があります。 特定の NDK プロバイダーでは、NDK_ADAPTER_INFO構造体の AdapterFlags メンバーにNDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED フラグが設定されていないアダプターの RDMA 読み取り要求に対して、シンク バッファーに対する特別なアクセス権を有効にする必要がある場合があります。 NDK_MR_FLAG_RDMA_READ_SINK フラグを使用すると、このようなプロバイダーは登録要求を適切にサポートできます。
メモリ領域を登録解除するには、 NdkDeregisterMr (NDK_FN_DEREGISTER_MR) 関数を使用します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | サポートされていません。NDIS 6.30 以降でサポートされています。 |
サポートされている最小のサーバー | Windows Server 2012 |
対象プラットフォーム | Windows |
ヘッダー | ndkpi.h (Ndkpi.h を含む) |
IRQL | <=DISPATCH_LEVEL |