Serielle IRP-Hauptfunktionscodes

In diesem Thema werden die seriellen IRP-Hauptfunktionscodes dokumentiert.

Header: Wdm.h (Einschließen von Wdm.h oder Ntddk.h)

IRP_MJ_CREATE

Die IRP_MJ_CREATE-Anforderung öffnet ein serielles Gerät.

Sendeszenario

Ein Client muss ein serielles Gerät öffnen, bevor er auf den Port oder ein gerät zugreifen kann, das mit dem Port verbunden ist.

Eingabeparameter

Keine.

Ausgabeparameter

Keine.

E/A-status-Block

Das Feld Information ist auf 0 (null) festgelegt.

Das Feld Status ist auf einen der folgenden Werte festgelegt:

Statuswert BESCHREIBUNG
STATUS_SUCCESS Das serielle Gerät wurde erfolgreich geöffnet.
STATUS_ACCESS_DENIED Das Gerät ist bereits geöffnet.
STATUS_DELETE_PENDING Serial ist gerade dabei, das Gerät zu entfernen.
STATUS_INSUFFICIENT_RESOURCES Das Gerät befindet sich nicht in einem Plug & Play Status Gestartet, oder der Treiber konnte keine interne Datenstruktur zuordnen.
STATUS_NOT_A_DIRECTORY Ein serielles Gerät kann nicht als Verzeichnis geöffnet werden.
STATUS_PENDING Serial hat die Anforderung zur späteren Verarbeitung in die Warteschlange gestellt.
STATUS_SHARED_IRQ_BUSY Der dem Gerät zugewiesene Interrupt wird von einem anderen geöffneten Gerät verwendet.

Vorgang

Ein serielles Gerät muss geöffnet werden, bevor es verwendet werden kann. Ein serielles Gerät ist ein exklusives Gerät; An einem Port kann zu einem bestimmten Zeitpunkt nur eine Datei geöffnet werden.

IRP_MJ_DEVICE_CONTROL

Die IRP_MJ_DEVICE_CONTROL-Anforderung betreibt einen seriellen Port.

Sendeszenario

Ein Client verwendet Gerätesteuerungsanforderungen für Folgendes:

  • Abrufen von Informationen zum Port
  • Abrufen und Festlegen von Registern
  • Abrufen und Festlegen von Betriebsmodi

Eine Beschreibung der von Serial unterstützten Gerätesteuerungsanforderungen finden Sie im Ntddser.h-Header .

Eingabeparameter

Anforderungsspezifisch

Ausgabeparameter

Anforderungsspezifisch

E/A-status-Block

Anforderungsspezifisch

Vorgang

Anforderungsspezifisch

IRP_MJ_FLUSH_BUFFERS

Die IRP_MJ_FLUSH_BUFFER Anforderung leert den internen Schreibpuffer eines seriellen Geräts.

Sendeszenario

Ein Client verwendet eine Leerungsanforderung, um zu bestimmen, wann serial alle Schreibanforderungen abgeschlossen hat, die der Client vor der Leerungsanforderung gesendet hat.

Eingabeparameter

Keine.

Ausgabeparameter

Keine.

E/A-status-Block

Der Information-Member ist auf 0 (null) festgelegt.

Das Status-Element wird auf einen der folgenden status Werte festgelegt:

Statuswert BESCHREIBUNG
STATUS_SUCCESS Die Anforderung wurde erfolgreich abgeschlossen.
STATUS_CANCELLED Ein Client hat die Anforderung abgebrochen. Serial bricht auch eine Anforderung ab, wenn ein Gerätefehler auftritt, und Serial ist so konfiguriert, dass eine Anforderung abgebrochen wird, wenn ein Gerätefehler vorliegt.
STATUS_DELETE_PENDING Der Treiber entfernt gerade das Gerät.
STATUS_PENDING Serial hat die Anforderung zur späteren Verarbeitung in die Warteschlange gestellt.

Vorgang

