Compartilhar 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 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] UnlockRequest

Um identificador SPBREQUEST 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 erro status. 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. O SpbCx chama essa função quando um cliente (driver periférico) do controlador envia uma solicitação de 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 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 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á fazer isso durante o retorno de chamada EvtSpbControllerUnlock . Se essa alteração de 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, em seguida, retornar do retorno de chamada sem demora. Posteriormente, o driver pode concluir a solicitação de desbloqueio em um DPC de interrupção ou um DPC de temporizador.

Um retorno de chamada EvtSpbControllerUnlock deve evitar falha em uma solicitação de desbloqueio. Se o Verificador de Driver estiver habilitado, essa falha disparará uma interceptação de verificador, que relatará ao gerenciador de 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 Manipulando sequências de Client-Implemented.

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 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 EvtSpbControllerUnlock chamada 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 a 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 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