Linee guida sulla sessione zero per i driver UMDF
A partire da Windows Vista, il sistema operativo isola i servizi e i processi di sistema nella sessione 0, mentre le applicazioni vengono eseguite nelle sessioni successive e numerate. Poiché il processo host UMDF (WUDFHost.exe) è uno dei processi di sistema eseguiti nella sessione 0, i driver UMDF sono isolati dalle applicazioni. Di conseguenza, è necessario usare le linee guida seguenti durante lo sviluppo del driver:
Non creare un elemento dell'interfaccia utente, ad esempio una finestra di dialogo o dipendere dall'input dell'utente. Poiché l'utente non è in esecuzione nella sessione 0, non vede mai l'interfaccia utente e non può rispondere.
Analogamente, non modificare gli elementi dell'interfaccia utente. Ad esempio, un driver UMDF non può enumerare le finestre nella sessione dell'utente.
Se il driver deve comunicare con un servizio, usare un meccanismo client/server, ad esempio la chiamata di routine remota (RPC) o le pipe denominate.
Prestare attenzione quando si chiamano le funzioni nell'API Di Windows. Alcune funzioni possono modificare gli elementi dell'interfaccia utente o tentare di accedere agli oggetti denominati nella sessione di un utente. Non chiamare le funzioni di Windows che non si chiamano da un servizio in modalità utente. Come regola generale, un driver UMDF può chiamare in modo sicuro le funzioni esportate in kernel32.dll, ma non le funzioni esportate in user32.dll.
Un driver UMDF potrebbe chiamare le funzioni di Windows per eseguire le attività seguenti:
Un driver potrebbe chiamare funzioni SetupDiXxx per recuperare una proprietà del dispositivo Plug and Play. Ad esempio, il driver di esempio UMDF per OSR USB Fx2 Learning Kit chiama SetupDiGetDeviceRegistryProperty per recuperare il GUID per il tipo di bus del dispositivo. Nota Un driver UMDF non può chiamare in modo sicuro molte delle funzioni SetupDiXxx , ma è sicuro chiamare le funzioni che recuperano le proprietà del nodo del dispositivo.
Un driver che recupera le richieste di I/O da una coda manuale potrebbe creare un timer periodico per eseguire il polling della coda. Ad esempio, l'esempio WudfVhidmini registra una routine di callback timer chiamando CreateThreadpoolTimer e quindi imposta un timer periodico chiamando SetThreadpoolTimer. Nota A partire dalla versione 1.11, UMDF offre supporto per gli elementi di lavoro. Per altre informazioni, vedere Uso di elementi di lavoro.
Per altre informazioni sull'uso dei servizi di sistema all'esterno dei framework, vedere Capitolo 14 ("Oltre i framework") di Orwick, Penny e Guy Smith. Sviluppo di driver con Windows Driver Foundation. Redmond, WA: Microsoft Press, 2007.
Per altre informazioni sull'isolamento zero sessione, vedere Impatto dell'isolamento della sessione 0 nei servizi e nei driver in Windows.