Partilhar via


Simulação de recursos baixos

Quando a opção Simulação de Recursos Baixos (chamada de simulação randomizada de poucos recursos em Windows 8.1) estiver ativa, o Verificador de Driver falhará em instâncias aleatórias das alocações de memória do driver, como poderia ocorrer se o driver estivesse em execução em um computador com memória insuficiente. Isso testa a capacidade do driver de responder corretamente à memória baixa e a outras condições de baixo recurso.

O teste simulação de recursos baixos falha nas alocações solicitadas por chamadas para várias funções diferentes, incluindo ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache e MmMapIoSpace.

Começando com o Windows Vista, O teste de Simulação de Pouco Recurso também injeta falhas em IoAllocateIrp, IoAllocateMdl, IoAllocateWorkItem, IoAllocateErrorLogEntry, MmAllocateContiguousMemory, MmAllocateContiguousMemorySpecifyCache, MmAllocatePagesForMdl e MmAllocatePagesForMdlEx. Além disso, a partir do Windows Vista, quando a Simulação de Baixos Recursos está habilitada, as chamadas para KeWaitForMultipleObjects ou KeWaitForSingleObject com o parâmetro Alertable definido como TRUE podem retornar STATUS_ALERTED ao serem executadas no contexto de processos não privilegiados. Isso simula um possível alerta de thread proveniente de outro thread no mesmo aplicativo sem privilégios.

O teste simulação de pouco recurso também injeta falhas nas seguintes funções GDI: EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrush e CLIPOBJ_ppoGetPath.

No Windows 7 e versões posteriores do sistema operacional Windows, a opção Simulação de Recursos Baixos dá suporte à memória alocada usando as seguintes APIs de kernel:

Começando com Windows 8.1, a opção Simulação de Recursos Baixos também falha nas alocações solicitadas por chamadas para MmAllocateNodePagesForMdlEx. Além disso, para algumas funções, o Verificador de Driver agora preenche a memória alocada com um padrão aleatório. Mas somente em situações em que a função retorna memória não inicializada. Essas funções incluem:

Configurações personalizadas para simulação de recursos baixos

No Windows Vista e versões posteriores do Windows, você pode especificar as seguintes configurações personalizadas.

  • Probabilidade de que uma determinada alocação falhe. O padrão é 6%.

  • Aplicativos afetados. Essa configuração limita as alocações com falha injetadas aos aplicativos especificados. Por padrão, todas as alocações são afetadas.

  • Marcas de pool afetadas . Essa configuração limita as falhas injetadas às alocações com as marcas de pool especificadas. Por padrão, todas as alocações são afetadas.

  • Atraso (em minutos) antes que as alocações falhem. Esse atraso permite que o sistema inicie e se estabilize antes que as falhas sejam injetadas. O padrão é oito minutos.

Em sistemas operacionais anteriores ao Windows Vista, você não pode personalizar essas configurações. O sistema operacional usa os valores padrão.

Simulação de recursos baixos sem reinicialização

Você pode ativar a Simulação de Recursos Baixos no Windows 2000 e versões posteriores do Windows sem reiniciar o computador usando o parâmetro /volatile . As configurações entrarão em vigor imediatamente, mas serão perdidas se você desligar ou reiniciar o computador.

Você também pode armazenar as configurações de Simulação de Recursos Baixos no Registro omitindo o parâmetro /volatile . Essas configurações só são eficazes quando você reinicia o computador, mas elas permanecem efetivas até que você as altere.

Ativando essa opção

