Freigeben über


EVT_SERCX_CONTROL Rückruffunktion (sercx.h)

Die EvtSerCxControl Ereignisrückruffunktion verarbeitet eine E/A-Steuerelementanforderung mit einem I/O-Steuerelementcode (IOCTL), der von der seriellen Framework-Erweiterung (SerCx) unterstützt wird.

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 Framework-Anforderungsobjekt, das die E/A-Steuerelementanforderung darstellt.

[in] OutputBufferLength

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

[in] InputBufferLength

Gibt die Länge des Eingabepuffers für die E/A-Steuerelementanforderung in Byte an, die durch den Parameter Request angegeben wird.

[in] IoControlCode

Gibt die IOCTL aus der I/O-Steuerelementanforderung an, die durch den Parameter Request angegeben wird.

Rückgabewert

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

Bemerkungen

Der serielle Controllertreiber ist erforderlich, um diese Rückruffunktion zu implementieren. SerCx ruft diese Funktion auf, um eine E/A-Steuerungsanforderung an den Controllertreiber zur Verarbeitung zu übergeben. Bevor diese Funktion zurückgegeben wird, muss sie die Anforderung entweder durch Ausführen des angeforderten Vorgangs oder durch Zurückgeben eines Fehlerstatus abschließen. Ein Treiber, der keine Unterstützung für eine bestimmte Anforderung implementiert, sollte den STATUS_NOT_IMPLEMENTED Fehlerstatus 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 Statuswert übereinstimmen, den diese Funktion in den Statusblock der E/A-Steuerelementanforderung schreibt. SerCx verwendet den Rückgabewert, um den Zustand des Controllertreibers und der seriellen Controllerhardware nachzuverfolgen.

Im Folgenden finden Sie eine Liste der IOCTLs, die diese Rückruffunktion verarbeiten muss:

IOCTL_SERIAL_CLEAR_STATSIOCTL_SERIAL_CLR_DTRIOCTL_SERIAL_CLR_RTSIOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARSIOCTL_SERIAL_GET_COMMSTATUSIOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_GET_HANDFLOWIOCTL_SERIAL_IMMEDIATE_CHARIOCTL_SERIAL_GET_LINE_CONTROLIOCTL_SERIAL_GET_MODEM_CONTROLIOCTL_SERIAL_GET_MODEMSTATUSIOCTL_SERIAL_GET_PROPERTIESIOCTL_SERIAL_GET_STATSIOCTL_SERIAL_LSRMST_INSERTIOCTL_SERIAL_SET_BAUD_RATEIOCTL_SERIAL_SET_BREAK_OFFIOCTL_SERIAL_SET_BREAK_ONIOCTL_SERIAL_SET_CHARSIOCTL_SERIAL_SET_DTRIOCTL_SERIAL_SET_FIFO_CONTROLIOCTL_SERIAL_SET_HANDFLOWIOCTL_SERIAL_SET_LINE_CONTROLIOCTL_SERIAL_SET_ MODEM_CONTROLIOCTL_SERIAL_SET_RTSIOCTL_SERIAL_SET_XOFFIOCTL_SERIAL_SET_XONIOCTL_SERIAL_XOFF_COUNTER Um ein EvtSerCxControl Rückruffunktion zu registrieren, ruft der Controllertreiber die SerCxInitialize Methode während des EvtDriverDeviceAdd Rückruf auf.

Beispiele

Der Funktionstyp für diesen Rückruf wird wie folgt in Sercx.h 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 zu definieren, die MyEvtSerCxControlbenannt ist, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die SDV (Static Driver Verifier) und andere Überprüfungstools erfordern, wie folgt.

EVT_SERCX_CONTROL MyEvtSerCxControl;

Implementieren Sie dann die 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
mindestens unterstützte Client- Verfügbar ab Windows 8.
Zielplattform- Desktop
Header- sercx.h
IRQL- Bei IRQL-<= DISPATCH_LEVEL aufgerufen

Siehe auch

EvtDriverDeviceAdd

SerCxInitialize