Método IStiUSD::Initialize (stiusd.h)
Un método IStiUSD::Initialize de una imagen fija inicializa una instancia del objeto COM que define la interfaz IStiUSD .
Sintaxis
HRESULT Initialize(
PSTIDEVICECONTROL pHelDcb,
DWORD dwStiVersion,
HKEY hParametersKey
);
Parámetros
pHelDcb
Puntero proporcionado por el autor de la llamada a la interfaz COM IStiDeviceControl.
dwStiVersion
Número de versión de STI proporcionado por el autor de la llamada. Este valor se define mediante STI_VERSION en Sti.h.
hParametersKey
Identificador proporcionado por el autor de la llamada a la clave del Registro en la que se va a almacenar información específica del dispositivo.
Valor devuelto
Si la operación se realiza correctamente, el método debe devolver S_OK. De lo contrario, debe devolver uno de los códigos de error con prefijo STIERR definidos en stierr.h.
Comentarios
El método IStiUSD::Initialize , que se exporta mediante minidrivers de imágenes, es el primer método IStiUSD al que se llama después de cargar un minidriver. El método debe inicializar el controlador y el dispositivo.
El método debe almacenar el puntero de interfaz COM IStiDeviceControl recibido y debe llamar al método IStiDeviceControl::AddRef de esa interfaz.
En el caso de los dispositivos conectados a puertos dedicados (como dispositivos SCSI), el método normalmente crea una ruta de acceso de lectura y escritura al dispositivo mediante una llamada a CreateFile (que se describe en la documentación de Microsoft Windows SDK), mediante un nombre de puerto de dispositivo obtenido mediante una llamada a IStiDeviceControl::GetMyDevicePortName.
En el caso de los dispositivos en puertos compartidos (como los dispositivos de puerto serie), no se recomienda abrir el puerto en el método IStiUSD::Initialize , ya que se bloqueará el acceso a otros dispositivos del puerto. Para estos dispositivos, es mejor llamar a CreateFile desde el método IStiUSD::LockDevice .
Si el dispositivo que se abre es uno para el que no se permiten varias llamadas a CreateFile (por ejemplo, dispositivos conectados a un puerto serie), el controlador normalmente no llama a CreateFile a menos que el autor de la llamada haya abierto el dispositivo para las transferencias de datos, como se muestra en el siguiente CodeExample.
El método IStiUSD::Initialize debe validar el número de versión de STI recibido y devolver un error si la versión recibida no coincide con la versión del controlador.
En el ejemplo siguiente se abre un puerto de dispositivo solo si una llamada a IStiDeviceControl::GetMyDeviceOpenMode indica que una aplicación ha abierto el dispositivo para las transferencias de datos. Este código se puede usar para un dispositivo que no admite varias llamadas CreateFile , como un dispositivo de puerto serie.
Ejemplos
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 | Value |
---|---|
Plataforma de destino | Escritorio |
Encabezado | stiusd.h (incluya Stiusd.h) |
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de