Serielle Warteschlangen und beginnen mit der Verarbeitung von Schreib- und Leerungsanforderungen in der Reihenfolge, in der die Anforderungen empfangen werden. Serial schließt eine Leerungsanforderung ab, nachdem IoCompleteRequest für alle Schreibanforderungen aufgerufen wurde, die vor einer Leerungsanforderung empfangen wurden. Der Abschluss der Leerungsanforderung bedeutet jedoch nicht, dass alle zuvor gestarteten Schreibanforderungen von anderen Treibern im Gerätestapel abgeschlossen werden. Beispielsweise kann ein Filtertreiber weiterhin eine Schreibanforderung verarbeiten. Ein Client muss überprüfen, ob eine Schreibanforderung von allen Treibern im Gerätestapel abgeschlossen wird, bevor der Client versucht, die IRP einer Schreibanforderung frei zu geben oder wiederzuverwenden.

IRP_MJ_INTERNAL_DEVICE_CONTROL

Die IRP_MJ_INTERNAL_DEVICE_CONTROL-Anforderung legt interne Betriebsmodi auf einem seriellen Gerät fest.

Sendeszenario

Ein Client verwendet interne Gerätesteuerungsanforderungen für Folgendes:

  • Abrufen und Zurücksetzen grundlegender Einstellungen
  • Steuern des Warte-/Aktivierungsvorgangs

Eine Beschreibung der internen Gerätesteuerungsanforderungen finden Sie im Ntddser.h-Header .

Eingabeparameter

Anforderungsspezifisch

Ausgabeparameter

Anforderungsspezifisch

E/A-status-Block

Anforderungsspezifisch

Vorgang

Anforderungsspezifisch

IRP_MJ_PNP

Die IRP_MJ_PNP-Anforderung unterstützt Plug & Play.

Sendeszenario

Der PnP-Manager sendet IRP_MJ_PNP Anforderungen zum Abfragen von Geräten und zum Starten, Beenden und Entfernen von Geräten.

Eingabeparameter

Anforderungsspezifisch

Ausgabeparameter

Anforderungsspezifisch

E/A-status-Block

Anforderungsspezifisch

Vorgang

Serial unterstützt die folgenden Plug & Play Anforderungen:

Serial sendet alle anderen Plug & Play Anforderungen ohne weitere Verarbeitung über den Gerätestapel.

Serial führt die folgende serielle Verarbeitung für Plug & Play Anforderungen aus:

IRP_MN_QUERY_ID (Geben Sie BusQueryHardwardIDs ein)

Wenn sich ein serielles Gerät auf einem Multiport-ISA-Karte befindet, fügt Serial die breite Zeichenfolge "*PNP0502" an die Zeichenfolge der Hardware-IDs an.

IRP_MN_FILTER_RESOURCE_REQUIREMENTS

Serielle Geräte auf einer Multiport-ISA Karte denselben Interrupt status Registrieren und denselben Interrupt verwenden.

Eine Beschreibung des generischen Vorgangs von Plug & Play Anforderungen finden Sie unter Plug & Play Neben-IRPs.

IRP_MJ_POWER

Die IRP_MJ_POWER Anforderung steuert die Energieverwaltung.

Sendeszenario

Der Power Manager verwendet Energieanforderungen, um Energiezustände abzufragen und festzulegen.

Eingabeparameter

Anforderungsspezifisch

Ausgabeparameter

Anforderungsspezifisch

E/A-status-Block

Anforderungsspezifisch

Vorgang

Serial unterstützt die folgenden Energieanforderungen:

Serial sendet alle anderen Energieanforderungen nach unten auf dem Gerätestapel, um von einem Treiber auf niedrigerer Ebene abgeschlossen zu werden.

Serial ist der Standardbesitzer der Energierichtlinie für einen seriellen Gerätestapel, der Serial als Funktionstreiber oder einen Filtertreiber auf niedrigerer Ebene verwendet.

Weitere Informationen zum generischen Betrieb dieser Anforderungen finden Sie unter Regeln für die Behandlung von Power IRPs.

