PROTOCOL_CM_CLOSE_CALL fonction de rappel (ndis.h)

La fonction ProtocolCmCloseCall est une fonction obligatoire qui met fin à un appel existant et libère toutes les ressources allouées par le gestionnaire d’appels pour l’appel.

Note Vous devez déclarer la fonction à l’aide du type PROTOCOL_CM_CLOSE_CALL . Pour plus d’informations, consultez la section Exemples suivante.
 

Syntaxe

PROTOCOL_CM_CLOSE_CALL ProtocolCmCloseCall;

NDIS_STATUS ProtocolCmCloseCall(
  [in]           NDIS_HANDLE CallMgrVcContext,
  [in, optional] NDIS_HANDLE CallMgrPartyContext,
  [in, optional] PVOID CloseData,
  [in, optional] UINT Size
)
{...}

Paramètres

[in] CallMgrVcContext

Spécifie le handle d’une zone de contexte allouée au gestionnaire d’appels dans laquelle le gestionnaire d’appels conserve son état par vc. Ce handle a été fourni à NDIS à partir de la fonction ProtocolCmMakeCall des gestionnaires d’appels .

[in, optional] CallMgrPartyContext

Spécifie le handle, le cas échéant, à une zone de contexte allouée par le gestionnaire d’appels dans laquelle le gestionnaire d’appels conserve des informations sur une partie sur un vc multipoint. Ce handle est NULL si l’appel en cours de fermeture n’est pas un appel multipoint.

[in, optional] CloseData

Pointeur vers une mémoire tampon contenant des données spécifiées par le client orientée connexion qui doivent être envoyées sur la connexion avant la fin de l’appel. Ce paramètre a la valeur NULL si le support réseau sous-jacent ne prend pas en charge les transferts de données lors de la fermeture d’une connexion.

[in, optional] Size

Spécifie la longueur, en octets, de la mémoire tampon sur CloseData, zéro si CloseData a la valeur NULL.

Valeur retournée

ProtocolCmCloseCall retourne le status de ses opérations comme suit :

Code de retour Description
NDIS_STATUS_SUCCESS
Indique que le gestionnaire d’appels a correctement arrêté l’appel.
NDIS_STATUS_PENDING
Indique que le gestionnaire d’appels terminera la demande d’arrêt de l’appel de façon asynchrone. Une fois que le gestionnaire d’appels a terminé toutes les opérations requises pour arrêter la connexion, il doit ensuite appeler NdisCmCloseCallComplete pour signaler à NDIS que l’appel a été fermé.
NDIS_STATUS_INVALID_DATA
Indique que CloseData a été spécifié, mais que le support réseau sous-jacent ne prend pas en charge l’envoi de données en même temps que la fin d’un appel.
NDIS_STATUS_XXX
Indique que le gestionnaire d’appels n’a pas pu arrêter l’appel. L’erreur réelle retournée peut être une status propagée à partir d’une autre routine de bibliothèque NDIS.

Remarques

ProtocolCmCloseCall a communiqué avec des périphériques de contrôle réseau ou d’autres acteurs spécifiques aux médias, comme l’exige son média, pour mettre fin à une connexion entre le nœud local et un nœud distant. Si le gestionnaire d’appels est requis pour communiquer avec les périphériques de contrôle réseau (comme un commutateur réseau), il doit utiliser une connexion virtuelle au périphérique de contrôle réseau qu’il a établi dans sa fonction ProtocolBindAdapterEx . Les gestionnaires d’appels autonomes communiquent avec ces appareils réseau en appelant NdisCoSendNetBufferLists. Les pilotes Miniport avec prise en charge intégrée de la gestion des appels n’appellent jamais NdisCoSendNetBufferLists. Au lieu de cela, ils transmettent les données directement sur le réseau.

Si CloseData n’a pas la valeur NULL et que l’envoi de données à l’arrêt de la connexion est pris en charge par le média géré par ce gestionnaire d’appels, le gestionnaire d’appels doit transmettre les données spécifiées dans CloseData au nœud distant avant de terminer l’arrêt d’appel. Si l’envoi de données simultanément à l’arrêt d’une connexion n’est pas pris en charge, les gestionnaires d’appels doivent retourner NDIS_STATUS_INVALID_DATA.

Si ProtocolCmCloseCall reçoit un CallMgrPartyContext explicite, l’appel en cours d’arrêt est un vc multipoint, et le gestionnaire d’appels doit effectuer toute communication réseau nécessaire avec son matériel réseau, en fonction de son type de média, pour terminer l’appel en tant qu’appel multipoint. Le gestionnaire d’appels doit également libérer la mémoire qu’il a allouée précédemment, dans ProtocolCmMakeCall, pour son état par partie pointé par CallMgrPartyContext . Le fait de ne pas libérer, libérer ou désactiver correctement ces ressources entraîne une fuite de mémoire.

Une fois l’appel terminé avec le réseau, toutes les données de fermeture ont été envoyées et toutes les ressources de CallMgrPartyContext ont été libérées, le gestionnaire d’appels doit appeler NdisCmDeactivateVc. Cela avertit NDIS et le pilote miniport sous-jacent, le cas échéant, qu’ils ne s’attendent à aucun autre transfert sur le vc donné.

Exemples

Pour définir une fonction ProtocolCmCloseCall , vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction que vous définissez. Windows fournit un ensemble de types de fonctions pour les pilotes. La déclaration d’une fonction à l’aide des types de fonction permet à l’analyse du code pour les pilotes, au vérificateur de pilotes statiques (SDV) et à d’autres outils de vérification de trouver des erreurs. Il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une fonction ProtocolCmCloseCall nommée « MyCmCloseCall », utilisez le type PROTOCOL_CM_CLOSE_CALL comme indiqué dans cet exemple de code :

PROTOCOL_CM_CLOSE_CALL MyCmCloseCall;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
NDIS_STATUS
 MyCmCloseCall(
    NDIS_HANDLE  CallMgrVcContext,
    NDIS_HANDLE  CallMgrPartyContext,
    PVOID  CloseData,
    UINT  Size
    )
  {...}

Le type de fonction PROTOCOL_CM_CLOSE_CALL est défini dans le fichier d’en-tête Ndis.h. Pour identifier plus précisément les erreurs lors de l’exécution des outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction PROTOCOL_CM_CLOSE_CALL dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes NDIS.

Pour plus d’informations sur Use_decl_annotations, consultez Annotating Function Behavior.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge pour les pilotes NDIS 6.0 et NDIS 5.1 (voir ProtocolCmCloseCall (NDIS 5.1)) dans Windows Vista. Pris en charge pour les pilotes NDIS 5.1 (voir ProtocolCmCloseCall (NDIS 5.1)) dans Windows XP.
Plateforme cible Windows
En-tête ndis.h (inclure Ndis.h)
IRQL <= DISPATCH_LEVEL

Voir aussi

NdisClMakeCall

NdisCmDeactivateVc

NdisCoSendNetBufferLists

ProtocolCmMakeCall