Diretrizes de sessão zero para drivers UMDF
A partir do Windows Vista, o sistema operacional isola os serviços e os processos do sistema na Sessão 0, enquanto os aplicativos são executados em sessões numeradas posteriores e mais altas. Como o processo de host UMDF (WUDFHost.exe) é um dos processos do sistema executados na sessão 0, os drivers UMDF são isolados dos aplicativos. Como resultado, você deve usar as seguintes diretrizes ao desenvolver seu driver:
Não crie um elemento de interface do usuário, como uma caixa de diálogo, ou dependa da entrada do usuário. Como o usuário não está em execução na Sessão 0, ele nunca vê a interface do usuário e não pode responder a ela.
Da mesma forma, não manipule nenhum elemento de interface do usuário. Por exemplo, um driver UMDF não pode enumerar janelas na sessão do usuário.
Se o driver precisar se comunicar com um serviço, use um mecanismo de cliente/servidor, como RPC (chamada de procedimento remoto) ou pipes nomeados.
Tenha cuidado ao chamar funções na API do Windows. Algumas funções podem manipular elementos da interface do usuário ou tentar acessar objetos nomeados na sessão de um usuário. Não chame funções do Windows que você não chamaria de um serviço de modo de usuário. Como regra geral, um driver UMDF pode chamar com segurança funções que são exportadas em kernel32.dll, mas não funções exportadas em user32.dll.
Um driver UMDF pode chamar funções do Windows para executar as seguintes tarefas:
Um driver pode chamar as funções SetupDiXxx para recuperar uma propriedade de dispositivo Plug and Play. Por exemplo, o Driver de Exemplo UMDF para o Kit de Aprendizagem USB Fx2 da OSR chama SetupDiGetDeviceRegistryProperty para recuperar o GUID para o tipo de barramento do dispositivo. Nota Um driver UMDF não pode chamar com segurança muitas das funções SetupDiXxx , mas é seguro chamar funções que recuperam as propriedades do nó do dispositivo.
Um driver que recupera solicitações de E/S de uma fila manual pode criar um temporizador periódico para sondar a fila. Por exemplo, o exemplo wudfVhidmini registra uma rotina de retorno de chamada de temporizador chamando CreateThreadpoolTimer e define um temporizador periódico chamando SetThreadpoolTimer. Nota A partir da versão 1.11, o UMDF fornece suporte para itens de trabalho. Para obter mais informações, consulte Usando itens de trabalho.
Para obter informações adicionais sobre como usar serviços do sistema fora das estruturas, consulte o Capítulo 14 ("Além das Estruturas") de Orwick, Penny e Guy Smith. Desenvolvendo drivers com o Windows Driver Foundation. Redmond, WA: Microsoft Press, 2007.
Para obter informações adicionais sobre o isolamento de sessão zero, consulte Impacto do isolamento da sessão 0 em serviços e drivers no Windows.