硬體支援概況
在 Wine 中接取硬體,主要有兩種模式。
一、直接介接 Linux 的 API,像是 X11, SANE, V4L, ALSA 等等。目前少數實做的硬體介接模擬功能有圖形 (winex11.drv, winequartz.drv) 、音效以及輸入裝置 (keyboard, mouse, joystick, twain/sane) 等模擬層。另外 Wine 提供了 IoCode/Operation Code 轉譯功能,容許 Windows 程式直接存取硬體,這包含 Serial Communications[2] 以及 CDROM/ATAPI, TAPE 支援。
二、另外一種則是類似 NdisWrapper,直接載入並使用 Windows 驅動程式。目前而言負責載入 Windows 驅動程式的 NTDLL 中均未實做 NtLoadDriver, ZwLoadDriver 等函式細節,只宣告為 Stub Function. 因此即便驅動程式安裝程式可以順利安裝、註冊相關驅動程式 DLLs, Wine 也不會載入這些驅動程式。
目前 Wine (1.3.19) 並沒有模擬載入底層驅動程式。
Smart Card Support
Smart Card 支援問題是最常被詢問的問題之一,依據 MSDN 的 Smart Card Subsystem 設計,可以分為以下數層
- Smart Card Service Providers
- Resource Manager
- Specific Smart Card Reader Driver
- Smart Card Reader Helper Library
驅動讀卡機是最基本的功能。參考 Microsoft Class Drivers for USB CCID Smart Cards 的 結構說明,驅動程式有兩類,一是 CCID 相容硬體或 USB 廠商所提供的驅動程式。而其上應用程式可用 Smart card resource manager (winscard.dll) 來下達 PC/SC 指令。
如上所述,Wine 並不會載入驅動程式。winscard.dll 目前也只是 stubbed functions.
不過 IDRIX 的 Mounir IDRASSI 開發了介接 PCSC-Lite/pcscd,使 Smart card resource manager 可以透過 PCSC-Lite 提供 PC/SC Services.
USB Support
理論上,user-mode 的 USB 驅動程式也可以透過轉譯直接存取 USB 設備,只要該軟體未使用 ntoskrnl.exe, hal.dll, usbd.sys 以外的功能。目前官方 Wine source tree 只在 usbd.sys 中實做查詢 USB Devices 功能。
Etersoft 的 Alexander Morozov 則已利用 libusb 實做 USB 功能,提供一些需要使用 USB hardware token 進行硬體保護的軟體使用。這些功能未整合到 Wine 主程式。相關程式碼位於 ftp://ftp.etersoft.ru/pub/people/amorozov/usb,使用時需要手動在 registry 中加入 vendor id/product id 設定。