Поделиться через


Метод IStiUSD::Initialize (stiusd.h)

Метод iStiUSD::Initialize инициализирует экземпляр COM-объекта, который определяет интерфейс IStiUSD.

Синтаксис

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

Параметры

pHelDcb

Указатель на ИНТЕРФЕЙС COM IStiDeviceControl, предоставленный вызывающим абонентом.

dwStiVersion

Номер версии STI, предоставленный вызывающим абонентом. Это значение определяется STI_VERSION в Sti.h.

hParametersKey

Вызывающий дескриптор, предоставленный разделу реестра, в котором хранятся сведения, относящиеся к устройству.

Возвращаемое значение

Если операция выполнена успешно, метод должен вернуть S_OK. В противном случае он должен возвращать один из кодов ошибок с префиксом STIERR, определенных в stierr.h.

Замечания

Метод IStiUSD::Initialize, экспортируемый мини-drivers по-прежнему, является первым методом IStiUSD вызывается после загрузки мини-driver. Метод должен инициализировать драйвер и устройство.

Метод должен хранить полученный ИНТЕРФЕЙС COM IStiDeviceControl указателя, и он должен вызывать метод IStiDeviceControl::AddRef.

Для устройств, подключенных к выделенным портам (например, устройствам SCSI), метод обычно создает путь для чтения и записи на устройство путем вызова CreateFile (описано в документации по пакету SDK Для Microsoft Windows), используя имя порта устройства, полученное путем вызова IStiDeviceControl::GetMyDevicePortName.

Для устройств на общих портах (таких как последовательные порты), открытие порта в методе IStiUSD::Initialize не рекомендуется, так как доступ к другим устройствам на порту будет заблокирован. Для таких устройств лучше вызывать CreateFile из метода IStiUSD::LockDevice.

Если открытое устройство является одним, для которого не разрешено несколько вызовов 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 (include Stiusd.h)