NPI_PROVIDER_ATTACH_CLIENT_FN fonction de rappel (netioddk.h)

La fonction de rappel ProviderAttachClient d’un module fournisseur attache le module fournisseur à un module client.

Syntaxe

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
)
{...}

Paramètres

[in] NmrBindingHandle

Handle utilisé par la RMN pour représenter la liaison entre le module client et le module fournisseur.

[in] ProviderContext

Pointeur vers le contexte d’inscription du module fournisseur. Le module fournisseur transmet ce pointeur à la RMN lorsqu’il appelle la fonction NmrRegisterProvider pour s’inscrire auprès de la RMN.

[in] ClientRegistrationInstance

Pointeur vers un NPI_REGISTRATION_INSTANCE structure. Cette structure contient les données d’inscription du module client.

[in] ClientBindingContext

Pointeur vers le contexte du module client pour la liaison entre le module client et le module fournisseur. Le module client utilise ce contexte pour suivre l’état de la liaison. Le contenu du contexte de liaison du module client est opaque pour le module fournisseur. Le module fournisseur transmet ce pointeur au module client chaque fois qu’il appelle l’une des fonctions de rappel NPI du module client qui nécessitent le contexte de liaison du module client.

[in] ClientDispatch

Pointeur vers une structure constante qui contient la table de répartition des fonctions de rappel NPI pour le module client. Le contenu de la structure est spécifique à NPI. Si le NPI ne définit pas une structure de table de répartition du client, ce pointeur a la valeur NULL.

[out] ProviderBindingContext

Pointeur vers une variable dans laquelle le module fournisseur stocke un pointeur vers son contexte pour la liaison entre le module client et le module fournisseur. Le module fournisseur utilise ce contexte pour effectuer le suivi de l’état de la liaison. Le contenu du contexte de liaison du module fournisseur est opaque pour le module client. Le module client transmet ce pointeur au module fournisseur chaque fois qu’il appelle l’une des fonctions NPI du module fournisseur qui nécessitent le contexte de liaison du module fournisseur. Le module fournisseur doit s’assurer que ce contexte reste valide et qu’il réside dans la mémoire tant que le module client est attaché au module fournisseur.

[out] ProviderDispatch

Pointeur vers une variable dans laquelle le module fournisseur stocke un pointeur vers une structure constante qui contient la table de répartition des fonctions NPI pour le module fournisseur. Le module fournisseur doit s’assurer que cette structure reste valide et résidente dans la mémoire tant que le module client est attaché au module fournisseur. Le contenu de la structure est spécifique à NPI.

Valeur retournée

La fonction de rappel ProviderAttachClient d’un module fournisseur retourne l’un des codes NTSTATUS suivants :

Code de retour Description
STATUS_SUCCESS
Module fournisseur correctement attaché au module client.
STATUS_NOINTERFACE
Le module fournisseur ne s’est pas attaché au module client.
Autres codes status
Une erreur est survenue.

Remarques

La RMN appelle la fonction de rappel ProviderAttachClient d’un module fournisseur chaque fois qu’un module client appelle la fonction NmrClientAttachProvider avec un handle qui représente une liaison entre le module client et le module fournisseur.

Un module fournisseur peut examiner les données d’inscription du module client. Ces données se situent dans la structure vers laquelle pointe le paramètre ClientRegistrationInstance . Le module fournisseur utilise ces données pour déterminer s’il sera attaché au module client :

  • Si le module fournisseur détermine qu’il sera attaché au module client, la fonction de rappel ProviderAttachClient doit effectuer les opérations suivantes :
    1. Enregistrez les pointeurs passés dans les paramètres ClientBindingContext et ClientDispatch afin que le module fournisseur puisse effectuer des appels aux fonctions NPI du module client.
    2. Enregistrez le handle passé dans le paramètre NmrBindingHandle . Le module fournisseur transmet ce handle en tant que paramètre au Fonction NmrProviderDetachClientComplete lorsqu’elle se détache du module client.
    3. Définissez le paramètre ProviderBindingContext pour qu’il pointe vers la structure de contexte de liaison du module fournisseur pour la liaison entre le module client et le module fournisseur.
    4. Définissez le paramètre ProviderDispatch pour qu’il pointe vers une structure qui contient la table de répartition des fonctions NPI du module fournisseur.
    5. Retournez STATUS_SUCCESS.
  • Si le module fournisseur détermine qu’il ne sera pas attaché au module client, la fonction de rappel ProviderAttachClient doit retourner STATUS_NOINTERFACE.
Si le module fournisseur s’attache au module client et qu’il a alloué dynamiquement de la mémoire pour son contexte de liaison, il doit libérer cette mémoire allouée lorsque la RMN appelle le module du fournisseurFonction de rappel ProviderCleanupBindingContext après que le module client et le module fournisseur sont détachés les uns des autres.

La RMN appelle la fonction de rappel ProviderAttachClient d’un module fournisseur à l’adresse IRQL = PASSIVE_LEVEL.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et les versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Windows
En-tête netioddk.h (inclure Wsk.h)
IRQL PASSIVE_LEVEL

Voir aussi

NPI_PROVIDER_CHARACTERISTICS

NPI_REGISTRATION_INSTANCE

NmrClientAttachProvider

NmrProviderDetachClientComplete

NmrRegisterProvider

ProviderCleanupBindingContext

ProviderDetachClient