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