IRP_MJ_QUERY_INFORMATION

Die IRP_MJ_QUERY_INFORMATION Anforderung fragt die Dateiendeinformationen für ein serielles Gerät ab.

Sendeszenario

Ein Client verwendet eine Abfrageinformationsanforderung, um Standardinformationen und Positionsinformationen zu einer Datei abzurufen, die auf einem seriellen Gerät geöffnet wurde.

Eingabeparameter

Parameters.QueryFile.FileInformationClass ist auf FileStandardInformation oder FilePositionInformation festgelegt.

Ausgabeparameter

Parameter BESCHREIBUNG
FileStandardInformation Das AssociatedIrp.SystemBuffer-Element verweist auf eine vom Client zugewiesene FILE_STANDARD_INFORMATION-Struktur, die Serial zum Ausgeben von Standardinformationen verwendet.
FilePositionInformation Das AssociatedIrp.SystemBuffer-Element verweist auf eine vom Client zugewiesene FILE_POSITION_INFORMATION-Struktur, die Serial verwendet, um Positionsinformationen auszugeben.

E/A-status-Block

Wenn die Anforderung erfolgreich ist, wird der Member Information auf 0 festgelegt.

Das Statuselement ist auf einen der folgenden status Werte festgelegt:

Statuswert BESCHREIBUNG
STATUS_SUCCESS Die Anforderung wurde erfolgreich abgeschlossen.
STATUS_CANCELLED Ein Client hat die Anforderung abgebrochen. Serial bricht auch eine Anforderung ab, wenn ein Gerätefehler auftritt, und Serial ist so konfiguriert, dass eine Anforderung abgebrochen wird, wenn ein Gerätefehler vorliegt.
STATUS_DELETE_PENDING Serial ist gerade dabei, das Gerät zu entfernen.
STATUS_INVALID_PARAMETER Die angeforderten Informationen werden nicht unterstützt.
STATUS_PENDING Serial hat die Anforderung für die spätere Verarbeitung in die Warteschlange gestellt.

Vorgang

Serial unterstützt Anforderungen vom Typ FileStandardInformation und FilePositionInformation.

Die Standarddateiinformationen werden je nach Bedarf immer auf NULL oder FALSE festgelegt. Die Positionsinformationen sind immer auf Null festgelegt.

IRP_MJ_READ

Eine IRP_MJ_READ Anforderung überträgt Daten von einem seriellen Gerät an einen Client.

Sendeszenario

Ein Client verwendet eine Leseanforderung, wenn er Daten auf einem seriellen Gerät liest.

Eingabeparameter

Der Parameter.Read.Length-Member ist auf die Anzahl der Bytes festgelegt, die an den Lesepuffer des Clients übertragen werden sollen.

Ausgabeparameter

Das AssociatedIrp.SystemBuffer-Element verweist auf einen vom Client zugewiesenen Lesepuffer, in den serial kopierte Daten auf dem seriellen Gerät kopiert werden.

E/A-status-Block

Der Informationsmember ist auf die Anzahl der Bytes festgelegt, die in den Lesepuffer des Clients übertragen werden.

Der Statusmember ist auf einen der folgenden Werte festgelegt:

Statuswert BESCHREIBUNG
STATUS_SUCCESS Die Anforderung wurde erfolgreich abgeschlossen.
STATUS_CANCELLED Ein Client hat die Anforderung abgebrochen. Serial bricht auch eine Anforderung ab, wenn ein Gerätefehler auftritt, und Serial ist so konfiguriert, dass eine Anforderung abgebrochen wird, wenn ein Gerätefehler vorliegt.
STATUS_DELETE_PENDING Serial ist gerade dabei, das Gerät zu entfernen.
STATUS_PENDING Serial hat die Anforderung für die spätere Verarbeitung in die Warteschlange gestellt.
STATUS_TIMEOUT Die Zeit zum Abschließen der Anforderung überstieg den Gesamten timeoutwert oder den Intervalltimeoutwert.

