EVT_SPB_CONTROLLER_OTHER função de retorno de chamada (spbcx.h)
Uma função de retorno de chamada de evento EvtSpbControllerIoOther do driver de controlador SPB lida com solicitações de controle de E/S do dispositivo que não são tratadas por outras funções de retorno de chamada de evento ou pela extensão da estrutura SPB (SpbCx).
Sintaxe
EVT_SPB_CONTROLLER_OTHER EvtSpbControllerOther;
void EvtSpbControllerOther(
[in] WDFDEVICE Controller,
[in] SPBTARGET Target,
[in] SPBREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
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
O identificador SPBREQUEST para a solicitação de E/S. O driver do controlador SPB deve concluir essa solicitação. Para obter mais informações, consulte Comentários.
[in] OutputBufferLength
O comprimento, em bytes, do buffer de saída, se um buffer de saída for fornecido com a solicitação.
[in] InputBufferLength
O comprimento, em bytes, do buffer de entrada, se um buffer de entrada for fornecido com a solicitação.
[in] IoControlCode
O IOCTL (código de controle de E/S) para a solicitação. Esse valor é um IOCTL que a extensão da estrutura SPB (SpbCx) não reconhece. Para obter mais informações, consulte Comentários.
Retornar valor
Nenhum
Comentários
O SpbCx gerencia a fila de E/S para o controlador SPB. Se o driver do controlador SPB registrar uma função de retorno de chamada EvtSpbControllerIoOther , o SpbCx chamará essa função quando uma solicitação de controle de E/S do dispositivo que o SpbCx não dá suporte chega à fila de E/S do controlador. O valor do parâmetro Request é um identificador que encapsula essa solicitação. O driver do controlador SPB deve concluir essa solicitação executando a operação solicitada ou retornando um erro status. Se o driver não der suporte ao IOCTL especificado, o driver deverá retornar o erro STATUS_NOT_SUPPORTED status. Para obter uma lista de IOCTLs compatíveis com o SpbCx, consulte Códigos de controle de E/S do SpbCx.
O retorno de chamada EvtSpbControllerIoOther permite que comandos específicos do barramento ou específicos do driver sejam enviados para o driver do controlador SPB como IOCTLs. Por exemplo, os clientes (drivers periféricos) podem usar esses IOCTLs para coordenar operações específicas do barramento, como trocas de dados full-duplex com um dispositivo de destino em um barramento SPI. Essas IOCTLs estão sujeitas ao mesmo controle de fluxo que os IOCTLs compatíveis com o SpbCx.
A função de retorno de chamada EvtSpbControllerIoOther é semelhante ao EvtIoDeviceControl e processa IOCTLs de maneira semelhante. Para obter informações gerais sobre como os drivers do WDF lidam com solicitações de E/S, consulte Objetos de Solicitação de Estrutura.
Um retorno de chamada EvtSpbControllerIoOther não retorna um valor status. Em vez disso, o driver do controlador SPB indica o status da operação solicitada no status de conclusão para a solicitação de E/S.
Se uma solicitação de E/S não puder ser concluída imediatamente, a função de retorno de chamada deverá retornar sem esperar que o driver do controlador SPB conclua o processamento da solicitação. Posteriormente, o driver do controlador SPB pode concluir a solicitação de forma assíncrona.
Uma função EvtSpbControllerIoOther deve validar os valores de parâmetro nas solicitações de controle de E/S que recebe de clientes do modo de usuário. Para todas as funções de retorno de chamada EvtSpbXxx diferentes de EvtSpbControllerIoOther, o SpbCx valida os parâmetros do modo de usuário antes de chamar a função.
Para registrar uma função de retorno de chamada EvtSpbControllerIoOther , chame o método SpbControllerSetIoOther .
Exemplos
Para definir uma função de retorno de chamada EvtSpbControllerIoOther , 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 gravar drivers para o sistema operacional Windows.
Por exemplo, para definir uma função de retorno de chamada EvtSpbControllerIoOther chamada MyEvtSpbControllerIoOther
, use o tipo de função EVT_SPB_CONTROLLER_OTHER, conforme mostrado neste exemplo de código:
EVT_SPB_CONTROLLER_OTHER MyEvtSpbControllerIoOther;
Em seguida, implemente a função de retorno de chamada da seguinte maneira:
_Use_decl_annotations_
VOID
MyEvtSpbControllerIoOther(
WDFDEVICE Controller,
SPBTARGET Target,
SPBREQUEST Request,
size_t OutputBufferLength,
size_t InputBufferLength,
ULONG IoControlCode
)
{ ... }
O tipo de função EVT_SPB_CONTROLLER_OTHER é 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_OTHER 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 |
---|---|
Cliente mínimo com suporte | Com suporte começando com Windows 8. |
Plataforma de Destino | Área de Trabalho |
Cabeçalho | spbcx.h |
IRQL | Chamado em IRQL <= DISPATCH_LEVEL. |