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 回调函数时,NMR 会将此句柄传递给客户端模块。
[in] ClientBindingContext
指向客户端模块与提供程序模块之间的绑定的调用方提供的上下文的指针。 客户端模块使用此上下文跟踪绑定的状态。 客户端模块绑定上下文的内容对提供程序模块不透明。 每当提供程序模块调用客户端模块的任何 NPI 需要客户端模块绑定上下文的回调函数时,提供程序模块都会将此指针传递给客户端模块。 只要提供程序模块附加到客户端模块,客户端模块就必须确保此上下文保持有效且驻留在内存中。
[in] ClientDispatch
指向包含客户端模块 NPI 回调函数的调度表的常量结构的指针。 只要提供程序模块附加到客户端模块,客户端模块就必须确保此结构保持有效且驻留在内存中。 结构的内容特定于 NPI。 如果 NPI 未定义客户端调度表结构,则客户端模块必须将此参数设置为 NULL。
[out] ProviderBindingContext
指向一个变量的指针,该变量接收指向客户端模块与提供程序模块之间的绑定的提供程序模块上下文的指针。 提供程序模块使用此上下文跟踪绑定的状态。 提供程序模块绑定上下文的内容对客户端模块不透明。 每当客户端模块调用提供程序模块的任何 NPI 需要提供程序模块绑定上下文的函数时,客户端模块都会将此指针传递给提供程序模块。
[out] ProviderDispatch
指向一个变量的指针,该变量接收指向包含调度表的结构的指针
提供程序模块的 NPI 函数。 结构的内容特定于 NPI。
返回值
NmrClientAttachProvider 函数返回以下 NTSTATUS 代码之一:
返回代码 | 描述 |
---|---|
|
客户端模块已成功附加到提供程序模块。 |
|
提供程序模块未附加到客户端模块。 |
|
发生错误。 |
言论
客户端模块从其 ClientAttachProvider 回调函数调用 NmrClientAttachProvider 函数,以将其附加到提供程序模块。
当客户端模块调用 NmrClientAttachProvider 函数时,NMR 调用提供程序模块的 ProviderAttachClient 回调函数来完成附件过程。 NmrClientAttachProvider 函数返回提供程序模块的 ProviderAttachClient 回调函数返回的状态代码。
如果 NmrClientAttachProvider 函数不返回STATUS_SUCCESS,客户端模块应对其绑定上下文结构中包含的数据执行任何必要的清理。 然后,如果客户端模块为结构动态分配了内存,则客户端模块应释放其绑定上下文结构的内存。
如果 NmrClientAttachProvider 函数返回STATUS_SUCCESS,并且客户端模块为其绑定上下文动态分配了内存,则当 NMR 调用客户端模块时,客户端模块应释放分配的内存 ClientCleanupBindingContext 回调函数后,客户端模块和提供程序模块彼此分离。
如果 NmrClientAttachProvider 函数返回STATUS_SUCCESS,则客户端模块必须保存 ProviderBindingContext 中返回的指针,并 ProviderDispatch 参数,以便它可以调用提供程序模块的 NPI 函数。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 桌面 |
标头 | netioddk.h (包括 Wsk.h) |
库 | Netio.lib |
IRQL | PASSIVE_LEVEL |