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 |