NmrClientAttachProvider 函数 (netioddk.h)

NmrClientAttachProvider 函数将客户端模块附加到提供程序模块。

语法

NTSTATUS NmrClientAttachProvider(
  [in]  HANDLE                 NmrBindingHandle,
  [in]  __drv_aliasesMem PVOID ClientBindingContext,
  [in]  const VOID             *ClientDispatch,
  [out] PVOID                  *ProviderBindingContext,
  [out] const VOID             **ProviderDispatch
);

参数

[in] NmrBindingHandle

NMR 用于表示客户端模块与提供程序模块之间的绑定的句柄。 NMR 在调用客户端模块的 ClientAttachProvider 回调函数时将此句柄传递给客户端模块。

[in] ClientBindingContext

指向调用方提供的上下文的指针,用于客户端模块和提供程序模块之间的绑定。 客户端模块使用此上下文来跟踪绑定的状态。 客户端模块的绑定上下文的内容对提供程序模块不透明。 每当调用客户端模块的任何需要客户端模块绑定上下文的 NPI 回调函数时,提供程序模块都会将此指针传递给客户端模块。 只要提供程序模块附加到客户端模块,客户端模块必须确保此上下文保持有效并驻留在内存中。

[in] ClientDispatch

指向包含客户端模块 NPI 回调函数的调度表的常量结构的指针。 只要提供程序模块附加到客户端模块,客户端模块就必须确保此结构保持有效并驻留在内存中。 结构的内容特定于 NPI。 如果 NPI 未定义客户端调度表结构,则客户端模块必须将此参数设置为 NULL

[out] ProviderBindingContext

指向变量的指针,该变量接收指向客户端模块和提供程序模块之间绑定的提供程序模块上下文的指针。 提供程序模块使用此上下文来跟踪绑定的状态。 提供程序模块的绑定上下文的内容对客户端模块是不透明的。 每当客户端模块调用任何需要提供程序模块绑定上下文的提供程序模块的 NPI 函数时,都会将此指针传递给提供程序模块。

[out] ProviderDispatch

指向变量的指针,该变量接收指向包含 调度表的结构的指针
提供程序模块的 NPI 函数。 结构的内容特定于 NPI。

返回值

NmrClientAttachProvider 函数返回以下 NTSTATUS 代码之一:

返回代码 说明
STATUS_SUCCESS
客户端模块已成功附加到提供程序模块。
STATUS_NOINTERFACE
提供程序模块未附加到客户端模块。
其他状态代码
出现了错误。

注解

客户端模块从其 ClientAttachProvider 回调函数调用 NmrClientAttachProvider 函数,以将自身附加到提供程序模块。

当客户端模块调用 NmrClientAttachProvider 函数时,NMR 会调用提供程序模块的 ProviderAttachClient 回调函数来完成附件过程。 NmrClientAttachProvider 函数返回提供程序模块的 ProviderAttachClient 回调函数返回的状态代码。

如果 NmrClientAttachProvider 函数不返回STATUS_SUCCESS,则客户端模块应对其绑定上下文结构中包含的数据执行任何必要的清理。 然后,如果客户端模块动态分配了该结构的内存,则客户端模块应为其绑定上下文结构释放内存。

如果 NmrClientAttachProvider 函数返回STATUS_SUCCESS并且客户端模块为其绑定上下文动态分配了内存,则当 NMR 调用客户端模块的 时,客户端模块应释放该分配的内存客户端模块和提供程序模块相互分离后的 ClientCleanupBindingContext 回调函数。

如果 NmrClientAttachProvider 函数返回STATUS_SUCCESS,则客户端模块必须将返回的指针保存在 ProviderBindingContextProviderDispatch 参数中,以便它可以调用提供程序模块的 NPI 函数。

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 操作系统中可用。
目标平台 桌面
标头 netioddk.h (包括 Wsk.h)
Library Netio.lib
IRQL PASSIVE_LEVEL

另请参阅

ClientAttachProvider

ClientCleanupBindingContext

ProviderAttachClient