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 da 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 da 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 solicitação de .

[in] InputBufferLength

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

[in] IoControlCode

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

Valor de retorno

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

Observações

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 status de erro. Um driver que não implementa o suporte para uma solicitação específica deve retornar o status de erro STATUS_NOT_IMPLEMENTED 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 de status que essa função grava no bloco de 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 dos IOCTLs que essa função de retorno de chamada deve estar preparada para lidar:

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

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 denominada MyEvtSerCxControl, primeiro você deve fornecer uma declaração de função que SDV (Static Driver Verifier) e outras ferramentas de verificação, 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
de cliente com suporte mínimo Disponível a partir do Windows 8.
da Plataforma de Destino Área de trabalho
cabeçalho sercx.h
IRQL Chamado no <DO IRQL = DISPATCH_LEVEL

Consulte também

EvtDriverDeviceAdd

SerCxInitialize