NPI_PROVIDER_ATTACH_CLIENT_FN función de devolución de llamada (netioddk.h)

La función de devolución de llamada ProviderAttachClient de un módulo de proveedor adjunta el módulo de proveedor a un módulo cliente.

Sintaxis

NPI_PROVIDER_ATTACH_CLIENT_FN NpiProviderAttachClientFn;

NTSTATUS NpiProviderAttachClientFn(
  [in]  HANDLE NmrBindingHandle,
  [in]  PVOID ProviderContext,
  [in]  PNPI_REGISTRATION_INSTANCE ClientRegistrationInstance,
  [in]  PVOID ClientBindingContext,
  [in]  const VOID *ClientDispatch,
  [out] PVOID *ProviderBindingContext,
  [out] const VOID **ProviderDispatch
)
{...}

Parámetros

[in] NmrBindingHandle

Identificador utilizado por el NMR para representar el enlace entre el módulo cliente y el módulo de proveedor.

[in] ProviderContext

Puntero al contexto de registro del módulo de proveedor. El módulo de proveedor pasa este puntero al NMR cuando llama a la función NmrRegisterProvider para registrarse con el NMR.

[in] ClientRegistrationInstance

Puntero a un NPI_REGISTRATION_INSTANCE estructura. Esta estructura contiene los datos de registro del módulo cliente.

[in] ClientBindingContext

Puntero al contexto del módulo cliente para el enlace entre el módulo cliente y el módulo de proveedor. El módulo cliente usa este contexto para realizar un seguimiento del estado del enlace. El contenido del contexto de enlace del módulo cliente es opaco para el módulo del proveedor. El módulo de proveedor pasa este puntero al módulo cliente cada vez que llama a cualquiera de las funciones de devolución de llamada NPI del módulo cliente que requieren el contexto de enlace del módulo cliente.

[in] ClientDispatch

Puntero a una estructura constante que contiene la tabla de distribución de funciones de devolución de llamada NPI para el módulo cliente. El contenido de la estructura es específico de NPI. Si el NPI no define una estructura de tabla de distribución de cliente, este puntero es NULL.

[out] ProviderBindingContext

Puntero a una variable en la que el módulo de proveedor almacenará un puntero a su contexto para el enlace entre el módulo cliente y el módulo de proveedor. El módulo de proveedor usa este contexto para realizar un seguimiento del estado del enlace. El contenido del contexto de enlace del módulo de proveedor es opaco para el módulo cliente. El módulo cliente pasa este puntero al módulo de proveedor cada vez que llama a una de las funciones NPI del módulo del proveedor que requieren el contexto de enlace del módulo del proveedor. El módulo de proveedor debe asegurarse de que este contexto siga siendo válido y resida en la memoria siempre y cuando el módulo cliente esté asociado al módulo de proveedor.

[out] ProviderDispatch

Puntero a una variable en la que el módulo de proveedor almacenará un puntero a una estructura constante que contiene la tabla de distribución de funciones NPI para el módulo de proveedor. El módulo de proveedor debe asegurarse de que esta estructura sigue siendo válida y residente en la memoria siempre y cuando el módulo cliente esté asociado al módulo de proveedor. El contenido de la estructura es específico de NPI.

Valor devuelto

La función de devolución de llamada ProviderAttachClient de un módulo de proveedor devuelve uno de los siguientes códigos NTSTATUS:

Código devuelto Descripción
STATUS_SUCCESS
El módulo de proveedor se adjuntó correctamente al módulo cliente.
STATUS_NOINTERFACE
El módulo de proveedor no se adjuntó al módulo cliente.
Otros códigos de estado
Se produjo un error.

Comentarios

NmR llama a la función de devolución de llamada ProviderAttachClient de un módulo de proveedor cada vez que un módulo cliente llama a la función NmrClientAttachProvider con un identificador que representa un enlace entre el módulo cliente y el módulo de proveedor.

Un módulo de proveedor puede examinar los datos de registro del módulo cliente. Estos datos están en la estructura a la que apunta el parámetro ClientRegistrationInstance . El módulo de proveedor usa estos datos para determinar si se asociará al módulo cliente:

  • Si el módulo de proveedor determina que se asociará al módulo cliente, la función de devolución de llamada ProviderAttachClient debe hacer lo siguiente:
    1. Guarde los punteros pasados en los parámetros ClientBindingContext y ClientDispatch para que el módulo de proveedor pueda realizar llamadas a las funciones NPI del módulo cliente.
    2. Guarde el identificador pasado en el parámetro NmrBindingHandle . El módulo de proveedor pasa este identificador como un parámetro al Función NmrProviderDetachClientComplete cuando se desasocia del módulo cliente.
    3. Establezca el parámetro ProviderBindingContext para que apunte a la estructura de contexto de enlace del módulo de proveedor para el enlace entre el módulo cliente y el módulo de proveedor.
    4. Establezca el parámetro ProviderDispatch para que apunte a una estructura que contiene la tabla de distribución del módulo de proveedor de funciones NPI .
    5. Devuelve STATUS_SUCCESS.
  • Si el módulo de proveedor determina que no se asociará al módulo cliente, la función de devolución de llamada ProviderAttachClient debe devolver STATUS_NOINTERFACE.
Si el módulo de proveedor se asocia al módulo cliente y asigna memoria dinámicamente para su contexto de enlace, debe liberar esa memoria asignada cuando nmR llama al módulo del proveedor. Función de devolución de llamada ProviderCleanupBindingContext después de que el módulo de cliente y el módulo de proveedor se desasocie entre sí.

NmR llama a la función de devolución de llamada ProviderAttachClient del módulo de proveedor en IRQL = PASSIVE_LEVEL.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Windows
Encabezado netioddk.h (incluya Wsk.h)
IRQL PASSIVE_LEVEL

Consulte también

NPI_PROVIDER_CHARACTERISTICS

NPI_REGISTRATION_INSTANCE

NmrClientAttachProvider

NmrProviderDetachClientComplete

NmrRegisterProvider

ProviderCleanupBindingContext

ProviderDetachClient