Você pode ativar a opção Simulação de Recursos Baixos para um ou mais drivers usando o Gerenciador de Verificador de Driver ou a linha de comando Verifier.exe. Para obter detalhes, consulte Selecionando opções do verificador de driver.

  • Na linha de comando

    Na linha de comando, a opção Simulação de Recursos Baixos é representada pelo Bit 2 (0x4). Para ativar a Simulação de Recursos Baixos, use um valor de sinalizadores de 0x4 ou adicione 0x4 ao valor de sinalizadores. Por exemplo:

    verifier /flags 0x4 /driver MyDriver.sys
    

    A opção estará ativa após a próxima inicialização.

    No Windows Vista e versões posteriores do Windows, você pode usar o parâmetro /faults ou um valor de sinalizadores de 0x4 para ativar a Simulação de Recursos Baixos. Para modificar as configurações da Simulação de Recursos Baixos, você deve usar /faults. Por exemplo:

    verifier /faults /driver MyDriver.sys
    

    No Windows 2000 e versões posteriores do Windows, você também pode ativar e desativar a Simulação de Recursos Baixos sem reinicializar o computador adicionando o parâmetro /volatile ao comando . Por exemplo:

    verifier /volatile /flags 0x4 /adddriver MyDriver.sys
    

    Essa configuração é efetiva imediatamente, mas é perdida quando você desliga ou reinicializa o computador. Para obter detalhes, consulte Usando configurações voláteis.

    No Windows Vista, você pode usar o parâmetro /faults para representar a Simulação de Recursos Baixos com o parâmetro /volatile para representar uma configuração eficaz sem reinicialização. A alteração de configuração será exibida. Por exemplo:

    0>  verifier /volatile /faults /adddriver MyDriver.sys
    New Low Resources Simulation options:
    
    - Use default fault injection probability.
    - Allocations using any pool tag can be failed.
    - Simulate low resources conditions in any application.
    
    The new settings are in effect until you restart this computer
    or change them again.
    
  • Usando o Gerenciador de Verificador de Driver

    1. Iniciar o Gerenciador de Verificador de Driver. Digite Verificador em uma janela do Prompt de Comando.
    2. Selecione Criar configurações personalizadas (para desenvolvedores de código) e clique em Avançar.
    3. Selecione Selecionar configurações individuais em uma lista completa.
    4. Selecione Simulação de recursos baixos.

Personalizando as Configurações (Windows Vista e posteriores)

A partir do Windows Vista, você pode alterar as configurações padrão para as propriedades de atraso, probabilidade, aplicativos e marcas de pool da opção Simulação de Recursos Baixos. Você pode alterar essas configurações usando o Gerenciador de Verificador de Driver ou a linha de comando Verifier.exe. Para obter detalhes, consulte Selecionando opções do verificador de driver.

Na linha de comando, a sintaxe dessas configurações é a seguinte:

verificador [/volatile] /faults[Probabilidade|PoolTags|Aplicativos|DelayMins][/driver|DriverList]

Nota Os parâmetros de configurações personalizadas devem aparecer na ordem exibida. Se você omitir um valor, digite aspas para manter seu lugar.

Subparâmetros

  • /faults

    Habilita a opção Simulação de Recursos Baixos no Verificador de Driver. (Não é possível usar /flags 0x4 com os subparâmetros de configuração personalizados.)

  • Probabilidade

    Especifica a probabilidade de que o Verificador de Driver falhe em uma determinada alocação. Digite um número (no formato decimal ou hexadecimal) para representar o número de chances em 10.000 de que o Verificador de Driver falhará na alocação. O valor padrão, 600, significa 600/10000, ou 6%.

  • PoolTags

    Limita as alocações que o Verificador de Driver pode falhar em alocações com as marcas de pool especificadas. Você pode usar um caractere curinga (*) para representar várias marcas de pool. Para listar várias marcas de pool, separe as marcas com espaços. Por padrão, todas as alocações podem falhar.

  • Aplicativos

    Limita as alocações que o Verificador de Driver pode falhar nas alocações do programa especificado. Digite o nome de um arquivo executável. Para listar programas, separe os nomes dos programas com espaços. Por padrão, todas as alocações podem falhar.

  • DelayMins

    Especifica o número de minutos após a inicialização durante o qual o Verificador de Driver não falha intencionalmente em nenhuma alocação. Esse atraso permite que os drivers sejam carregados e o sistema se estabilize antes do início do teste. Digite um número (no formato decimal ou hexadecimal). O valor padrão é 8 (minutos).

Por exemplo, o comando a seguir habilita a Simulação de Recursos Baixos com uma probabilidade de 10% (1000/10000) e um atraso de cinco minutos para as marcas de pool, Tag1 e Fred e o aplicativo Notepad.exe.

verifier /faults 1000 "Tag1 Fred" Notepad.exe 5

O comando a seguir habilita a Simulação de Recursos Baixos com os valores padrão, exceto que ele estende o atraso para 10 minutos.

verifier /faults "" "" "" 0xa

Usando o Gerenciador de Verificador de Driver

  1. Iniciar o Gerenciador de Verificador de Driver. Digite Verificador em uma janela do Prompt de Comando.

  2. Selecione Criar configurações personalizadas (para desenvolvedores de código) e clique em Avançar.

  3. Selecione Selecionar configurações individuais em uma lista completa.

  4. Selecione Simulação de recursos baixos e clique em Avançar.

  5. Altere as configurações para as propriedades de atraso, probabilidade, aplicativos e marcas de pool conforme desejado.

Exibindo os resultados

