NDK_SGE 構造体 (ndkpi.h)
NDK_SGE構造体は、NDK 作業要求のローカル バッファーを指定します。
構文
typedef struct _NDK_SGE {
union {
PVOID VirtualAddress;
NDK_LOGICAL_ADDRESS LogicalAddress;
};
ULONG Length;
UINT32 MemoryRegionToken;
} NDK_SGE;
メンバー
VirtualAddress
仮想アドレス。
LogicalAddress
論理アドレス。
Length
バッファーの長さ (バイト単位)。
MemoryRegionToken
メモリ領域トークン。 MemoryRegionToken が NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) によって返されるトークンに設定されている場合、NDK_SGEには LogicalAddress が含まれている必要があります。 MemoryRegionToken が NdkGetPrivilegedMemoryRegionToken によって返されるトークンと等しくない場合、NDK_SGE構造体には VirtualAddress が含まれている必要があります。 NDK_OP_FLAG_INLINE フラグを使用して作業要求でNDK_SGE構造体を使用すると、MemoryRegionToken が無効である可能性があります。 MemoryRegionToken の詳細については、「解説」セクションを参照してください。
注釈
NDK_SGE構造体は、送信、受信、読み取り、および書き込みの作業要求のローカル バッファーを指定します。
MemoryRegionToken メンバーが NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN) によって返されるトークンに設定されている場合、NDK_SGEには、NDK_LOGICAL_ADDRESS_MAPPING構造体を持つ NdkBuildLam (NDK_FN_BUILD_LAM) 関数によって返される論理アドレスが含まれている必要があります。 NDK_LOGICAL_ADDRESS_MAPPINGの AdapterPageArray メンバー内の連続するエントリは、アダプターの論理アドレス空間内の連続するページであるとは限らないことに注意してください。 そのため、NDK コンシューマーは、アダプター ページ配列内のすべてのページをカバーするために複数の SG を使用する場合があります。
MemoryRegionToken メンバー内のトークンが、NdkGetPrivilegedMemoryRegionToken によって返されるトークンと等しくない場合、NDK_SGE構造体には、以前に登録されたメモリ領域の仮想アドレススパン内にある仮想アドレスが含まれている必要があります。
NDK_OP_FLAG_INLINE フラグを持つ作業要求でNDK_SGE構造体が使用されている場合、MemoryRegionToken 内のトークンが無効である可能性があるため、NDK プロバイダーでは無視する必要があります。 NDK_OP_FLAG_INLINE フラグが指定されている場合、作業要求関数に渡される任意のNDK_SGE構造体の VirtualAddress メンバーは、NDK プロバイダーがDISPATCH_LEVEL以下の IRQL でアクセスできるバッファーを指す必要があります。つまり、作業要求関数が戻るまで、バッファーが物理メモリに常駐していることを保証する必要があります。 1 回の呼び出しでプロバイダーに渡されるインライン データの合計サイズは、キュー ペア (QP) の作成時に指定された InlineDataSize パラメーターの値を超えることはできません。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | サポートされていません。NDIS 6.30 以降でサポートされています。 |
サポートされている最小のサーバー | Windows Server 2012 |
Header | ndkpi.h (Ndkpi.h を含む) |