Compartilhar via


Identificadores de objeto SpbCx

Este tópico descreve os identificadores de objeto definidos para a biblioteca SpbCx (extensão de estrutura do SPB).

Além disso, o SerCx2 DDI usa dois dos tipos genéricos de identificador de objeto, WDFDEVICE e WDFREQUEST, que são definidos pelo KMDF (Kernel-Mode Driver Framework). Para obter mais informações sobre tipos de identificador de estrutura, consulte Resumo de objetos de estrutura.

Este tópico descreve os seguintes identificadores de objeto:

Cabeçalho: Spbcx.h

Identificador de objeto SPBREQUEST

Um identificador de objeto SPBREQUEST representa uma solicitação de E/S emitida para um dispositivo de destino no barramento.

DECLARE_HANDLE(SPBREQUEST)

A classe de objeto SPBREQUEST é derivada da classe de objeto WDFREQUEST , que representa uma solicitação de E/S expedida pelo gerente de E/S. Assim, os métodos WdfRequestXxx que tomam valores de identificador WDFREQUEST como parâmetros aceitam valores de identificador SPBREQUEST como valores de parâmetro válidos. Para obter mais informações sobre esses métodos, consulte Objetos de Solicitação de Estrutura.

No entanto, alguns métodos SpbCx e funções de retorno de chamada exigem especificamente identificadores SPBREQUEST como parâmetros. Para esse parâmetro, substituir um identificador WDFREQUEST que também não é um identificador SPBREQUEST é um erro.

Por exemplo, o método SpbRequestGetTransferParameters usa um identificador SPBREQUEST como um parâmetro. Para fornecer, para esse parâmetro, um identificador WDFREQUEST que também não é um identificador SPBREQUEST é um erro. O motivo para esse requisito é que um objeto SPBREQUEST deve armazenar informações de estado adicionais específicas do SPB para dar suporte a sequências de transferência de E/S. A classe de objeto base WDFREQUEST não fornece esse suporte.

Durante a inicialização do dispositivo, o driver do controlador SPB pode atribuir um contexto por solicitação a um identificador SPBREQUEST chamando o método SpbControllerSetRequestAttributes .

Identificador de objeto SPBTARGET

Um identificador de objeto SPBTARGET identifica uma conexão lógica de um cliente (driver periférico) com uma porta endereçável ou dispositivo periférico no barramento.

DECLARE_HANDLE(SPBTARGET)

Para um barramento I2C, um identificador SPBTARGET corresponde a um endereço de dispositivo específico.
Para um barramento SPI, um identificador SPBTARGET corresponde a uma linha de seleção de dispositivo.

Normalmente, um objeto SPBTARGET existe desde o início do retorno de chamada do evento EvtSpbTargetConnect até o final do retorno de chamada de evento EvtSpbTargetDisconnect correspondente. No entanto, o tempo de vida do objeto SPBTARGET poderá se estender além do segundo retorno de chamada se o driver do controlador SPB fizer uma referência adicional no objeto SPBTARGET para impedir que o objeto desapareça inesperadamente durante o processamento de uma solicitação de E/S para o destino.

O driver do controlador SPB executa todas as operações específicas de hardware para um dispositivo controlador SPB. Quando um cliente envia uma solicitação de IRP_MJ_CREATE para abrir uma conexão com um destino no barramento, a extensão da estrutura SPB (SpbCx), que gerencia a fila de E/S do driver do controlador, passa essa solicitação para o driver do controlador SPB chamando a função de retorno de chamada EvtSpbTargetConnect desse driver. Esse parâmetro Target dessa função é um identificador SPBTARGET . A função pode usar esse identificador para recuperar informações de recurso específicas da conexão (por exemplo, o endereço do dispositivo) do gerenciador PnP. Quando o cliente envia uma solicitação IRP_MJ_CLOSE para fechar a conexão, o SpbCx passa essa solicitação para a função de retorno de chamada EvtSpbTargetDisconnect do driver do controlador SPB, que libera esses recursos.

Acesso Exclusive-Mode

Os clientes têm modo exclusivo para acessar dispositivos de destino. Somente um cliente pode ter uma conexão com um dispositivo de destino específico por vez. O SpbCx garante que apenas um identificador SPBTARGET exista para um endereço de dispositivo de destino no barramento. Essa restrição é necessária porque o SpbCx não dá suporte à intercalação de solicitações de E/S enviadas por dois ou mais clientes para um dispositivo de destino. Se um dispositivo de destino precisar receber solicitações de vários clientes, esse dispositivo exigirá um driver MUX, separado do driver do controlador, que possa intercalar corretamente as operações solicitadas.

Interoperabilidade com KMDF

Os Métodos de Suporte ao Driver serCx2 e as funções de retorno de chamada de evento SpbCx definidas pelo SpbCx usam identificadores SPBTARGET para representar conexões abertas para dispositivos de destino no barramento. No entanto, um driver de controlador normalmente deve chamar métodos KMDF que exigem identificadores WDFFILEOBJECT, em vez de identificadores SPBTARGET , para designar dispositivos de destino.

Um objeto SPBTARGET é semelhante a um objeto WDFFILEOBJECT. No entanto, um objeto SPBTARGET contém informações adicionais específicas do SPB. Por exemplo, durante o processamento de uma solicitação de controle de E/ S IOCTL_SPB_EXECUTE_SEQUENCE , o objeto SPBTARGET para o dispositivo de destino rastreia o estado das transferências na sequência de transferência de E/S.

Para obter o identificador WDFFILEOBJECT para um destino, o driver do controlador SPB chama o método SpbTargetGetFileObject . Esse método aceita, como parâmetro de entrada, um identificador SPBTARGET para um dispositivo de destino aberto e retorna o identificador WDFFILEOBJECT correspondente para esse destino.

De acordo com as convenções kmdf, o driver do controlador SPB pode anexar seu próprio contexto ao objeto SPBTARGET para um dispositivo de destino, e esse contexto pode incluir as funções de retorno de chamada EvtCleanupCallback e EvtDestroyCallback associadas. O driver do controlador SPB usa esse contexto para rastrear informações específicas do driver do controlador e do dispositivo de destino. Além disso, esse driver pode criar objetos filho do objeto SPBTARGET , como temporizadores, DPCs ou, se necessário, solicitações de E/S e filas de E/S.