PROTOCOL_CM_CLOSE_CALL fonction de rappel (ndis.h)
La fonction ProtocolCmCloseCall est une fonction requise qui met fin à un appel existant et libère toutes les ressources allouées par le gestionnaire d’appels pour l’appel.
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
)
{...}
[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 des gestionnaires d’appels ProtocolCmMakeCall fonction.
[in, optional] CallMgrPartyContext
Spécifie le handle, le cas échéant, dans 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 clientes orientées connexion qui doivent être envoyées sur la connexion avant la fin de l’appel. Ce paramètre est 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 à closeData, zéro si CloseData est NULL.
ProtocolCmCloseCall retourne l’état de ses opérations comme l’une des suivantes :
Retourner le code | Description |
---|---|
|
Indique que le gestionnaire d’appels a correctement terminé l’appel. |
|
Indique que le gestionnaire d’appels termine la demande pour arrêter l’appel de façon asynchrone. Lorsque le gestionnaire d’appels a terminé toutes les opérations requises pour terminer la connexion, il doit ensuite appeler NdisCmCloseCallComplete pour signaler à NDIS que l’appel a été fermé. |
|
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 simultanées avec la fin d’un appel. |
|
Indique que le gestionnaire d’appels n’a pas pu arrêter l’appel. L’erreur réelle retournée peut être un état propagé à partir d’une autre routine de bibliothèque NDIS. |
ProtocolCmCloseCall communiqué avec des périphériques de contrôle réseau ou d’autres acteurs spécifiques au support, comme cela est nécessaire par son média, pour mettre fin à une connexion entre le nœud local et un nœud distant. Si le gestionnaire d’appels est tenu de communiquer avec les appareils de contrôle réseau (par exemple, un commutateur réseau), il doit utiliser une connexion virtuelle à l’appareil 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’est pas NULL et si l’envoi de données à l’arrêt de la connexion est pris en charge par le support géré par ce gestionnaire d’appels, le gestionnaire d’appels doit transmettre les données spécifiées à CloseData au nœud distant avant d’effectuer l’arrêt de l’appel. Si l’envoi de données simultanées à une connexion arrêtée n’est pas pris en charge, les gestionnaires d’appels doivent retourner NDIS_STATUS_INVALID_DATA.
Si ProtocolCmCloseCall est passé une explicite CallMgrPartyContext, 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, le cas échéant pour son type de média, pour mettre fin à 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. L’échec de la mise en production, de la désallocation ou de la désactivation de 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 à CallMgrPartyContext ont été libérées, le gestionnaire d’appels doit appeler NdisCmDeactivateVc. Cela informe NDIS et le pilote miniport sous-jacent, le cas échéant, de s’attendre à aucun transfert supplémentaire sur le VC donné.
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 fonctions permet d'Analyse du code pour les pilotes, de vérificateur de pilotes statiques (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des 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 lorsque vous exécutez les 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 annoter le comportement de la fonction.
Exigence | Valeur |
---|---|
client minimum 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 |
d’en-tête | ndis.h (include Ndis.h) |
IRQL | <= DISPATCH_LEVEL |