Compartilhar via


Application Verifier (Guia de Qualidade de Aplicativo do Windows 7 e Windows Server 2008 R2)

Plataformas afetadas

Clientes - Windows XP, Windows Vista, Windows 7
Servidores - Windows Server 2003, Windows Server 2008, Windows Server 2008 R2

Descrição

Promova e imponha o Application Verifier como uma porta de qualidade para todo o desenvolvimento. Inclui várias melhorias:

  • Fornecemos verificações adicionais para resolver problemas que a equipe do Relatório de Erros do Windows descobriu durante o uso do pool de threads.
  • Combinamos versões de 32 e 64 bits do pacote para abordar as alterações no Windows 7, incluindo as necessidades de testar componentes de 32 bits em uma versão de 64 bits do Windows, bem como para simplificação geral.
  • Incluímos verificações adicionais para aplicativos multi-threaded, executando aplicativos de 32 bits no Windows de 64 bits, bem como muitas correções de bugs.

Essas alterações não devem ter impacto negativo nos usuários que não habilitam as Verificações de Thread. Aqueles que o fizerem devem receber suporte adicional na descoberta e diagnóstico de problemas de uso de pool de threads existentes. Com as Verificações de Threads habilitadas ou não, você se beneficiará das outras melhorias e correções de bugs neste serviço.

Embora haja uma pequena penalidade de desempenho ao usar esse serviço, os níveis de desempenho devem permanecer aceitáveis porque ele normalmente não é executado em ambientes de varejo.

Uso

Informações Gerais

Para oferecer aplicativos confiáveis do Windows:

  1. Teste aplicativos escritos em código não gerenciado (nativo) com o Application Verifier sob o depurador e com heap de página inteira antes de liberá-lo para os clientes.
  2. Siga as etapas fornecidas pelo Application Verifier para resolver condições errantes.
  3. Depois que o aplicativo for lançado, monitore regularmente os relatórios de falha do aplicativo coletados pelo Relatório de Erros do Windows.

As verificações do pool de threads são habilitadas por padrão no título de verificação "Básico". Como isso está incluído na configuração padrão, os usuários precisam apenas executar o Application Verifier em seu código com as configurações padrão para aproveitar as novas verificações.

Detalhes

No mínimo, você deve executar o Application Verifier com a configuração Básica selecionada. Isso é necessário para WinLogo e WinQual. A configuração Básica verifica o seguinte:

  • Detalhes da Parada de Exceções - Garante que os aplicativos não ocultem violações de acesso usando o tratamento estruturado de exceções
  • Detalhes da Parada de Identificadores - Testa para garantir que o aplicativo não esteja tentando usar identificadores inválidos
  • Detalhes da Parada de Heaps - Verifica se há problemas de corrupção de memória no heap
  • Detalhes da Parada de Entrada/Saída - Monitora a execução de E/S assíncrona e executa várias validações
  • Detalhes da Parada de Vazamento - Detecta vazamentos rastreando os recursos feitos por uma DLL que não são liberados no momento em que a DLL foi descarregada
  • Detalhes da Parada de Bloqueios - Verifica o uso correto para seções críticas
  • Detalhes da Parada de Memória - Garante que as APIs para manipulações de espaço virtual sejam usadas corretamente (por exemplo, VirtualAlloc, MapViewOfFile)
  • Detalhes da Parada de TLS - Garante que as APIs de armazenamento local de thread sejam usadas corretamente
  • Detalhes da Parada de Threadpool - Garante o uso correto das APIs do threadpool e impõe verificações de consistência nos estados de thread de trabalho após um retorno de chamada

Se o aplicativo está migrando de um aplicativo "Pre-Vista", você vai querer aproveitar o "LuaPriv" (também conhecido como verificações UAC). O Indicador de Privilégios de Conta de Usuário Limitado (LuaPriv) tem dois objetivos principais:

  • Preditivo: ao executar um aplicativo com privilégio administrativo, preveja se esse aplicativo funcionaria tão bem se executado com menos privilégios (geralmente, como um usuário normal). Por exemplo, se o aplicativo gravar em arquivos que só permitem o acesso de Administradores, esse aplicativo não poderá gravar no mesmo arquivo se executado como um não-administrador.
  • Diagnóstico: durante a execução com privilégio de não administrador, identifique possíveis problemas que podem já existir com a execução atual. Continuando o exemplo anterior, se o aplicativo tentar gravar em um arquivo que concede acesso somente aos membros do grupo Administrador, o aplicativo receberá um erro ACCESS_DENIED. Se o aplicativo não funcionar corretamente, essa operação pode ser a culpada.

O LuaPriv identifica os seguintes tipos de problemas:

