Метод 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) |