Você pode monitorar o número de vezes que o Verificador de Driver falha intencionalmente nas alocações de recursos exibindo o contador global Injetado de Falhas do Verificador de Driver. Esse contador exibe o número total de alocações de recursos que o Verificador de Driver falhou deliberadamente desde a última inicialização.

Você pode exibir esse contador em um arquivo de log do Verificador de Driver (/log), na linha de comando (/consulta) ou no Gerenciador de Verificador de Driver. No Windows 2000, para exibir contadores globais, selecione a guia Contadores Globais . Em versões posteriores do Windows, selecione Exibir informações sobre a tarefa de drivers verificada no momento e pressione Avançar duas vezes. Para obter mais informações, consulte Monitoramento de contadores globais.

Você também pode exibir o número de alocações com falha intencional e o número de alocações totais (para calcular a probabilidade) usando a extensão do depurador !verifier . O exemplo a seguir mostra um exemplo da saída do verificador ! .

Neste exemplo, Injetar falhas aleatórias de API de baixo recurso indica que a Simulação de Recursos Baixos está habilitada. As alocações de recursos falharam deliberadamente representa o número de alocações com falha intencional e a Tentativa de Alocações de Pool representa o número total de alocações.

!verifier

Verify Level 5 ... enabled options are:
        Special pool
        Inject random low-resource API failures

Summary of All Verifier Statistics

RaiseIrqls                             0x2c671f
AcquireSpinLocks                       0xca1a02
Synch Executions                       0x10a623
Trims                                  0x0

Pool Allocations Attempted             0x862e0e
Pool Allocations Succeeded             0x8626e3
Pool Allocations Succeeded SpecialPool 0x768060
Pool Allocations With NO TAG           0x0
Pool Allocations Failed                0x34f
Resource Allocations Failed Deliberately   0x3f5

Para exibir os rastreamentos de pilha para as alocações com falha mais recente pelo Verificador de Driver, use !verifier 4 no depurador de kernel.

O exemplo a seguir mostra um exemplo da saída de !verifier 4. Por padrão, !verifier 4 exibe rastreamentos de pilha das quatro alocações com falha mais recente, mas você pode usar seu parâmetro Quantity para aumentar o número de rastreamentos de pilha exibidos. Por exemplo, !verifier 0x80 exibe as 128 alocações com falha mais recente.

Neste exemplo, observe que o Verificador interceptou e substituiu a chamada do driver para ExAllocatePoolWithTag. Uma das causas mais comuns de falhas de driver ocorre quando um driver tenta alocar memória e usa o ponteiro que a função de alocação retorna antes de verificar se ela não é NULL.

kd> !verifier 4
Resource fault injection history:
Tracker @ 8354A000 (# entries: 80, size: 80, depth: 8)

Entry @ 8354B258 (index 75)

    Thread: C2638220

    816760CB nt!VerifierExAllocatePoolWithTag+0x49
    A4720443 win32k!bDeleteAllFlEntry+0x15d
    A4720AB0 win32k!GreEnableEUDC+0x70
    A47218FA win32k!CleanUpEUDC+0x37
    A473998E win32k!GdiMultiUserFontCleanup+0x5
    815AEACC nt!MiDereferenceSession+0x74
    8146D3B4 nt!MmCleanProcessAddressSpace+0x112
    815DF739 nt!PspExitThread+0x603

Entry @ 8354B230 (index 74)

    Thread: 8436D770

    816760CB nt!VerifierExAllocatePoolWithTag+0x49
    A462141C win32k!Win32AllocPool+0x13
    A4725F94 win32k!StubGdiAlloc+0x10

A experiência com o teste simulação de recursos baixos revela que a maioria das falhas de driver são causadas pela alocação com falha mais recente. No exemplo acima, a falha estava no caminho do win32k! GreEnableEUDC. Examine o código no caminho da alocação para localizar a causa da falha.

Para obter informações sobre !verifier, consulte a documentação Ferramentas de Depuração para Windows .

Para exibir as configurações no Registro na linha de comando, use a opção /querysettings . Por exemplo:

C:\>verifier /querysettings
Special pool: Disabled
Pool tracking: Disabled
Force IRQL checking: Disabled
I/O verification: Disabled
Enhanced I/O verification: Disabled
Deadlock detection: Disabled
DMA checking: Disabled
Security checks: Disabled
Force pending I/O requests: Disabled
Low resources simulation: Enabled
IRP Logging: Disabled
Miscellaneous checks: Disabled

Low Resources Simulation options:

- Fault injection probability: 1/10000.
- Fail only allocations using pool tags: Tag1 Tag2.
- Simulate low resources conditions only in applications: test1.exe test2.exe.
- Boot time delay: 2 minutes.

Verified drivers:

blah.sys