初始化 WIA Minidriver
實作 IWiaMiniDrv 介面 的第一個步驟是初始化迷你驅動程式,並建立驅動程式專案的階層式樹狀結構。 若要這樣做,WIA 服務會在每次用戶端應用程式想要使用裝置時呼叫 IWiaMiniDrv::d rvInitializeWia 方法。 如果兩個或多個應用程式同時使用裝置,WIA 服務會針對每個應用程式呼叫這個方法。 在此方法中,minidriver 通常會執行下列動作:
初始化從 WIA 服務傳入的參數。
儲存 pStiDevice 指向的 STI 裝置介面。這是為了讓 IStiDevice::LockDevice 和 IStiDevice::UnLockDevice 方法可用來鎖定或解除鎖定 WIA 裝置。
快取成員變數中的 bstrDeviceID 和 bstrRootFullItemName ,讓其他方法可以使用它們。
開啟裝置的控制碼。 (建議針對 USB、SCSI 和 1394.) 等非共用埠執行此步驟
建置專案樹狀結構,如 建立 WIA 驅動程式專案樹狀結構中所述。
IWiaMiniDrv::d rvInitializeWia方法也可以用來建立和初始化驅動程式所使用的動態陣列和結構。 例如,您可以建立驅動程式支援的命令和事件陣列,以供 IWiaMiniDrv::d rvGetCapabilities 方法稍後使用。
注意在呼叫IWiaMiniDrv::d rvInitializeWia之前,可能會呼叫IWiaMiniDrv::d rvGetCapabilities方法。 當 WIA 服務需要在應用程式存在以使用裝置之前查詢事件資訊時,就會發生這種情況。 只有在應用程式發出其意圖使用裝置的訊號時,才會呼叫 IWiaMiniDrv::d rvInitializeWia 方法。
追蹤應用程式連線
如先前所述,當應用程式想要與 WIA 裝置通訊時,WIA 服務會呼叫適當的驅動程式 IWiaMiniDrv::d rvInitializeWia 方法。 當應用程式完成裝置並釋放它的所有 WIA 參考時,WIA 服務會呼叫適當的驅動程式 IWiaMiniDrv::d rvUnInitializeWia 方法。 請注意,WIA 支援多個同時的應用程式連線。 這表示兩個或多個應用程式可以要求與相同裝置相關聯的 WIA 介面。 不過,這並不表示驅動程式必須處理同時的要求;WIA 服務可確保一次只會傳送一個要求給驅動程式。 不過,WIA 服務可以在呼叫 IWiaMiniDrv::d :drvUnInitializeWia 方法之前多次呼叫 IWiaMiniDrv::d rvUnInitializeWia 方法。
為什麼這項資訊很有用? 通常,當應用程式使用時,驅動程式可能需要的資源,例如 WIA 驅動程式專案樹狀結構、影像篩選程式庫等等。 由於這些資源可能會佔用大量的記憶體,因此最好在不需要時將其卸載。
注意IWiaMiniDrv::d rvInitializeWia和IWiaMiniDrv::d rvUnInitializeWia方法只會用來通知驅動程式的應用程式連線。 WIA 服務可以呼叫其他驅動程式方法,而不需要先呼叫 IWiaMiniDrv::d rvInitializeWia,這表示 WIA 服務不一定會在完成時呼叫 IWiaMiniDrv::d rvUnInitializeWia 。 呼叫的方法是不需要 WIA 專案的資訊方法,例如 IWiaMiniDrv::d rvGetCapabilities 和 IWiaMiniDrv::d rvGetWiaFormatInfo。
本節包含下列主題: