Interface de demande d’E/S série
Pour contrôler un périphérique connecté à un port sur un contrôleur série, une application cliente ou un pilote de périphérique envoie des demandes d’E/S au port. Un client utilise des requêtes IRP_MJ_WRITE et IRP_MJ_READ pour transmettre et recevoir des données à partir d’un port série. En outre, Windows définit un ensemble de demandes de contrôle d’E/S série (IOCTL) qu’un client peut utiliser pour configurer un port série.
Les requêtes série IRP_MJ_XXX et les IOCTL série forment ensemble une interface de demande d’E/S série qui est prise en charge sur une gamme de périphériques de contrôleur série. Cette interface est prise en charge par le pilote Serial.sys et par la combinaison de SerCx2 ou SerCx et d’un pilote de contrôleur série basé sur une extension.
SerCx2, SerCx et Serial.sys prennent en charge un grand nombre des mêmes IOCTL série. Toutefois, SerCx2, SerCx et Serial.sys prennent en charge différents sous-ensembles des IOCTL spécifiés dans les demandes de contrôle d’appareil série. Le tableau suivant récapitule les sous-ensembles d’IOCTL pris en charge par SerCx2, SerCx et Serial.sys. Une entrée Oui dans le tableau indique que l’extension ou le pilote d’infrastructure série prend en charge l’IOCTL correspondant, et une entrée Non indique que ce n’est pas le cas.
IOCTL série | SerCx2 | SerCx | Serial.sys |
---|---|---|---|
Oui |
Oui |
Non |
|
Non |
Oui |
Oui |
|
Consultez la remarque 1. |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Non |
Non |
Oui |
|
Oui |
Oui |
Oui |
|
Voir la note 2. |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Consultez la remarque 1. |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
IOCTL_SERIAL_GET_MODEM_CONTROL (voir la note 4.) |
Oui |
Oui |
Oui |
Non |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Non |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Non |
Oui |
Oui |
|
Non |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
IOCTL_SERIAL_RESET_DEVICE (voir la note 5.) |
Non |
Non |
Oui |
Oui |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Voir la note 2. |
Oui |
Oui |
|
Consultez la remarque 1. |
Oui |
Oui |
|
Consultez la remarque 1. |
Oui |
Oui |
|
IOCTL_SERIAL_SET_HANDFLOW (voir la note 3.) |
Oui |
Oui |
Oui |
Oui |
Oui |
Oui |
|
IOCTL_SERIAL_SET_MODEM_CONTROL (voir la note 4.) |
Oui |
Oui |
Oui |
Oui |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Non |
Oui |
Oui |
|
Non |
Oui |
Oui |
|
Oui |
Oui |
Oui |
|
Non |
Oui |
Oui |
SerCx2 peut ou non prendre en charge ce IOCTL en fonction de l’implémentation du pilote de contrôleur série et des fonctionnalités du matériel du contrôleur série.
SerCx2 ne prend pas en charge les caractères spéciaux. SerCx2 effectue toujours une requête IOCTL_SERIAL_SET_CHARS avec un code d’état STATUS_SUCCESS, mais ne définit aucun caractère spécial ni n’effectue aucune autre opération en réponse à cette demande. Pour une demande de IOCTL_SERIAL_GET_CHARS , SerCx2 définit toutes les valeurs de caractères de la structure SERIAL_CHARS sur null et termine la demande avec un code d’état STATUS_SUCCESS.
SerCx2 et SerCx prennent uniquement en charge les sous-ensembles des indicateurs définis pour les membres FlowReplace et ControlHandShake de la structure SERIAL_HANDFLOW . Serial.sys prend en charge tous ces indicateurs. Pour plus d’informations, consultez SERIAL_HANDFLOW.
Les requêtes IOCTL_SERIAL_GET_MODEM_CONTROL et IOCTL_SERIAL_SET_MODEM_CONTROL sont principalement utilisées pour les tests matériels. Aucune disposition de registre standard n’est définie pour les opérations de contrôle du modem. Les pilotes périphériques qui utilisent des IOCTL de contrôle de modem risquent de se rendre dépendants des fonctionnalités matérielles d’un contrôleur série particulier.
Le pilote Serial.sys effectue toujours une demande de IOCTL_SERIAL_RESET_DEVICE avec STATUS_SUCCESS, mais n’effectue aucune opération en réponse à cette demande. SerCx2 et SerCx ne prennent pas en charge les requêtes IOCTL_SERIAL_RESET_DEVICE et effectuent toujours ces demandes avec STATUS_NOT_IMPLEMENTED.
Pour plus d’informations sur les requêtes IOCTL_SERIAL_XXX et les demandes de lecture et d’écriture pour les contrôleurs série, consultez l’en-tête ntddser.h .