Partager via


EVT_SERCX_CONTROL fonction de rappel (sercx.h)

La fonction de rappel d’événement EvtSerCxControl gère une demande de contrôle d’E/S qui a un code de contrôle d’E/S (IOCTL) pris en charge par l’extension de l’infrastructure série (SerCx).

Syntaxe

EVT_SERCX_CONTROL EvtSercxControl;

NTSTATUS EvtSercxControl(
  [in] WDFDEVICE Device,
  [in] WDFREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Paramètres

[in] Device

Un handle WDFDEVICE pour l’objet d’appareil framework qui représente le contrôleur série.

[in] Request

Handle WDFREQUEST pour l’objet de demande d’infrastructure qui représente la demande de contrôle d’E/S.

[in] OutputBufferLength

Spécifie la longueur, en octets, de la mémoire tampon de sortie pour la demande de contrôle d’E/S spécifiée par le paramètre Request .

[in] InputBufferLength

Spécifie la longueur, en octets, de la mémoire tampon d’entrée pour la demande de contrôle d’E/S spécifiée par le paramètre Request .

[in] IoControlCode

Spécifie le IOCTL à partir de la demande de contrôle d’E/S spécifiée par le paramètre Request .

Valeur retournée

La fonction EvtSerCxControl retourne STATUS_SUCCESS si l’appel réussit. Sinon, il retourne une erreur appropriée status code. Pour plus d'informations, consultez la section Notes qui suit.

Remarques

Le pilote de contrôleur série est requis pour implémenter cette fonction de rappel. SerCx appelle cette fonction pour transmettre une demande de contrôle d’E/S au pilote du contrôleur pour traitement. Avant que cette fonction ne retourne, elle doit terminer la demande en effectuant l’opération demandée ou en retournant une erreur status. Un pilote qui n’implémente pas la prise en charge d’une requête particulière doit retourner le status d’erreur STATUS_NOT_IMPLEMENTED pour cette demande.

En règle générale, la fonction EvtSerCxControl doit se synchroniser avec l’ISR du pilote du contrôleur avant que cette fonction ne modifie les paramètres dans les registres matériels du contrôleur série.

La valeur de retour de la fonction EvtSerCxControl doit correspondre à la valeur status que cette fonction écrit dans le bloc status de la demande de contrôle d’E/S. SerCx utilise la valeur de retour pour suivre l’état du pilote de contrôleur et du matériel du contrôleur série.

Voici la liste des IOCTL que cette fonction de rappel doit être prête à gérer :

IOCTL_SERIAL_CLEAR_STATSIOCTL_SERIAL_CLR_DTRIOCTL_SERIAL_CLR_RTSIOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARSIOCTL_SERIAL_GET_COMMSTATUS IOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_GET_HANDFLOW IOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_IMMEDIATE_CHARIOCTL_SERIAL_GET_LINE_CONTROLIOCTL_SERIAL_GET_MODEM_CONTROLIOCTL_SERIAL_GET_MODEMSTATUSIOCTL_SERIAL_GET_PROPERTIESIOCTL_SERIAL_GET_STATSIOCTL_SERIAL_LSRMST_INSERTIOCTL_SERIAL_SET_BAUD_RATEIOCTL_SERIAL_SET_BREAK_OFF IOCTL_SERIAL_SET_BREAK_ONIOCTL_SERIAL_SET_CHARS IOCTL_SERIAL_SET_DTRIOCTL_SERIAL_SET_FIFO_CONTROLIOCTL_SERIAL_SET_HANDFLOWIOCTL_SERIAL_SET_LINE_CONTROLIOCTL_SERIAL_SET_MODEM_CONTROL IOCTL_IOCTL_SERIAL_SET_RTS SERIAL_SET_XOFFIOCTL_SERIAL_SET_XONIOCTL_SERIAL_XOFF_COUNTER Pour inscrire une fonction de rappel EvtSerCxControl, le pilote du contrôleur appelle la méthode SerCxInitialize pendant le rappel EvtDriverDeviceAdd.

Exemples

Le type de fonction de ce rappel est déclaré dans Sercx.h, comme suit.

typedef NTSTATUS
  EVT_SERCX_CONTROL(
    __in WDFREQUEST Request,
    __in size_t OutputBufferLength,
    __in size_t InputBufferLength,
    __in ULONG IoControlCode
    );

Pour définir une fonction de rappel EvtSerCxControl nommée MyEvtSerCxControl, vous devez d’abord fournir une déclaration de fonction requise par Static Driver Verifier (SDV) et d’autres outils de vérification, comme suit.

EVT_SERCX_CONTROL MyEvtSerCxControl;

Ensuite, implémentez votre fonction de rappel comme suit.

NTSTATUS
  MyEvtSerCxControl(
    __in WDFREQUEST Request,
    __in size_t OutputBufferLength,
    __in size_t InputBufferLength,
    __in ULONG IoControlCode
    )
{ ... }

Pour plus d’informations sur les exigences SDV pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes KMDF.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 8.
Plateforme cible Desktop (Expérience utilisateur)
En-tête sercx.h
IRQL Appelé à IRQL <= DISPATCH_LEVEL

Voir aussi

EvtDriverDeviceAdd

SerCxInitialize