NDK_FN_BUILD_LAMコールバック関数 (ndkpi.h)
NdkBuildLam (NDK_FN_BUILD_LAM) 関数は、実質的に連続するメモリ領域の NDK プロバイダーからアダプター論理アドレス マッピング (LAM) を取得します。
構文
NDK_FN_BUILD_LAM NdkFnBuildLam;
NTSTATUS NdkFnBuildLam(
[in] NDK_ADAPTER *pNdkAdapter,
[in] MDL *Mdl,
[in] SIZE_T Length,
[in] NDK_FN_REQUEST_COMPLETION RequestCompletion,
[in, optional] PVOID RequestContext,
NDK_LOGICAL_ADDRESS_MAPPING *pNdkLAM,
ULONG *pLAMSize,
[out] ULONG *pFBO
)
{...}
パラメーター
[in] pNdkAdapter
NDK アダプター オブジェクト (NDK_ADAPTER) へのポインター。
[in] Mdl
メモリ記述子リスト (MDL) または MDL のチェーン。 開始仮想アドレスから Length パラメーター内のバイト数までの MDL チェーンの部分は、仮想的に連続したメモリ領域を表す必要があります。
[in] Length
最初の MDL の仮想アドレスから開始してマップするバイト数。 MDL 仮想アドレスは、mmGetMdlVirtualAddress マクロを使用して取得できます。 Length は、MDL チェーンで表される合計バイト数を超えてはなりません。
[in] RequestCompletion
NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION) コールバック関数へのポインター。
[in, optional] RequestContext
RequestCompletion パラメーターで指定された、NdkRequestCompletion コールバック関数に渡すプロバイダーのコンテキスト値。
pNdkLAM
アダプター ページ配列を含む NDK_LOGICAL_ADDRESS_MAPPING 構造体を保持するバッファーへのポインター。 アダプター ページ配列は AdapterPageArray メンバーに格納され、AdapterPageCount メンバーにはアダプター ページ要素の数が含まれています。
pLAMSize
入力の pNdkLAM パラメーターのバッファーのサイズ (バイト単位)、または出力用に書き込まれた実際のバイト数。
[out] pFBO
この場所では、最初のバイト オフセット (FBO) 値が返されます。 FBO は、最初のアダプター ページ内の開始オフセットです。
戻り値
NdkBuildLam 関数は、次の NTSTATUS コードのいずれかを返します。
リターン コード | 形容 |
---|---|
|
操作が正常に完了しました。 |
|
要求は保留中です。LAM ビルド操作が完了すると、RequestCompletion パラメーター (NDK_FN_REQUEST_COMPLETION) で指定された関数が呼び出されます。 |
|
開始仮想アドレスから Length パラメーターに指定されたバイト数までの MDL チェーンの部分は、実質的に連続したメモリ領域を表していません。 |
|
リソースが不足しているため、要求が失敗しました。
重要な 要求は、この状態コードを使用してインラインで、また非同期的に失敗する可能性があります。
|
|
*pLAMSize パラメーターで示されるバッファー サイズが小さすぎて LAM を保持できません。 この場合、*pLAMSize の値は、必要なバッファー サイズで更新されます。 |
|
エラーが発生しました。 |
備考
開始仮想アドレスから Length パラメーターで指定されたバイト数までの MDL チェーンの部分は、仮想的に連続したメモリ領域を表す必要があります。 それ以外の場合、NDK プロバイダーは要求を失敗する必要があります。 MDL チェーンがロックされていることを確認するのは、NDK コンシューマーの責任です。 つまり、MDL 変更のページは物理メモリに固定されます。
NDK コンシューマーは、NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) 関数を呼び出して、NDK プロバイダーから特権メモリ領域トークンを取得できます。
NDK プロバイダーによって返されるすべてのアダプター ページは、PAGE_SIZE バイトの長さである必要があります。ここで、PAGE_SIZE は wdm.h で定義されているホスト プラットフォームでサポートされているメモリ ページ サイズです。
プロバイダーは、MmGetMdlVirtualAddress マクロが MDL に対して返す仮想アドレス値を、マップされるメモリ領域の先頭へのインデックスとして扱う必要があります。 プロバイダーは、バッファーの内容を読み取りまたは書き込むための有効な仮想アドレスとして仮想アドレス値を使用しないでください。
NdkBuildLam 要求の処理中にプロバイダーにエラーが発生した場合、プロバイダーは、エラーが発生して要求を完了する前に、内部的に構築された部分的なマッピングを解放する必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | サポートされていません。NDIS 6.30 以降でサポートされています。 |
サポートされる最小サーバー | Windows Server 2012 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | ndkpi.h (Ndkpi.h を含む) |
IRQL | <=DISPATCH_LEVEL |