Hoje vou apresentar a vocês o novo recurso do Windows 7/Windows Server 2008 R2 - host do console (ConHost.exe).
Na verdade, seja como usuários comuns ou administradores corporativos, usaremos aplicativos de console mais ou menos em nossos aplicativos diários do Windows e em processos de operação e manutenção. O aplicativo de console não possui interface de usuário. Precisamos realizar operações de entrada e saída nele por meio do prompt de comando (CMD, isso não é DOS, muitas pessoas ficam confusas).
Então, vamos pensar: com quais aplicativos de console o Windows vem?
Na verdade, os mais típicos incluem cmd.exe, nslookup.exe e telnet.exe.
Nas versões anteriores do Windows, todos os aplicativos que representavam atividades não GUI (ou seja, aplicativos de console) eram coordenados por meio do processo do sistema Csrss.exe quando queriam ser executados na área de trabalho. Quando um aplicativo de console precisa receber caracteres, ele chama pequenas "APIs de console" em Kernel32.dll para permitir que Kernel32 gere LPC para chamar CSRSS. Neste momento, o CSRSS verificará e verificará a fila de entrada da janela do console e retornará os resultados do modo de caractere ao aplicativo do console por meio do Kernel32 para associação. O mecanismo de processamento de mensagens dos aplicativos de console nas primeiras versões do Windows é mostrado na figura abaixo:
Esse mecanismo de processamento criou um problema: mesmo que um aplicativo de console seja executado no contexto de um usuário normal, o Csrss.exe sempre é executado sob as permissões da conta do sistema local. Portanto, em alguns casos, o malware desenvolvido por “bandidos” pode ganhar mais privilégios por meio do Csrss.exe executado com permissões de conta do sistema local. Este modo de ataque é denominado Shatter Attack.
Na era do Win7 e do Windows Server 2008 R2, todos os aplicativos de console são colocados em um novo processo de contexto ConHost.exe para execução, e ConHost (host do console) e programas de console são executados no mesmo contexto de nível de segurança entre eles, em vez de emitir. uma solicitação de mensagem LPC para CSRSS para processamento, ele solicita ConHost. Portanto, qualquer tentativa de aplicativo de explorar uma solicitação de mensagem para causar elevação automática de privilégio não terá êxito. A figura a seguir é um diagrama esquemático do novo mecanismo usado no Windows 7 e no Windows Server 2008 R2:
ConHost substitui uma mudança permanente na maneira como a E/S é tratada pelos aplicativos de console. Os usuários não podem forçar o Windows a reverter para o comportamento do console no "modo legado" por meio do registro ou da Política de Grupo. Portanto, os usuários precisam testar exaustivamente os aplicativos antes de atualizar para o Windows 7 ou Windows Server 2008 R2. Não se esqueça de que, embora a maioria das funções de alguns aplicativos sejam implementadas por meio da GUI, os dados ainda são processados em lotes por meio do console ou de outras interfaces funcionais em segundo plano. Portanto, é muito necessário realizar testes funcionais abrangentes do aplicativo antes da migração ou nivelamento.
Quando um aplicativo não pode ser usado normalmente no Windows 7, devemos primeiro testá-lo e executá-lo novamente com direitos de administrador para ver se o problema ocorre. Na verdade, podemos usar o Process Monitor para monitorar se os direitos de acesso do aplicativo aos arquivos ou ao registro. são normais. Se o aplicativo ainda não funcionar normalmente após solucionar os problemas acima, você precisará entrar em contato com o ISV ou seu desenvolvedor.
Se um aplicativo travar, o arquivo de despejo de memória correspondente será mais útil para desenvolvedores e ISVs encontrarem o cerne do problema. Se o aplicativo parar de responder, você pode tentar usar o ADPlus para capturá-lo e seu despejo de processo ConHost.exe associado. Os aplicativos de console podem compartilhar muitos subprocessos do console do Windows. Por exemplo, quando o usuário inicia o Telnet a partir da janela CMD, o Telnet.exe se tornará um subprocesso do Cmd.exe. Nesse caso, o host ConHost.exe processa instâncias de mensagens do processo pai e do processo filho. Usando o Process Explorer, podemos confirmar quais processos o ConHost.exe está manipulando:
Você também pode usar a função "Analyze Waiting Chain" no Windows 7 Resource Monitor para visualizar o processo de aplicação do processo ConHost.exe:
Por fim, não se esqueça de testar totalmente o aplicativo antes da migração!