Vorgang

Ein Client kann Timeoutereignisse verwenden, um eine Leseanforderung zu beenden. Beachten Sie jedoch, dass beim Öffnen eines seriellen Geräts die Timeouteinstellungen für das Gerät nicht definiert sind. Ein Kernelmodusclient kann eine IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS verwenden, um Timeoutparameter auf Null festzulegen (es werden keine Timeoutereignisse verwendet). Benutzermodus- und Kernelmodusclients können eine IOCTL_SERIAL_SET_TIMEOUTS Anforderung verwenden, um Timeoutparameter festzulegen.

Weitere Informationen zu Lese- und Schreibtimeouts finden Sie unter Festlegen von Lese- und Schreibtimeouts für ein serielles Gerät.

IRP_MJ_SET_INFORMATION

Die IRP_MJ_SET_INFORMATION-Anforderung legt die Dateiendeinformationen zu einem seriellen Gerät fest.

Sendeszenario

Ein Client verwendet eine festgelegte Informationsanforderung, um die aktuelle Dateiendeposition einer Datei zu ändern, die auf einem seriellen Gerät geöffnet wird.

Eingabeparameter

Das Parameters.SetFile.FileInformationClass-Element ist auf FileEndOfFileInformation oder FileAllocationInformation festgelegt.

Ausgabeparameter

Keine.

E/A-status-Block

Wenn die Anforderung erfolgreich ist, wird der Member Information auf 0 festgelegt.

Das Statuselement ist auf einen der folgenden status Werte festgelegt:

Statuswert BESCHREIBUNG
STATUS_SUCCESS Die Anforderung wurde erfolgreich abgeschlossen.
STATUS_CANCELLED Ein Client hat die Anforderung abgebrochen. Serial bricht auch eine Anforderung ab, wenn ein Gerätefehler auftritt, und Serial ist so konfiguriert, dass eine Anforderung abgebrochen wird, wenn ein Gerätefehler vorliegt.
STATUS_DELETE_PENDING Serial ist gerade dabei, das Gerät zu entfernen.
STATUS_INVALID_PARAMETER Die angegebenen Dateiendeinformationen werden nicht unterstützt.
STATUS_PENDING Serial hat die Anforderung für die spätere Verarbeitung in die Warteschlange gestellt.

Vorgang

Serial unterstützt Anforderungen vom Typ FileEndOfFileInformation und FileAllocationInformation. Serial legt jedoch keine Dateiinformationen fest. Die Position am Ende der Datei ist immer auf null festgelegt.

IRP_MJ_SYSTEM_CONTROL

Die IRP_MJ_SYSTEM_CONTROL-Anforderung unterstützt WMI-Anforderungen.

Sendeszenario

Eine WMI-Kernelmoduskomponente kann jederzeit eine IRP_MJ_SYSTEM_CONTROL Anforderung senden, nachdem serial registriert wurde, als WMI-Anbieter für ein serielles Gerät. WMI-IRPs werden in der Regel gesendet, wenn ein Benutzermodusdaten-Consumer WMI-Daten angefordert hat.

Eingabeparameter

Anforderungsspezifisch

Ausgabeparameter

Anforderungsspezifisch

E/A-status-Block

Für WMI-Anforderungen legt Serial das Feld Status auf einen der folgenden Werte fest:

Statuswert BESCHREIBUNG
STATUS_SUCCESS Die Anforderung wurde erfolgreich abgeschlossen.
STATUS_BUFFER_TOO_SMALL Die Größe des Ausgabepuffers in Bytes ist kleiner als die erforderliche Größe der angeforderten Informationen.
STATUS_INSUFFICIENT_RESOURCES Es gab nicht genügend Systemressourcen, um den Namen des seriellen Ports zu speichern.
STATUS_INVALID_DEVICE_REQUEST Die Anforderung ist ungültig.
STATUS_WMI_GUID_NOT_FOUND Die WMI-GUID wird nicht unterstützt.

Vorgang

