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


Метод 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 , экспортируемый мини-накопителями изображений, является первым методом IStiUSD , вызываемым после загрузки мини-диска. Метод должен инициализировать драйвер и устройство.

Метод должен хранить полученный указатель com-интерфейса IStiDeviceControl и вызывать метод IStiDeviceControl::AddRef этого интерфейса.

Для устройств, подключенных к выделенным портам (например, устройствам SCSI), метод обычно создает путь чтения и записи к устройству путем вызова CreateFile (описанного в документации по Microsoft Windows SDK), используя имя порта устройства, полученное путем вызова 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 (включая Stiusd.h)