Compartilhar via


EVT_SERCX_CONTROL função de retorno de chamada (sercx.h)

A função de retorno de chamada de evento EvtSerCxControl manipula uma solicitação de controle de E/S que tem um IOCTL (código de controle de E/S) compatível com a extensão de estrutura serial (SerCx).

Sintaxe

EVT_SERCX_CONTROL EvtSercxControl;

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

Parâmetros

[in] Device

Um identificador WDFDEVICE para o objeto de dispositivo de estrutura que representa o controlador serial.

[in] Request

Um identificador WDFREQUEST para o objeto de solicitação de estrutura que representa a solicitação de controle de E/S.

[in] OutputBufferLength

Especifica o comprimento, em bytes, do buffer de saída para a solicitação de controle de E/S especificada pelo parâmetro Request .

[in] InputBufferLength

Especifica o comprimento, em bytes, do buffer de entrada para a solicitação de controle de E/S especificada pelo parâmetro Request .

[in] IoControlCode

Especifica o IOCTL da solicitação de controle de E/S especificada pelo parâmetro Request .

Retornar valor

A função EvtSerCxControl retornará STATUS_SUCCESS se a chamada for bem-sucedida. Caso contrário, ele retornará um erro apropriado status código. Para obter mais informações, consulte a seção Comentários a seguir.

Comentários

O driver do controlador serial é necessário para implementar essa função de retorno de chamada. O SerCx chama essa função para entregar uma solicitação de controle de E/S ao driver do controlador para processamento. Antes que essa função retorne, ela deve concluir a solicitação executando a operação solicitada ou retornando um erro status. Um driver que não implementa o suporte para uma solicitação específica deve retornar o erro STATUS_NOT_IMPLEMENTED status para essa solicitação.

Normalmente, a função EvtSerCxControl deve ser sincronizada com o ISR do driver do controlador antes que essa função altere as configurações nos registros de hardware do controlador serial.

O valor retornado da função EvtSerCxControl deve corresponder ao valor status que essa função grava no bloco status da solicitação de controle de E/S. O SerCx usa o valor retornado para acompanhar o estado do driver do controlador e o hardware do controlador serial.

Veja a seguir uma lista das IOCTLs que essa função de retorno de chamada deve estar preparada para lidar com:

IOCTL_SERIAL_CLEAR_STATSIOCTL_SERIAL_CLR_DTRIOCTL_SERIAL_CLR_RTS IOCTL_SERIAL_GET_BAUD_RATEIOCTL_SERIAL_GET_CHARS IOCTL_SERIAL_GET_COMMSTATUS IOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_GET_DTRRTSIOCTL_SERIAL_GET_HANDFLOWIOCTL_SERIAL_IMMEDIATE_CHARIOCTL_SERIAL_GET_LINE_CONTROLIOCTL_SERIAL_GET_MODEM_CONTROLIOCTL_SERIAL_GET_MODEMSTATUSIOCTL_SERIAL_GET_PROPERTIES IOCTL_SERIAL_GET_PROPERTIESIOCTL_SERIAL_GET_STATSIOCTL_SERIAL_LSRMST_INSERTIOCTL_SERIAL_SET_BAUD_RATE IOCTL_SERIAL_SET_BREAK_OFFIOCTL_SERIAL_SET_BREAK_ONIOCTL_SERIAL_SET_CHARS IOCTL_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 Para registrar uma função de retorno de chamada EvtSerCxControl, o driver do controlador chama o método SerCxInitialize durante o retorno de chamada EvtDriverDeviceAdd.

Exemplos

O tipo de função para esse retorno de chamada é declarado em Sercx.h, da seguinte maneira.

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

Para definir uma função de retorno de chamada EvtSerCxControl chamada MyEvtSerCxControl, primeiro você deve fornecer uma declaração de função que o SDV ( Verificador de Driver Estático ) e outras ferramentas de verificação exigem, da seguinte maneira.

EVT_SERCX_CONTROL MyEvtSerCxControl;

Em seguida, implemente a função de retorno de chamada da seguinte maneira.

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

Para obter mais informações sobre os requisitos de SDV para declarações de função, consulte Declarando funções usando tipos de função para drivers KMDF.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 8.
Plataforma de Destino Área de Trabalho
Cabeçalho sercx.h
IRQL Chamado em IRQL <= DISPATCH_LEVEL

Confira também

EvtDriverDeviceAdd

SerCxInitialize