UMDF 驅動程式的會話零指導方針
從 Windows Vista 開始,作業系統會在會話 0 中隔離服務和系統進程,而應用程式則會在後續、較高的編號會話中執行。 因為 UMDF 主機進程 (WUDFHost.exe) 是在會話 0 中執行的其中一個系統進程,所以 UMDF 驅動程式會與應用程式隔離。 因此,開發驅動程式時,您必須使用下列指導方針:
請勿建立使用者介面 (UI) 專案,例如對話方塊,或相依于使用者輸入。 因為使用者未在會話 0 中執行,所以他們永遠不會看到 UI 且無法回應。
同樣地,請勿操作任何 UI 元素。 例如,UMDF 驅動程式無法列舉使用者會話中的視窗。
如果您的驅動程式必須與服務通訊,請使用用戶端/伺服器機制,例如遠端程序呼叫 (RPC) 或具名管道。
在 Windows API 中呼叫函式時請小心。 某些函式可能會操作 UI 元素,或嘗試存取使用者會話中的具名物件。 請勿呼叫您不會從使用者模式服務呼叫的 Windows 函式。 一般規則是 UMDF 驅動程式可以安全地呼叫在 kernel32.dll 中匯出的函式,但無法呼叫在 user32.dll 中匯出的函式。
UMDF 驅動程式可能會呼叫 Windows 函式來執行下列工作:
驅動程式可能會呼叫SetupDiXxx函式來擷取隨插即用裝置屬性。 例如, UMDF 範例驅動程式 for OSR USB Fx2 Learning Kit 會呼叫 SetupDiGetDeviceRegistryProperty 來擷取裝置匯流排類型的 GUID。 注意 UMDF 驅動程式無法安全地呼叫許多 SetupDiXxx 函式,但可以安全地呼叫可擷取裝置節點屬性的函式。
從手動佇列擷取 I/O 要求的驅動程式可能會建立定期計時器來輪詢佇列。 例如, WudfVhidmini 範例會藉由呼叫 CreateThreadpoolTimer來註冊計時器回呼常式,然後藉由呼叫 SetThreadpoolTimer來設定定期計時器。 注意 從 1.11 版開始,UMDF 提供工作專案的支援。 如需詳細資訊,請參閱 使用工作專案。
如需在架構外部使用系統服務的其他資訊,請參閱第 14 章 () Orwick、Guyy 和 Guy Smith。 使用 Windows Driver Foundation 開發驅動程式。 Redmond,WA:Microsoft Press, 2007。
如需會話零隔離的其他資訊,請參閱 會話 0 隔離對 Windows 中的服務和驅動程式的影響。