Directrices de sesión cero para controladores UMDF
A partir de Windows Vista, el sistema operativo aísla los servicios y los procesos del sistema en la sesión 0, mientras que las aplicaciones se ejecutan en sesiones posteriores y numeradas más altas. Dado que el proceso de host de UMDF (WUDFHost.exe) es uno de los procesos del sistema que se ejecutan en la sesión 0, los controladores UMDF están aislados de las aplicaciones. Como resultado, debe usar las siguientes directrices al desarrollar el controlador:
No cree un elemento de interfaz de usuario (UI), como un cuadro de diálogo o dependa de la entrada del usuario. Dado que el usuario no se está ejecutando en la sesión 0, nunca ve la interfaz de usuario y no puede responder a ella.
De forma similar, no manipule ningún elemento de interfaz de usuario. Por ejemplo, un controlador UMDF no puede enumerar ventanas en la sesión del usuario.
Si el controlador debe comunicarse con un servicio, use un mecanismo de cliente o servidor, como la llamada a procedimiento remoto (RPC) o las canalizaciones con nombre.
Tenga cuidado al llamar a funciones en la API de Windows. Algunas funciones pueden manipular elementos de la interfaz de usuario o intentar acceder a objetos con nombre en la sesión de un usuario. No llame a funciones de Windows a las que no llamaría desde un servicio en modo de usuario. Como regla general, un controlador UMDF puede llamar de forma segura a funciones que se exportan en kernel32.dll, pero no funciones exportadas en user32.dll.
Un controlador UMDF podría llamar a funciones de Windows para realizar las siguientes tareas:
Un controlador puede llamar a las funciones SetupDiXxx para recuperar una propiedad de dispositivo Plug and Play. Por ejemplo, el controlador de ejemplo de UMDF para OSR USB Fx2 Learning Kit llama a SetupDiGetDeviceRegistryProperty para recuperar el GUID para el tipo de bus del dispositivo. Nota Un controlador UMDF no puede llamar de forma segura a muchas de las funciones SetupDiXxx , pero es seguro llamar a funciones que recuperan las propiedades del nodo del dispositivo.
Un controlador que recupera solicitudes de E/S de una cola manual podría crear un temporizador periódico para sondear la cola. Por ejemplo, el ejemplo WudfVhidmini registra una rutina de devolución de llamada del temporizador llamando a CreateThreadpoolTimer y, a continuación, establece un temporizador periódico llamando a SetThreadpoolTimer. Nota A partir de la versión 1.11, UMDF proporciona compatibilidad con elementos de trabajo. Para obtener más información, consulte Uso de elementos de trabajo.
Para obtener información adicional sobre el uso de servicios del sistema fuera de los marcos, vea el capítulo 14 ("Beyond the Frameworks") de Orwick, Penny y Guy Smith. Desarrollar controladores con Windows Driver Foundation. Redmond, WA: Microsoft Press, 2007.
Para obtener más información sobre el aislamiento de sesión cero, consulte Impacto del aislamiento de sesión 0 en servicios y controladores en Windows.