Share via


UcmTcpciPortControllerAlert, fonction (ucmtcpciportcontroller.h)

Envoie des informations sur les alertes matérielles reçues sur le contrôleur de port à UcmTcpciCx.

Syntaxe

void UcmTcpciPortControllerAlert(
  [in] UCMTCPCIPORTCONTROLLER               PortControllerObject,
       PUCMTCPCI_PORT_CONTROLLER_ALERT_DATA AlertData,
       size_t                               NumberOfAlerts
);

Paramètres

[in] PortControllerObject

Gérez l’objet contrôleur de port que le pilote client a reçu lors de l’appel précédent à UcmTcpciPortControllerCreate.

AlertData

Pointeur vers un tableau de UCMTCPCI_PORT_CONTROLLER_ALERT_DATA qui contient toutes les alertes actuelles qui n’ont pas été envoyées à UcmTcpciCx. Cette valeur ne peut pas être NULL.

NumberOfAlerts

Nombre d’éléments du tableau pointés par AlertData. Cette valeur ne peut pas être 0.

Valeur de retour

None

Remarques

UcmTcpciPortControllerAlert retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette fonction inline peut retourner un code d’erreur NTSTATUS approprié.

Le pilote client doit appeler UcmTcpciPortControllerAlert qui a été précédemment démarré en appelant UcmTcpciPortControllerStart.

Lorsqu’une alerte matérielle se produit, le pilote client doit déterminer le type d’alertes, extraire toutes les informations auxiliaires associées à cette alerte, telles qu’un message PD, remplir le tableau, puis appeler UcmTcpciPortControllerAlert.

Le pilote client doit signaler les alertes de manière séquentielle. Le pilote ne doit pas appeler cette méthode sur les threads qui s’exécutent simultanément, car cela peut entraîner des conditions de course. Même si l’extension de classe garantit que toutes les données internes sont correctement protégées par verrouillage, si le pilote appelle UcmTcpciPortControllerAlert à partir de plusieurs threads en même temps sans synchronisation externe, il n’est pas garanti que l’ensemble des alertes reçues soit à jour. Pour éviter ce scénario, le pilote doit appeler cette méthode dans la routine de service d’interruption (ISR) ou un objet DPC mis en file d’attente pour l’ISR. L’ISR doit être synchronisé correctement pour n’avoir qu’un seul instance en cours d’exécution à un moment donné.

Le pilote client doit supposer que l’extension de classe peut envoyer des demandes avant que UcmTcpciPortControllerAlert ne retourne, à partir de cet appel.

Lors de la gestion des alertes, UcmTcpciCx peut envoyer des demandes matérielles au pilote client avant le retour de l’appel UcmTcpciPortControllerAlert . Si le pilote détient un verrou lors de l’appel de UcmTcpciPortControllerAlert et tente également d’acquérir le même verrou lors de la gestion de la demande matérielle, un blocage peut se produire.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10
Serveur minimal pris en charge Windows Server 2016
Plateforme cible Windows
En-tête ucmtcpciportcontroller.h
IRQL <=DISPATCH_LEVEL

Voir aussi