Compartilhar via


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

A função de retorno de chamada de evento EvtSerCx2SetWaitMask é chamada pela versão 2 da extensão da estrutura serial (SerCx2) para configurar o controlador serial para monitorar um conjunto de eventos de hardware especificados por uma máscara de espera.

Sintaxe

EVT_SERCX2_SET_WAIT_MASK EvtSercx2SetWaitMask;

void EvtSercx2SetWaitMask(
  [in] WDFDEVICE Device,
  [in] WDFREQUEST Request,
  [in] ULONG WaitMask
)
{...}

Parâmetros

[in] Device

Um identificador WDFDEVICE para o objeto de dispositivo da estrutura que representa o controlador serial. O driver do controlador serial criou esse objeto em sua função de retorno de chamada EvtDriverDeviceAdd. Para obter mais informações, consulte SerCx2InitializeDevice.

[in] Request

Um identificador WDFREQUEST para o objeto de solicitação da estrutura que representa a solicitação IOCTL_SERIAL_SET_WAIT_MASK.

[in] WaitMask

A nova máscara de espera. Para obter mais informações, consulte Comentários.

Valor de retorno

Nenhum

Observações

O driver do controlador serial pode, como opção, implementar essa função. Se implementado, o driver registrará a função na chamada para o método SerCx2InitializeDevice que conclui a inicialização do objeto de dispositivo da estrutura para o controlador serial.

Quando o SerCx recebe uma solicitação IOCTL_SERIAL_SET_WAIT_MASK de um cliente, o manipulador de solicitações no SerCx2 chama a função EvtSerCx2SetWaitMask, se ela for implementada, para notificar o driver de que a máscara de espera foi alterada. Se a máscara de espera não for zero, o driver começará imediatamente a monitorar os eventos na nova máscara de espera e descartará qualquer máscara de espera antiga que possa ter sido fornecida em uma chamada EvtSerCx2SetWaitMask anterior. Se a nova máscara de espera for zero, o driver simplesmente descartará a máscara de espera antiga e deixará de monitorar os eventos de máscara de espera. Para obter mais informações sobre os tipos de eventos que podem ser especificados por uma máscara de espera, consulte SERIAL_EV_XXX.

Se o driver não implementar essa função, o SerCx2 falhará em todas as solicitações IOCTL_SERIAL_SET_WAIT_MASK com o código de status de erro STATUS_NOT_SUPPORTED.

Para monitorar os eventos na máscara de espera, a função EvtSerCx2SetWaitMask normalmente permite interrupções para esses eventos. Posteriormente, quando um evento na máscara de espera é detectado, o driver do controlador serial chama o método SerCx2CompleteWait para notificar o SerCx2 do evento.

A função EvtSerCx2SetWaitMask é responsável por concluir a solicitação de IOCTL_SERIAL_SET_WAIT_MASK apontada pelo parâmetro de Solicitação . Depois que o driver do controlador serial habilitar as interrupções necessárias, ele chama o método WdfRequestComplete e fornece, como parâmetros de entrada, o valor do parâmetro Request e um valor de status para indicar se a solicitação foi bem-sucedida.

Antes que o driver do controlador serial chame WdfRequestComplete para concluir a solicitação, o driver deve concluir todas as chamadas para SerCx2CompleteWait que ainda podem estar pendentes devido a eventos na máscara de espera antiga.

Inicialmente, depois que um cliente abre uma conexão lógica com a porta serial e antes da primeira chamada EvtSerCx2SetWaitMask, a máscara de espera é efetivamente zero e o driver do controlador serial não está monitorando nenhum SERIAL_EV_XXX eventos.

O SerCx2 falha em uma solicitação de IOCTL_SERIAL_SET_WAIT_MASK que tem uma máscara de espera que inclui qualquer um dos seguintes sinalizadores de evento SERIAL_EV_XXX:

  • SERIAL_EV_PERR
  • SERIAL_EV_RING
  • SERIAL_EV_RXFLAG
Portanto, a máscara de espera fornecida à sua função EvtSerCx2SetWaitMask nunca contém nenhum dos sinalizadores de evento na lista anterior.

Se implementada, sua função EvtSerCx2SetWaitMask deverá dar suporte aos seguintes sinalizadores de evento:

  • SERIAL_EV_CTS
  • SERIAL_EV_BREAK
  • SERIAL_EV_ERR
Além disso, se o controlador serial tiver uma linha de sinal (DSR) pronta para conjunto de dados , a função de EvtSerCx2SetWaitMask deve dar suporte a SERIAL_EV_DSR. Como opção, um driver pode dar suporte a qualquer um dos outros sinalizadores de eventos descritos em SERIAL_EV_XXX. Se a máscara de espera especificar um evento que o driver não dá suporte, a função EvtSerCx2SetWaitMask deverá falhar na solicitação e definir o valor de status na solicitação para STATUS_INVALID_PARAMETER.

Exemplos

Para definir uma função de retorno de chamada EvtSerCx2SetWaitMask, primeiro você deve fornecer uma declaração de função que identifique o tipo de função de retorno de chamada que você está definindo. O Windows fornece um conjunto de tipos de função de retorno de chamada para drivers. Declarar uma função usando os tipos de função de retorno de chamada ajuda a análise de código para drivers, SDV (Verificador de Driver Estático) e outras ferramentas de verificação encontram erros e é um requisito para gravar drivers para o sistema operacional Windows.

Por exemplo, para definir uma função de retorno de chamada EvtSerCx2SetWaitMask denominada MySetWaitmask, use o tipo de função EVT_SERCX2_SET_WAIT_MASK, conforme mostrado neste exemplo de código:

EVT_SERCX2_SET_WAIT_MASK  MySetWaitmask;

Em seguida, implemente sua função de retorno de chamada da seguinte maneira:

_Use_decl_annotations_
VOID
  MySetWaitmask(
    WDFDEVICE  Device,
    WDFREQUEST Request,
    ULONG WaitMask
    )
  {...}

O tipo de função EVT_SERCX2_SET_WAIT_MASK é definido no arquivo de cabeçalho Sercx.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação Use_decl_annotations à sua definição de função. A anotação Use_decl_annotations garante que as anotações aplicadas ao tipo de função EVT_SERCX2_SET_WAIT_MASK no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers KMDF. Para obter mais informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows 8.1.
da Plataforma de Destino Área de trabalho
cabeçalho sercx.h
IRQL Chamado no <DO IRQL = DISPATCH_LEVEL.

Consulte também

EvtDriverDeviceAdd

IOCTL_SERIAL_SET_WAIT_MASK

SERIAL_EV_XXX

SerCx2CompleteWait

SerCx2InitializeDevice

WdfRequestComplete