Partilhar via


Método IStiUSD::Initialize (stiusd.h)

O método IStiUSD::Initialize de um minidriver de imagem ainda inicializa uma instância do objeto COM que define a interface IStiUSD.

Sintaxe

HRESULT Initialize(
  PSTIDEVICECONTROL pHelDcb,
  DWORD             dwStiVersion,
  HKEY              hParametersKey
);

Parâmetros

pHelDcb

Ponteiro fornecido pelo chamador para o de interface COM IStiDeviceControl .

dwStiVersion

Número de versão de STI fornecido pelo chamador. Esse valor é definido por STI_VERSION em Sti.h.

hParametersKey

Identificador fornecido pelo chamador para a chave do Registro na qual as informações específicas do dispositivo devem ser armazenadas.

Valor de retorno

Se a operação for bem-sucedida, o método deverá retornar S_OK. Caso contrário, ele deverá retornar um dos códigos de erro prefixados por STIERR definidos em stierr.h.

Observações

O método IStiUSD::Initialize, que é exportado por minidrivers de imagem ainda, é o primeiro método de IStiUSD chamado após o carregamento de um minidriver. O método deve inicializar o driver e o dispositivo.

O método deve armazenar o ponteiro de da Interface COM IStiDeviceControl recebida e deve chamar o método IStiDeviceControl::AddRef da interface.

Para dispositivos conectados a portas dedicadas (como dispositivos SCSI), o método normalmente cria um caminho de leitura/gravação para o dispositivo chamando CreateFile (descrito na documentação do Microsoft Windows SDK), usando um nome de porta do dispositivo obtido chamando IStiDeviceControl::GetMyDevicePortName.

Para dispositivos em portas compartilhadas (como dispositivos de porta serial), não é recomendável abrir a porta no método IStiUSD::Initialize, pois o acesso a outros dispositivos na porta será bloqueado. Para esses dispositivos, é melhor chamar CreateFile de dentro do método IStiUSD::LockDevice.

Se o dispositivo que está sendo aberto for aquele para o qual várias chamadas para CreateFile não forem permitidas (como dispositivos conectados a uma porta serial), o driver normalmente não chamará CreateFile a menos que o chamador tenha aberto o dispositivo para transferências de dados, conforme ilustrado no CodeExample a seguir.

O método IStiUSD::Initialize deve validar o número de versão de STI recebido e retornar um erro se a versão recebida não corresponder à versão do driver.

O exemplo a seguir abre uma porta de dispositivo somente se uma chamada para IStiDeviceControl::GetMyDeviceOpenMode indicar que um aplicativo abriu o dispositivo para transferências de dados. Esse código pode ser usado para um dispositivo que não pode dar suporte a várias chamadas CreateFile, como um dispositivo de porta serial.

Exemplos

STDMETHODIMP MyUSDDevice::Initialize(
    PSTIDEVICECONTROL pDcb,
    DWORD             dwStiVersion,
    HKEY              hParametersKey)
{
    HRESULT hres = STI_OK;
    DWORD   dwMode = 0;
    if (!pDcb)
    {
        hres = STIERR_INVALID_PARAM;
    }
    else
    {
        // Store IStiDeviceControl object pointer
        m_pDcb = pDcb;
        m_pDcb->AddRef();
        // If we opened in data mode - should open device right now,
        // otherwise postpone open till lock
        m_pDcb->GetMyDeviceOpenMode(&dwMode);
        if (dwMode & STI_DEVICE_CREATE_DATA)
            hres = OpenMyPort();
    }
    return hres;
}

Requisitos

Requisito Valor
da Plataforma de Destino Área de trabalho
cabeçalho stiusd.h (inclua Stiusd.h)