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:
- IRP_MN_CANCEL_REMOVE_DEVICE
- IRP_MN_CANCEL_STOP_DEVICE
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_CAPABILITIES
- IRP_MN_QUERY_DEVICE_RELATIONS
- IRP_MN_QUERY_ID
- IRP_MN_QUERY_PNP_DEVICE_STATE
- IRP_MN_QUERY_REMOVE_DEVICE
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_STOP_DEVICE
- IRP_MN_REMOVE_DEVICE
- IRP_MN_START_DEVICE
- IRP_MN_STOP_DEVICE
- IRP_MN_SURPRISE_REMOVAL
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.