Partilhar via


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

Uma função de retorno de chamada de evento EvtSpbControllerUnlock do driver SPB desbloqueia o controlador SPB, que foi bloqueado por uma chamada anterior para a função de retorno de chamada de evento EvtSpbControllerLock.

Sintaxe

EVT_SPB_CONTROLLER_UNLOCK EvtSpbControllerUnlock;

void EvtSpbControllerUnlock(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST UnlockRequest
)
{...}

Parâmetros

[in] Controller

Um identificador WDFDEVICE para o objeto de dispositivo da 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 EvtSpbTargetConnect retorno de chamada que abriu a conexão com o destino.

[in] UnlockRequest

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

Valor de retorno

Nenhum

Observações

O SpbCx gerencia a fila de E/S para o controlador SPB. O SpbCx chama essa função quando um cliente (driver periférico) do controlador envia uma solicitação IOCTL_SPB_UNLOCK_CONTROLLER para um destino no barramento. O valor do parâmetro UnlockRequest é um identificador que encapsula essa solicitação.

As funções EvtSpbControllerLock e EvtSpbControllerUnlock executam operações complementares. Ambas as funções são opcionais. Se o driver do controlador SPB implementar uma função EvtSpbControllerUnlock, o driver não será necessário para implementar uma função de EvtSpbControllerLock, mas poderá fazê-lo. No entanto, se o driver do controlador SPB implementar uma função EvtSpbControllerLock, ele também deverá implementar uma função de EvtSpbControllerUnlock. Para obter mais informações, consulte Comentários em SPB_CONTROLLER_CONFIG.

Se o driver do controlador SPB precisar alterar o modo de seu controlador para restaurar a seleção de destino normal, ele poderá fazê-lo durante o EvtSpbControllerUnlock retorno de chamada. Se essa alteração do modo envolver um longo atraso ou exigir que o driver aguarde uma interrupção do dispositivo, o driver deverá iniciar a alteração de modo e retornar do retorno de chamada sem atraso. Posteriormente, o driver pode concluir a solicitação de desbloqueio em um DPC de interrupção ou em um DPC de temporizador.

Um retorno de chamada EvtSpbControllerUnlock deve evitar falha em uma solicitação de desbloqueio. Se Verificador de Driver estiver habilitado, essa falha disparará uma armadilha do verificador, que relatará ao gerenciador plug and play que o controlador falhou. O SpbCx ignora a falha de uma solicitação de desbloqueio e não tenta manipular nem atenuar a falha.

A função EvtSpbControllerUnlock não retorna um valor. Em vez disso, o driver do controlador SPB indica o status da operação de desbloqueio no status de conclusão da solicitação de E/S identificada pelo parâmetro UnlockRequest. Defina o status de conclusão como STATUS_SUCCESS.

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

Para obter mais informações sobre a função EvtSpbControllerUnlock, consulte Handling Client-Implemented Sequences.

Exemplos

Para definir uma função de retorno de chamada EvtSpbControllerUnlock, 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 EvtSpbControllerUnlock denominada MyEvtSpbControllerUnlock, use o tipo de função EVT_SPB_CONTROLLER_UNLOCK, conforme mostrado neste exemplo de código:

EVT_SPB_CONTROLLER_UNLOCK  MyEvtSpbControllerUnlock;

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

_Use_decl_annotations_
VOID
  MyEvtSpbControllerUnlock(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST UnlockRequest
    )
{ ... }

O tipo de função EVT_SPB_CONTROLLER_UNLOCK é 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_UNLOCK 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 Com suporte a partir do Windows 8.
da Plataforma de Destino Área de trabalho
cabeçalho spbcx.h
IRQL Chamado no <DO IRQL = DISPATCH_LEVEL.

Consulte também