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 函式來擷取隨插即用裝置屬性。 例如,適用於 OSR USB Fx2 學習套件的 UMDF 範例驅動程式 會呼叫 SetupDiGetDeviceRegistryProperty 來擷取裝置總線類型的 GUID。 注意 UMDF 驅動程式無法安全地呼叫許多 SetupDiXxx 函式,但可以安全地呼叫可擷取裝置節點屬性的函式。
從手動佇列擷取 I/O 要求的驅動程式可能會建立定期定時器來輪詢佇列。 例如,WudfVhidmini 範例會呼叫 CreateThreadpoolTimer來註冊定時器回呼例程,然後呼叫 SetThreadpoolTimer來設定定期定時器。 注意 從 1.11 版開始,UMDF 提供對工作項目的支援。 如需詳細資訊,請參閱 使用工作專案。
如需在架構外部使用系統服務的其他資訊,請參閱 Orwick、Penny 和 Guy Smith 的第 14 章(「超越架構」)。 使用 Windows Driver Foundation 開發驅動程式。 華盛頓州雷德蒙德:Microsoft出版社,2007年。
如需有關工作階段 0 隔離的其他資訊,請參閱 在 Windows 中工作階段 0 隔離對服務和驅動程式的影響。