Método IStiUSD::Initialize (stiusd.h)
Um 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 a 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.
Retornar valor
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.
Comentários
O método IStiUSD::Initialize , que é exportado por minidrivers de imagem ainda, é o primeiro método IStiUSD chamado depois que um minidriver é carregado. O método deve inicializar o driver e o dispositivo.
O método deve armazenar o ponteiro de interface COM IStiDeviceControl recebido e deve chamar o método IStiDeviceControl::AddRef dessa 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 SDK do Microsoft Windows), 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 são permitidas (como dispositivos conectados a uma porta serial), o driver normalmente não chama 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 |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | stiusd.h (inclua Stiusd.h) |