Interfaccia di richiesta di I/O seriale
Per controllare un dispositivo periferico connesso a una porta su un controller seriale, un'applicazione client o un driver di dispositivo periferico invia richieste di I/O alla porta. Un client usa IRP_MJ_WRITE e IRP_MJ_READ richieste per trasmettere e ricevere dati da una porta seriale. Windows definisce inoltre un set di richieste di controllo I/O seriali (IOCTL) che un client può usare per configurare una porta seriale.
Le richieste seriali IRP_MJ_XXX e IOCTL seriali formano un'interfaccia di richiesta di I/O seriale supportata in un intervallo di dispositivi controller seriali. Questa interfaccia è supportata dal driver Serial.sys e dalla combinazione di SerCx2 o SerCx e un driver di controller seriale basato su estensione.
SerCx2, SerCx e Serial.sys supportano molti degli stessi IOCTL seriali. SerCx2, SerCx e Serial.sys supportano tuttavia subset diversi dei valori IOCTL specificati nelle richieste di controllo dei dispositivi seriali. La tabella seguente riepiloga i subset di IOCTLs supportati da SerCx2, SerCx e Serial.sys. Una voce Sì nella tabella indica che l'estensione o il driver del framework seriale supporta l'IOCTL corrispondente e una voce No indica che non lo è.
IOCTL seriale | SerCx2 | SerCx | Serial.sys |
---|---|---|---|
Sì |
Sì |
No |
|
No |
Sì |
Sì |
|
Vedere la nota 1. |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
No |
No |
Sì |
|
Sì |
Sì |
Sì |
|
Vedere la nota 2. |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
Vedere la nota 1. |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
IOCTL_SERIAL_GET_MODEM_CONTROL (vedere la nota 4.) |
Sì |
Sì |
Sì |
No |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
No |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
No |
Sì |
Sì |
|
No |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
IOCTL_SERIAL_RESET_DEVICE (vedere la nota 5). |
No |
No |
Sì |
Sì |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
Vedere la nota 2. |
Sì |
Sì |
|
Vedere la nota 1. |
Sì |
Sì |
|
Vedere la nota 1. |
Sì |
Sì |
|
IOCTL_SERIAL_SET_HANDFLOW (vedere la nota 3.) |
Sì |
Sì |
Sì |
Sì |
Sì |
Sì |
|
IOCTL_SERIAL_SET_MODEM_CONTROL (vedere la nota 4.) |
Sì |
Sì |
Sì |
Sì |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
No |
Sì |
Sì |
|
No |
Sì |
Sì |
|
Sì |
Sì |
Sì |
|
No |
Sì |
Sì |
SerCx2 può o non supportare questo IOCTL a seconda dell'implementazione del driver del controller seriale e delle funzionalità dell'hardware del controller seriale.
SerCx2 non supporta caratteri speciali. SerCx2 completa sempre una richiesta di IOCTL_SERIAL_SET_CHARS con un codice di stato STATUS_SUCCESS, ma non imposta alcun carattere speciale o esegue qualsiasi altra operazione in risposta a questa richiesta. Per una richiesta di IOCTL_SERIAL_GET_CHARS , SerCx2 imposta tutti i valori di carattere nella struttura SERIAL_CHARS su Null e completa la richiesta con un codice di stato STATUS_SUCCESS.
SerCx2 e SerCx supportano solo subset dei flag definiti per i membri FlowReplace e ControlHandShake della struttura SERIAL_HANDFLOW . Serial.sys supporta tutti questi flag. Per altre informazioni, vedere SERIAL_HANDFLOW.
Le richieste di IOCTL_SERIAL_GET_MODEM_CONTROL e IOCTL_SERIAL_SET_MODEM_CONTROL vengono usate principalmente per i test hardware. Non è definito alcun layout di registro standard per le operazioni di controllo modem. I driver periferici che usano IOCTLs del controllo modem rischiano di dipendere dalle funzionalità hardware di un determinato controller seriale.
Il driver Serial.sys completa sempre una richiesta di IOCTL_SERIAL_RESET_DEVICE con STATUS_SUCCESS , ma non esegue alcuna operazione in risposta a questa richiesta. SerCx2 e SerCx non supportano richieste di IOCTL_SERIAL_RESET_DEVICE e completano sempre queste richieste con STATUS_NOT_IMPLEMENTED.
Per altre informazioni sulle richieste IOCTL_SERIAL_XXX e sulle richieste di lettura e scrittura per i controller seriali, vedere l'intestazione ntddser.h .