Freigeben über


EVT_SERCX_CONTROL Rückruffunktion (sercx.h)

Die EvtSerCxControl-Ereignisrückruffunktion verarbeitet eine E/A-Steuerungsanforderung, die über einen I/O-Kontrollcode (IOCTL) verfügt, den die serielle Frameworkerweiterung (SerCx) unterstützt.

Syntax

EVT_SERCX_CONTROL EvtSercxControl;

NTSTATUS EvtSercxControl(
  [in] WDFDEVICE Device,
  [in] WDFREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Parameter

[in] Device

Ein WDFDEVICE-Handle für das Framework-Geräteobjekt, das den seriellen Controller darstellt.

[in] Request

Ein WDFREQUEST-Handle für das Frameworkanforderungsobjekt, das die E/A-Steuerelementanforderung darstellt.

[in] OutputBufferLength

Gibt die Länge des Ausgabepuffers für die vom Request-Parameter angegebene E/A-Steuerungsanforderung in Bytes an.

[in] InputBufferLength

Gibt die Länge des Eingabepuffers für die vom Request-Parameter angegebene E/A-Steuerungsanforderung in Bytes an.

[in] IoControlCode

Gibt die IOCTL aus der E/A-Steuerungsanforderung an, die durch den Request-Parameter angegeben wird.

Rückgabewert

Die EvtSerCxControl-Funktion gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Andernfalls wird ein entsprechender Fehler status Code zurückgegeben. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Hinweise

Der serielle Controllertreiber ist erforderlich, um diese Rückruffunktion zu implementieren. SerCx ruft diese Funktion auf, um eine E/A-Steuerungsanforderung zur Verarbeitung an den Controllertreiber zu übergeben. Bevor diese Funktion zurückgibt, muss sie die Anforderung entweder durch Ausführen des angeforderten Vorgangs oder durch Zurückgeben eines Fehlers status abschließen. Ein Treiber, der keine Unterstützung für eine bestimmte Anforderung implementiert, sollte den STATUS_NOT_IMPLEMENTED Fehler status für diese Anforderung zurückgeben.

In der Regel sollte die EvtSerCxControl-Funktion mit dem ISR des Controllertreibers synchronisiert werden, bevor diese Funktion die Einstellungen in den Hardwareregistern des seriellen Controllers ändert.

Der Rückgabewert der EvtSerCxControl-Funktion muss mit dem status Wert übereinstimmen, den diese Funktion in den status-Block der E/A-Steuerelementanforderung schreibt. SerCx verwendet den Rückgabewert, um den Zustand des Controllertreibers und der Hardware des seriellen Controllers nachzuverfolgen.

Im Folgenden finden Sie eine Liste der IOCTLs, für die diese Rückruffunktion vorbereitet werden muss:

IOCTL_SERIAL_CLEAR_STATSIOCTL_SERIAL_CLR_DTRIOCTL_SERIAL_CLR_RTSIOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARSIOCTL_SERIAL_GET_COMMSTATUS IOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_GET_HANDFLOWIOCTL_SERIAL_IMMEDIATE_CHAR IOCTL_SERIAL_GET_LINE_CONTROLIOCTL_SERIAL_GET_MODEM_CONTROLIOCTL_SERIAL_GET_MODEMSTATUSIOCTL_SERIAL_GET_PROPERTIESIOCTL_SERIAL_GET_STATSIOCTL_SERIAL_LSRMST_INSERTIOCTL_SERIAL_SET_BAUD_RATE IOCTL_SERIAL_SET_BREAK_OFFIOCTL_SERIAL_SET_BREAK_ON IOCTL_SERIAL_SET_CHARSIOCTL_SERIAL_SET_DTRIOCTL_SERIAL_SET_FIFO_CONTROL IOCTL_SERIAL_SET_HANDFLOWIOCTL_SERIAL_SET_LINE_CONTROLIOCTL_SERIAL_SET_MODEM_CONTROLIOCTL_SERIAL_SET_RTSIOCTL_ SERIAL_SET_XOFFIOCTL_SERIAL_SET_XONIOCTL_SERIAL_XOFF_COUNTER Um eine EvtSerCxControl-Rückruffunktion zu registrieren, ruft der Controllertreiber während des EvtDriverDeviceAdd-Rückrufs die SerCxInitialize-Methode auf.

Beispiele

Der Funktionstyp für diesen Rückruf wird in Sercx.h wie folgt deklariert.

typedef NTSTATUS
  EVT_SERCX_CONTROL(
    __in WDFREQUEST Request,
    __in size_t OutputBufferLength,
    __in size_t InputBufferLength,
    __in ULONG IoControlCode
    );

Um eine EvtSerCxControl-Rückruffunktion mit dem Namen MyEvtSerCxControlzu definieren, müssen Sie zunächst wie folgt eine Funktionsdeklaration bereitstellen, die für die statische Treiberüberprüfung (Static Driver Verifier , SDV) und andere Überprüfungstools erforderlich ist.

EVT_SERCX_CONTROL MyEvtSerCxControl;

Implementieren Sie dann Ihre Rückruffunktion wie folgt.

NTSTATUS
  MyEvtSerCxControl(
    __in WDFREQUEST Request,
    __in size_t OutputBufferLength,
    __in size_t InputBufferLength,
    __in ULONG IoControlCode
    )
{ ... }

Weitere Informationen zu SDV-Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für KMDF-Treiber.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 8.
Zielplattform Desktop
Kopfzeile sercx.h
IRQL Aufgerufen am IRQL <= DISPATCH_LEVEL

Weitere Informationen

EvtDriverDeviceAdd

SerCxInitialize