Possível Problemas Descrição
Namespaces restritos A criação de um objeto de sincronização nomeado (Event, Semaphore, Mutex, etc.) sem um namespace pode complicar a execução sem privilégio em alguns sistemas operacionais porque o sistema operacional pode optar por colocar o objeto em um namespace restrito. A criação desse objeto em um namespace restrito (como o namespace Global) requer SeCreateGlobalPrivilege, que é concedido somente a administradores.
O LuaPriv sinaliza esses dois problemas se os detectar.
Verificações fixas do Administrador Alguns aplicativos interrogam o token de segurança do usuário para descobrir quanto privilégio ele tem. Nesses casos, o aplicativo pode mudar seu comportamento dependendo de quanto poder ele acha que o usuário tem.
O LuaPriv sinaliza chamadas de API que retornam essas informações.
Solicitando privilégios Um aplicativo pode tentar habilitar um privilégio relevante à segurança (como SeTcbPrivilege ou SeSecurityPrivilege) antes de executar uma operação que o exija.
LuaPriv sinaliza tentativas de habilitar privilégios relevantes para segurança.
Privilégios ausentes Se um aplicativo tentar habilitar um privilégio que o usuário não tem, ele provavelmente sinaliza que o aplicativo espera o privilégio, o que pode causar diferenças de comportamento.
O LuaPriv sinaliza solicitações de privilégio com falha.
Operações de arquivo INI As tentativas de gravar em arquivos INI mapeados (WritePrivateProfileSection e APIs semelhantes) podem falhar como um usuário não administrador.
LuaPriv sinaliza tais operações.
Acesso negado Se o aplicativo tentar acessar um objeto (arquivo, chave do Registro, etc.), mas a tentativa falhar devido ao acesso insuficiente, o aplicativo provavelmente espera estar sendo executado com mais privilégios do que tem.
O LuaPriv sinaliza tentativas de abertura de objeto que falham com ACCESS_DENIED e erros semelhantes.
Negar ACEs Se um objeto tiver Negar ACEs em sua DACL, ele negará explicitamente o acesso a entidades específicas.
Isso é incomum e dificulta a previsão, então o LuaPriv sinaliza Negar ACEs quando os encontra.
Acesso Restrito Se um aplicativo tentar abrir um objeto para direitos que não são concedidos a usuários normais (por exemplo, tentando gravar em um arquivo que só pode ser gravado por administradores), o aplicativo provavelmente não funcionará da mesma forma quando executado como um usuário normal.
LuaPriv sinaliza tais operações.
MAXIMUM_ALLOWED Se um aplicativo abrir um objeto para MAXIMUM_ALLOWED, a verificação de acesso real no objeto ocorrerá em outro lugar. A maioria dos códigos que fazem isso não funcionam corretamente e quase certamente funcionarão de forma diferente quando executados sem privilégio.
LuaPriv sinaliza todos os incidentes de MAXIMUM_ALLOWED.

 

Problemas comumente negligenciados são capturados nas Verificações Diversas:

  • Detalhes de Interrupções de APIs Perigosas
  • Detalhes de Interrupções de Pilhas Sujas
  • Sobreposição de Tempo

Adicionamos um novo Verificador de Impressão. Essa camada ajuda a localizar e solucionar problemas que podem ocorrer quando um aplicativo chama o subsistema de impressão. O Verificador de Impressão tem como alvo as duas camadas do subsistema de impressão, a camada PrintAPI e a camada PrintDriver.

Camada da API de Impressão

O Verificador de Impressão testa a interface entre um programa e Winspool.drv e prntvpt.dll e testa as interfaces dessas DLLs.

Camada do Driver de Impressão

O Verificador de Impressão também testa a interface entre um driver de impressão principal, como UNIDRV.DLL, UNIDRUI.DLL, PSCRIPT5.DLL, PS5UI.DLL ou MXDWDRV.DLL, e os plug-ins do driver de impressão.

Observe que algumas dessas verificações são apenas para o Windows 7 e outras simplesmente terão um desempenho melhor no Windows 7.

Normalmente, apenas as versões de depuração executam o Application Verifier, portanto, o desempenho geralmente não é um problema. Se surgirem problemas de desempenho decorrentes do uso dessa ou de qualquer outra verificação do Application Verifier, execute uma verificação de cada vez até que você tenha executado todas as verificações necessárias.

Quase 10% das falhas de aplicativos em sistemas Windows são devidas à corrupção de heap. Essas falhas são quase impossíveis de depurar após o fato. A melhor maneira de evitar esses problemas é testar com os recursos de Heap de Página encontrados no Application Verifier. Há duas variantes de Heap de Página: "Completo" e "Leve". Completo é o padrão; forçará um depurador a parar instantaneamente ao detectar corrupção. Esse recurso DEVE ser executado enquanto estiver sob o depurador. No entanto, é também o que mais demanda recursos. Se um usuário estiver tendo problemas de tempo e já tiver executado um cenário em Heap de Página "Completo", defini-lo como "Leve" provavelmente resolverá esses problemas. Além disso, o Heap de Página Leve não falha até que o processo feche. Ele fornece um rastreamento de pilha para a alocação, mas pode levar mais tempo para diagnosticar do que aproveitar sua contraparte Completa.

Monitore o status de confiabilidade dos aplicativos através do portal Web Winqual. Este portal mostra os relatórios de erros recolhidos através do Relatório de Erros do Windows, para que seja fácil identificar as falhas mais frequentes. Saiba mais sobre isso em Relatório de Erros do Windows: Introdução. A Microsoft não cobra por este serviço.

Para usufruir do WinQual, você deve:

  1. Registrar sua empresa no WinQual, que requer uma ID VeriSign. Você pode encontrar informações do Windows 7 sobre o WinQual no portal do desenvolvedor agrupado em Windows Vista SP1\Windows Server 2008. Ele terá um local do Windows 7 em breve.
  2. Mapeie os aplicativos ISV para um nome de produto e o nome do ISV, que vincula os relatórios de falha à empresa. Outros ISVs não podem exibir seus relatórios de erros.
  3. Use o portal para identificar os principais problemas. Os ISVs também podem criar respostas que informam aos clientes quais etapas devem ser tomadas após uma falha. O sistema de resposta suporta mais de 10 idiomas em todo o mundo.

Uma observação adicional: o Application Verifier é tão bom quanto os caminhos de código contra os quais você o executa. O valor da combinação dessa ferramenta com uma ferramenta de cobertura de código não pode ser exagerado.

Ferramentas de Depuração para Windows:

Application Verifier:

WinQual: