NDK_FN_BIND回调函数 (ndkpi.h)

NdkBind (NDK_FN_BIND) 函数将内存窗口绑定到内存区域的特定子区域, (MR) 。

语法

NDK_FN_BIND NdkFnBind;

NTSTATUS NdkFnBind(
  [in]           NDK_QP *pNdkQp,
  [in, optional] PVOID RequestContext,
  [in]           NDK_MR *pMr,
  [in]           NDK_MW *pMw,
  [in]           PVOID VirtualAddress,
  [in]           SIZE_T Length,
  [in]           ULONG Flags
)
{...}

参数

[in] pNdkQp

指向 NDK 队列对的指针 (QP) 对象 (NDK_QP) 。

[in, optional] RequestContext

要在此请求的 NDK_RESULT 结构的 RequestContext 成员中返回的上下文值。

[in] pMr

指向 NDK 内存区域的指针 (MR) 对象 (NDK_MR) 。

[in] pMw

指向 NDK 内存窗口的指针 (兆瓦) 对象 (NDK_MW) 。

[in] VirtualAddress

一个虚拟地址,必须大于或等于 MR 的 MDL 的虚拟地址,小于 MR 的 MDL 虚拟地址加上 Length 参数中的值。

使用 MmGetMdlVirtualAddress 宏获取 MR 的 MDL 的虚拟地址。

[in] Length

要绑定到兆瓦的 MR 的长度。

[in] Flags

指定允许的操作的标志的按位 OR。 支持以下标志:

含义
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
指示此请求的成功完成不会在出站完成队列中生成完成事件。 但是,失败的请求会在完成队列中生成完成。
NDK_OP_FLAG_READ_FENCE
0x00000002
指示在硬件开始处理此请求之前,所有以前的读取请求都必须完成。
NDK_OP_FLAG_ALLOW_REMOTE_READ
0x00000008
为任何连接的对等方启用对内存窗口的读取访问。 若要访问内存窗口,连接的对等方必须具有有效的令牌。
NDK_OP_FLAG_ALLOW_REMOTE_WRITE
0x00000030
为任何连接的对等方启用对内存窗口的写入访问。 若要访问内存窗口,连接的对等方必须具有有效的令牌。
NDK_OP_FLAG_DEFER
0x00000200
向 NDK 提供程序指示它可能会延迟,指示对硬件进行处理的请求。 有关此标志的详细信息,请参阅 NDKPI 延迟处理方案

注意此标志仅在 NDKPI 1.2 (Windows Server 2012 R2) 及更高版本中受支持。

返回值

NdkBind 函数返回以下 NTSTATUS 代码之一。

返回代码 说明
STATUS_SUCCESS
请求已成功发布。 完成工作请求后,完成项将排队到 CQ。
STATUS_CONNECTION_INVALID
QP) (队列对未连接。
STATUS_ACCESS_VIOLATION
内存区域不允许为内存窗口请求的访问类型。 NDK_OP_FLAG_ALLOW_WRITE标志需要使用 NDK_MR_FLAG_ALLOW_LOCAL_WRITE 标志注册的内存区域。
其他状态代码
出现了错误。

注解

NdkBind 将内存窗口 (兆瓦) 绑定到内存区域的特定子区域, (MR) 。

VirtualAddress 参数中的地址必须是内存注册期间指定的 MDL 链描述的虚拟连续区域中的地址。 提供程序必须将地址视为内存区域中的索引。 提供程序不得将地址用作读取或写入缓冲区内容的有效虚拟地址。

此调用返回后,远程令牌将可用于 NdkGetRemotetokenFromMw 函数 (NDK_FN_GET_REMOTE_TOKEN_FROM_MW) 。

此函数不支持从零开始的虚拟地址。

要求

要求
最低受支持的客户端 不支持,NDIS 6.30 及更高版本支持。
最低受支持的服务器 Windows Server 2012
目标平台 Windows
标头 ndkpi.h (包括 Ndkpi.h)
IRQL <=DISPATCH_LEVEL

另请参阅

MmGetMdlVirtualAddress

NDKPI 延迟处理方案

NDKPI 工作请求发布要求

NDK_FN_GET_REMOTE_TOKEN_FROM_MW

NDK_MR

NDK_MW

NDK_QP

NDK_RESULT