Schnittstelle für serielle E/A-Anforderungen
Um ein Peripheriegerät zu steuern, das mit einem Port auf einem seriellen Controller verbunden ist, sendet eine Clientanwendung oder ein Peripheriegerätetreiber E/A-Anforderungen an den Port. Ein Client verwendet IRP_MJ_WRITE - und IRP_MJ_READ-Anforderungen , um Daten an einen seriellen Port zu übertragen und von diesem zu empfangen. Darüber hinaus definiert Windows eine Reihe von seriellen E/A-Steuerungsanforderungen (IOCTLs), die ein Client zum Konfigurieren eines seriellen Ports verwenden kann.
Die seriellen IRP_MJ_XXX-Anforderungen und serielle IOCTLs bilden zusammen eine serielle E/A-Anforderungsschnittstelle, die für eine Reihe von seriellen Controllergeräten unterstützt wird. Diese Schnittstelle wird vom Serial.sys-Treiber und von der Kombination aus SerCx2 oder SerCx und einem erweiterungsbasierten seriellen Controllertreiber unterstützt.
SerCx2, SerCx und Serial.sys unterstützen viele der gleichen seriellen IOCTLs. SerCx2, SerCx und Serial.sys jedoch verschiedene Teilmengen der IOCTLs unterstützen, die in Anforderungen zur seriellen Gerätesteuerung angegeben sind. In der folgenden Tabelle sind die Teilmengen der IOCTLs zusammengefasst, die von SerCx2, SerCx und Serial.sys unterstützt werden. Ein Ja-Eintrag in der Tabelle gibt an, dass die erweiterung oder der Treiber des seriellen Frameworks die entsprechende IOCTL unterstützt, und ein Nein-Eintrag gibt an, dass dies nicht der Fall ist.
Serielle iOCTL | SerCx2 | SerCx | Serial.sys |
---|---|---|---|
Ja |
Ja |
Nein |
|
Nein |
Ja |
Ja |
|
(siehe Hinweis 1). |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Nein |
Nein |
Ja |
|
Ja |
Ja |
Ja |
|
Siehe Hinweis 2. |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
(siehe Hinweis 1). |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
IOCTL_SERIAL_GET_MODEM_CONTROL (siehe Hinweis 4.) |
Ja |
Ja |
Ja |
Nein |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Nein |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Nein |
Ja |
Ja |
|
Nein |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
IOCTL_SERIAL_RESET_DEVICE (siehe Hinweis 5.) |
Nein |
Nein |
Ja |
Ja |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Siehe Hinweis 2. |
Ja |
Ja |
|
(siehe Hinweis 1). |
Ja |
Ja |
|
(siehe Hinweis 1). |
Ja |
Ja |
|
IOCTL_SERIAL_SET_HANDFLOW (Siehe Hinweis 3.) |
Ja |
Ja |
Ja |
Ja |
Ja |
Ja |
|
IOCTL_SERIAL_SET_MODEM_CONTROL (Siehe Hinweis 4.) |
Ja |
Ja |
Ja |
Ja |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Nein |
Ja |
Ja |
|
Nein |
Ja |
Ja |
|
Ja |
Ja |
Ja |
|
Nein |
Ja |
Ja |
SerCx2 unterstützt diese IOCTL je nach Implementierung des seriellen Controllertreibers und den Funktionen der seriellen Controllerhardware möglicherweise nicht.
SerCx2 unterstützt keine Sonderzeichen. SerCx2 schließt eine IOCTL_SERIAL_SET_CHARS-Anforderung immer mit einem STATUS_SUCCESS Statuscode ab, legt jedoch keine Sonderzeichen fest oder führt als Reaktion auf diese Anforderung keine anderen Vorgänge aus. Für eine IOCTL_SERIAL_GET_CHARS-Anforderung legt SerCx2 alle Zeichenwerte in der SERIAL_CHARS-Struktur auf NULL fest und schließt die Anforderung mit einem STATUS_SUCCESS Statuscode ab.
SerCx2 und SerCx unterstützen nur Teilmengen der Flags, die für die Elemente FlowReplace und ControlHandShake der SERIAL_HANDFLOW-Struktur definiert sind. Serial.sys unterstützt alle diese Flags. Weitere Informationen finden Sie unter SERIAL_HANDFLOW.
Die IOCTL_SERIAL_GET_MODEM_CONTROL - und IOCTL_SERIAL_SET_MODEM_CONTROL-Anforderungen werden hauptsächlich für Hardwaretests verwendet. Für die Modemsteuerungsvorgänge ist kein Standardregisterlayout definiert. Peripherietreiber, die IOCTLs für die Modemsteuerung verwenden, riskieren, sich von den Hardwarefeatures eines bestimmten seriellen Controllers abhängig zu machen.
Der Serial.sys-Treiber führt immer eine IOCTL_SERIAL_RESET_DEVICE-Anforderung mit STATUS_SUCCESS aus, führt jedoch keinen Vorgang als Reaktion auf diese Anforderung aus. SerCx2 und SerCx unterstützen IOCTL_SERIAL_RESET_DEVICE Anforderungen nicht und führen diese Anforderungen immer mit STATUS_NOT_IMPLEMENTED aus.
Weitere Informationen zu IOCTL_SERIAL_XXX-Anforderungen sowie Lese- und Schreibanforderungen für serielle Controller finden Sie im Ntddser.h-Header .