Serial verwendet WmiSystemControl , um WMI-Systemsteuerungsanforderungen zu verarbeiten. Serial registriert die folgenden Arten von WMI-Bibliotheksrückrufroutinen, die WmiSystemControl aufruft, um WMI-Anforderungen zu behandeln, die an ein Gerät gesendet werden:

Serial unterstützt keine anderen Systemsteuerungsanforderungen. Bei Nicht-WMI-Anforderungen überspringt Serial den aktuellen Stapelspeicherort und sendet die Anforderung auf den Gerätestapel.

Serial registriert die in der folgenden Tabelle beschriebene WMI-GUIDS.

Serielle WMI-GUID Zugeordnete Datenstruktur

SERIAL_PORT_WMI_NAME_GUID USHORT gefolgt von einer WCSTR
SERIAL_PORT_WMI_COMM_GUID SERIAL_WMI_COMM_DATA
SERIAL_PORT_WMI_HW_GUID SERIAL_WMI_HW_DATA
SERIAL_PORT_WMI_PERF_GUID SERIAL_WMI_PERF_DATA
SERIAL_PORT_WMI_PROPERTIES_GUID WMI_SERIAL_PORT_PROPERTIES

Der WMI-Name eines seriellen Geräts ist der Wert des Eintragswerts PortName unter dem Plug & Play Registrierungsschlüssels für das Gerät.

IRP_MJ_WRITE

Eine IRP_MJ_WRITE Anforderung überträgt Daten von einem Client auf ein serielles Gerät.

Sendeszenario

Ein Client verwendet eine Schreibanforderung, wenn daten auf ein serielles Gerät geschrieben werden.

Eingabeparameter

Der Parameter.Write.Length-Member ist auf die Anzahl der Bytes festgelegt, die aus einem clientseitig zugewiesenen Schreibpuffer auf ein serielles Gerät kopiert werden sollen.

Das AssociatedIrp.SystemBuffer-Element verweist auf einen vom Client zugewiesenen Schreibpuffer, aus dem Serial Daten auf das serielle Gerät kopiert.

Ausgabeparameter

Keine.

E/A-status-Block

Der Member Information ist auf die Anzahl der Bytes festgelegt, die tatsächlich aus dem Schreibpuffer des Clients auf das serielle Gerät kopiert wurden.

Der Statusmember ist auf einen der folgenden Werte festgelegt:

Statuswert BESCHREIBUNG
STATUS_SUCCESS Die Anforderung wurde erfolgreich abgeschlossen.
STATUS_CANCELLED Ein Client hat die Anforderung abgebrochen. Serial bricht auch eine Anforderung ab, wenn ein Gerätefehler auftritt, und Serial ist so konfiguriert, dass eine Anforderung abgebrochen wird, wenn ein Gerätefehler vorliegt.
STATUS_DELETE_PENDING Serial ist gerade dabei, das Gerät zu entfernen.
STATUS_PENDING Serial hat die Anforderung für die spätere Verarbeitung in die Warteschlange gestellt.
STATUS_TIMEOUT Die für die Schreibanforderung zulässige Gesamtzeit wurde überschritten.

Vorgang

Ein Client kann Timeoutereignisse verwenden, um eine Schreibanforderung zu beenden. Beachten Sie jedoch, dass beim Öffnen eines seriellen Geräts die auf einem Gerät festgelegten Timeoutereignisse nicht definiert sind. Ein Kernelmodusclient kann eine IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS verwenden, um Timeoutparameter auf Null festzulegen (es werden keine Timeoutereignisse verwendet) und eine IOCTL_SERIAL_SET_TIMEOUTS Anforderung zum Festlegen von Timeoutparametern. Weitere Informationen zu Lese- und Schreibtimeouts finden Sie unter Festlegen von Lese- und Schreibtimeouts für ein serielles Gerät.

Plug & Play Neben-IRPs

Regeln für die Behandlung von Power IRPs

Entwurfshandbuch für serielle Controllertreiber