Compartir a través de


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.

    Del mismo modo, 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 cliente/servidor, como llamada a procedimiento remoto (RPC) o canalizaciones nombradas.

  • 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 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 a funciones que se exportan en user32.dll.

    Un controlador UMDF puede 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 UMDF para OSR USB Fx2 Learning Kit llama a SetupDiGetDeviceRegistryProperty para recuperar el GUID del tipo de bus del dispositivo. Nota Un controlador UMDF no puede llamar a muchas de las funciones SetupDiXxx de forma segura, 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, vea Using Work Items.

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 información adicional sobre el aislamiento cero de sesión, vea Impacto del aislamiento de sesión 0 en servicios y controladores en Windows.