IStiUSD::Initialize 方法 (stiusd.h)
仍然影像 minidriver 的 IStiUSD::Initialize 方法會初始化 COM 物件的實例,這個實例會定義 IStiUSD 介面。
語法
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 方法,由仍由圖像迷你驅動程式導出,是載入 minidriver 之後呼叫的第一個 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) |