IStiUSD::Initialize 方法 (stiusd.h)

仍图像微型驱动程序的 IStiUSD::Initialize 方法初始化定义 IStiUSD 接口的 COM 对象的实例。

语法

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

参数

pHelDcb

调用方提供的指向 IStiDeviceControl COM 接口的指针。

dwStiVersion

调用方提供的 STI 版本号。 此值由 Sti.h中的 STI_VERSION 定义。

hParametersKey

调用方提供的用于存储设备特定信息的注册表项的句柄。

返回值

如果作成功,该方法应返回S_OK。 否则,它应返回 stierr.h中定义的 STIERR 前缀错误代码之一。

言论

IStiUSD::Initialize 方法(仍由图像微型驱动程序导出)是在加载微型驱动程序后调用的第一个 IStiUSD 方法。 该方法必须初始化驱动程序和设备。

该方法应存储收到的 IStiDeviceControl COM 接口 指针,并且应调用该接口的 IStiDeviceControl::AddRef 方法。

对于连接到专用端口(如 SCSI 设备)的设备,该方法通常通过调用 CreateFile(Microsoft Windows SDK 文档中所述)来创建设备的读/写路径,方法是使用通过调用 IStiDeviceControl::GetMyDevicePortName获取的设备端口名称。

对于共享端口(如串行端口设备)上的设备,不建议在 IStiUSD::Initialize 方法中打开端口,因为对端口上其他设备的访问将被锁定。对于此类设备,最好从 IStiUSD::LockDevice 方法中调用 CreateFile

如果打开的设备是不允许多次调用 CreateFile(例如连接到串行端口的设备),驱动程序通常不会调用 CreateFile,除非调用方已打开设备进行数据传输,如以下 CodeExample所示。

IStiUSD::Initialize 方法应验证收到的 STI 版本号,如果收到的版本与驱动程序的版本不匹配,则返回错误。

以下示例仅在调用 IStiDeviceControl::GetMyDeviceOpenMode 指示应用程序已打开设备进行数据传输时,才会打开设备端口。 此类代码可用于不支持多个 CreateFile 调用的设备,例如串行端口设备。

例子

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;
}

要求

要求 价值
目标平台 桌面
标头 stiusd.h (包括 Stiusd.h)