Compartilhar via


EVT_SPB_CONTROLLER_READ função de retorno de chamada (spbcx.h)

Uma função de retorno de chamada de evento EvtSpbControllerIoRead do driver do controlador SPB lê dados do dispositivo de destino especificado nos buffers fornecidos com a solicitação de leitura.

Sintaxe

EVT_SPB_CONTROLLER_READ EvtSpbControllerRead;

void EvtSpbControllerRead(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t Length
)
{...}

Parâmetros

[in] Controller

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

[in] Target

Um identificador SPBTARGET para o destino dessa solicitação de E/S. O destino é um dispositivo periférico ou uma porta anexada ao barramento. A extensão da estrutura SPB (SpbCx) atribuiu anteriormente esse identificador ao destino no retorno de chamada EvtSpbTargetConnect que abriu a conexão com o destino.

[in] Request

Um identificador SPBREQUEST para a solicitação de E/S. O driver do controlador SPB deve concluir essa solicitação executando a operação solicitada ou retornando um erro status. Para obter mais informações, consulte Comentários.

[in] Length

O número de bytes a serem lidos do dispositivo de destino.

Retornar valor

Nenhum

Comentários

O SpbCx gerencia a fila de E/S para o controlador SPB. O SpbCx chama a função de retorno de chamada EvtSpbControllerIoRead do driver do controlador SPB quando um cliente (driver periférico) do controlador SPB envia uma solicitação de IRP_MJ_READ para um dispositivo de destino anexado ao barramento. O valor do parâmetro Request é um identificador que encapsula essa solicitação.

Um retorno de chamada EvtSpbControllerIoRead não retorna um valor status. Em vez disso, o driver do controlador SPB indica o status da operação de leitura na status de conclusão para a solicitação de E/S.

Um retorno de chamada EvtSpbControllerIoRead é assíncrono. Ou seja, a função de retorno de chamada deve iniciar a operação de leitura solicitada e, em seguida, retornar sem aguardar a conclusão da operação. Posteriormente, o driver do controlador SPB conclui a solicitação de leitura durante um DPC de interrupção ou um DPC de temporizador.

Se a operação de leitura for concluída na íntegra, o driver do controlador SPB deverá definir o status de conclusão como STATUS_SUCCESS. Se o dispositivo de destino indicar que ele pode fornecer alguns, mas não todos os dados solicitados, o driver do controlador SPB deverá recuperar o máximo de dados que estiver disponível, especificar o número de bytes de dados recuperados e definir o status de conclusão na solicitação de E/S para STATUS_SUCCESS. Uma operação de leitura parcialmente concluída não pode ocorrer em um ônibus SPI ou I2C, mas pode ocorrer em outro tipo de ônibus.

Se a operação de leitura falhar devido ao ruído de linha, um erro de hardware do controlador ou um erro de driver, o driver do controlador SPB deverá definir o status de conclusão na solicitação de E/S para um código de erro apropriado. Nem todos os ônibus fornecem um mecanismo para um dispositivo de destino relatar um erro de transporte ou uma transferência parcialmente concluída, e nem todos os controladores podem detectar essas condições.

Para registrar uma função de retorno de chamada EvtSpbControllerIoRead , chame o método SpbDeviceInitialize .

Exemplos

Para definir uma função de retorno de chamada EvtSpbControllerIoRead , 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 a encontrar erros e é um requisito para escrever drivers para o sistema operacional Windows.

Por exemplo, para definir uma função de retorno de chamada EvtSpbControllerIoRead chamada MyEvtSpbControllerIoRead, use o tipo de função EVT_SPB_CONTROLLER_READ, conforme mostrado neste exemplo de código:

EVT_SPB_CONTROLLER_READ  MyEvtSpbControllerIoRead;

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

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoRead(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t Length
    )
{ ... }

O tipo de função EVT_SPB_CONTROLLER_READ é definido no arquivo de cabeçalho Spbcx.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_SPB_CONTROLLER_READ 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 para drivers KMDF. Para obter mais informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.

Requisitos

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

Confira também