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必须包含由 NdkBuildLam (NDK_FN_BUILD_LAM具有 NDK_LOGICAL_ADDRESS_MAPPING 结构的) 函数返回的逻辑地址。 请注意,NDK_LOGICAL_ADDRESS_MAPPING的 AdapterPageArray 成员中的连续条目不一定是适配器逻辑地址空间中的连续页。 因此,NDK 使用者可以使用多个 SGE 覆盖适配器页数组中的所有页面。
当 MemoryRegionToken 成员中的令牌不等于 NdkGetPrivilegedMemoryRegionToken 返回的令牌时, NDK_SGE 结构必须包含一个虚拟地址,该地址属于以前注册的内存区域的虚拟地址范围。
在具有 NDK_OP_FLAG_INLINE 标志的工作请求中使用 NDK_SGE 结构时, MemoryRegionToken 中的令牌可能无效,因此 NDK 提供程序必须忽略它。 指定NDK_OP_FLAG_INLINE标志时,传递给工作请求函数的任何NDK_SGE结构的 VirtualAddress 成员必须指向 NDK 提供程序可在 IRQL 小于或等于 DISPATCH_LEVEL 访问的缓冲区,也就是说,必须保证缓冲区驻留在物理内存中,直到工作请求函数返回。 在单个调用中传递给提供程序的内联数据的总大小不得超过在创建队列对 (QP) 时指定的 InlineDataSize 参数中的值。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 不支持,在 NDIS 6.30 及更高版本中受支持。 |
最低受支持的服务器 | Windows Server 2012 |
标头 | ndkpi.h (包括 Ndkpi.h) |