共用方式為


鎖定和解除鎖定最佳做法

WIA 驅動程式 STI 部分的鎖定需要特別注意。 雖然應用程式可以直接存取已發佈的 STI 介面,但如此直接存取裝置可能會被濫用。 不當實作的鎖定技術可能會讓裝置保持開啟,以拒絕服務 (DoS) 攻擊。

適用於 STI 的應用程式

下列清單包含使用 STI 應用程式時應遵循的預防措施和指導方針:

  • 請勿長時間保留鎖定。

  • 如果您不需要直接存取裝置,可能可以使用 WIA 介面方法來取得相同的資訊。 最好這麼做,因為接下來 WIA 服務會為您控制鎖定機制。

  • 使用 STI 的 TWAIN 驅動程式會使用 IStiUSD::LockDevice 方法來控制裝置的存取。 當 TWAIN 驅動程式使用 STI 時,TWAIN 驅動程式會負責控制鎖定時間。

  • 您可以建立它,使其只實作 IStiUSD 介面方法。 這種方法的缺點是應用程式可以直接呼叫 IStiUSD::LockDevice ,藉此鎖定裝置供應用程式獨佔使用。 Windows 硬體質量實驗室不會認證使用這項技術的驅動程式;這類驅動程式只能安裝為未簽署的驅動程式。

針對 WIA 驅動程式

下列清單包含使用 WIA 驅動程式時應遵循的預防措施和指導方針:

  • 監視裝置在長時間鎖定期間的活動。 如果沒有活動,驅動程式應該解除鎖定裝置,並允許其他客戶端連線。 例如,如果驅動程式正在掃描非常大的影像,或它花費了異常長的時間來取得影像,則驅動程式不應該解除鎖定裝置。 這會中斷目前的會話。 視裝置及其運作的總線而定,非常大的映像可能從 10 MB 到超過 1 GB,而且很長的時間可能從 500 毫秒到一分鐘以上。 您應該對裝置及其運作的總線進行基準檢驗,以便您知道這些特定值適用於您的裝置。

  • 使用 WIA 的應用程式不會存取驅動程式的鎖定方法 :IWiaMiniDrv::d rvLockWiaDeviceIWiaMiniDrv::d rvUnLockWiaDevice。 只有 WIA 服務會呼叫這些鎖定方法,WIA 服務會使用 IStiUSD::LockDevice 方法將鎖定呼叫傳播至 IStiUSD

  • 如果應用程式使用 IStiUSD::LockDevice 方法獨佔鎖定 WIA 裝置,WIA 服務將無法存取裝置,直到該應用程式呼叫 IStiUSD::UnLockDevice 方法為止。 如果 WIA 服務無法鎖定裝置,則任何依賴 WIA 服務的應用程式或驅動程式都無法使用裝置。

  • IWiaMiniDrv::d rvLockWiaDevice 方法應該一律呼叫 IStiDevice::LockDevice 方法,而 IWiaMiniDrv::d rvUnLockWiaDevice 方法應該一律呼叫 IStiDevice::UnLockDevice 方法。 這可確保 WIA 服務會針對裝置執行適當的鎖定管理。 IStiDevice 介面會在呼叫 IWiaMiniDrv::d rvInitializeWia 方法時傳遞至驅動程式。 這個介面應該快取,並用來呼叫 IStiDevice::LockDevice 方法。 此方法會呼叫驅動程式的 IStiUSD::LockDevice 方法。

  • 如果使用 BOOL 值來控制鎖定,請保護此值免受多個執行緒的干擾。 當兩個驅動程式同時嘗試鎖定單一裝置時,只有一個驅動程式可以成功。