Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Quando a opção Simulação de Baixos Recursos (chamada Simulação de Recursos Baixos Randomizados no Windows 8.1) está ativa, o Verificador de Driver falha em instâncias aleatórias das alocações de memória do driver, como pode ocorrer se o driver estiver sendo executado em um computador com memória insuficiente. Isso testa a capacidade do driver de responder adequadamente a pouca memória e outras condições de poucos recursos.
O teste de simulação de baixos recursos falha nas alocações solicitadas por chamadas para várias funções diferentes, incluindo ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache e MmMapIoSpace.
A partir do Windows Vista, o teste de Simulação de Recursos Baixos 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 quando executadas no contexto de processos sem privilégios. Isso simula um possível alerta de thread vindo de outro thread no mesmo aplicativo não privilegiado.
O teste Low Resource Simulation 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 Baixos Recursos oferece suporte à memória alocada usando as seguintes APIs do kernel:
#B0 #A1 IoAllocateMdl #A2 #C3
IoAllocateIrp e outras rotinas que podem alocar estruturas de dados para pacotes de pedidos de E/S (IRP)
#B0 #A1 #A2 #C3 RtlAnsiStringToUnicodeString e outras rotinas de cadeia de caracteres RTL (biblioteca de tempo de execução)
#B0 #A1 IoSetCompletionRoutineEx #A2 #C3
A partir do Windows 8.1, a opção Simulação de Baixos Recursos também falha nas alocações solicitadas por chamadas para MmAllocateNodePagesForMdlEx. Além disso, para algumas funções, o Driver Verifier agora preenche a memória alocada com um padrão aleatório. Mas apenas em situações em que a função retorna memória não inicializada. Estas funções incluem:
- MmAllocatePagesForMdlEx
- MmAllocateNodePagesForMdlEx
- MmAllocateContiguousMemory
- MmAllocateContiguousMemorySpecifyCache
- MmAllocateContiguousMemorySpecifyCacheNode
- MmAllocateContiguousNodeMemory
- MmAllocateNonCachedMemory
Configurações personalizadas para simulação de poucos recursos
No Windows Vista e versões posteriores do Windows, você pode especificar as seguintes configurações personalizadas.
Probabilidade de uma determinada alocação falhar. O padrão é 6%.
Aplicações afetadas. Essa configuração limita as alocações com falha injetadas para os aplicativos especificados. Por padrão, todas as alocações são afetadas.
Tags de memória de pool afetadas. Esta configuração limita as falhas injetadas às alocações que utilizam as etiquetas de pool especificadas. Por padrão, todas as alocações são afetadas.
Atraso (em minutos) antes de as alocações falharem. Este atraso permite que o sistema inicie e estabilize antes que as falhas sejam injetadas. O padrão é oito minutos.
Em sistemas operacionais anteriores ao Windows Vista, não é possível personalizar essas configurações. O sistema operacional usa os valores padrão.
Simulação de baixos recursos sem reinicialização
Você pode ativar a simulação de baixos recursos no Windows 2000 e versões posteriores do Windows sem reiniciar o computador usando o parâmetro /volatile . As configurações entram em vigor imediatamente, mas são perdidas se você desligar ou reiniciar o computador.
Você também pode armazenar as configurações de Simulação de Baixos Recursos no Registro omitindo o parâmetro /volatile . Essas configurações são efetivas somente quando você reinicia o computador, mas permanecem efetivas até que você as altere.
#B0 #A1 Ativar Esta Opção
Você pode ativar a opção Simulação de Baixos Recursos para um ou mais drivers usando o Gerenciador de Verificadores de Driver ou a linha de comando Verifier.exe. Para obter detalhes, consulte Selecionando Opções do Verificador de Controladores.
Na linha de comando
Na linha de comando, a opção Simulação de Baixos Recursos é representada pelo Bit 2 (0x4). Para ativar a Simulação de Baixos Recursos, use um valor de sinalizadores de 0x4 ou adicione 0x4 ao valor de sinalizadores. Por exemplo:
verifier /flags 0x4 /driver MyDriver.sysA 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 Baixos Recursos. Para modificar as configurações do Low Resources Simulation, você deve usar /faults. Por exemplo:
verifier /faults /driver MyDriver.sysNo Windows 2000 e versões posteriores do Windows, você também pode ativar e desativar a Simulação de Baixos Recursos sem reinicializar o computador adicionando o parâmetro /volatile ao comando. Por exemplo:
verifier /volatile /flags 0x4 /adddriver MyDriver.sysEssa configuração entra em vigor imediatamente, mas é perdida quando você desliga ou reinicia o computador. Para obter detalhes, consulte Usando Configuração Volátil.
No Windows Vista, você pode usar o parâmetro /faults para representar a Simulação de Baixos Recursos 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 Gestor do Verificador de Drivers
- Inicie o Driver Verifier Manager. Digite Verifier numa janela da Linha de Comandos.
- Selecione Criar configurações personalizadas (para desenvolvedores de código) e clique em Avançar.
- Selecione configurações individuais de uma lista completa.
- Selecione Simulação de poucos recursos.
Personalizando as configurações (Windows Vista e posterior)
A partir do Windows Vista, você pode alterar as configurações padrão para as propriedades de atraso, probabilidade, aplicativos e tags de pool da opção Simulação de Baixos Recursos. 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 Controladores.
Na linha de comando, a sintaxe para essas configurações é a seguinte:
verificador [/volatile] /faults[Probabilidade|PoolTags|Aplicações|MinutosDeAtraso][/driver|ListaDeDrivers]
Observação Os parâmetros de configurações personalizadas devem aparecer na ordem exibida. Se omitir um valor, digite aspas para manter o seu lugar.
Subparâmetros
/falhas
Habilita a opção Simulação de Baixos Recursos no Verificador de Driver. (Não é possível usar /flags 0x4 com os subparâmetros de configuração personalizada.)
Probabilidade
Especifica a probabilidade de o Verificador de Controladores falhar numa alocação específica. Digite um número (em 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
Restringe as alocações que o Verificador de Driver pode falhar apenas às alocações com as etiquetas de pool especificadas. Você pode usar um caractere curinga (*) para representar várias tags de pool. Para listar várias tags de pool, separe as tags com espaços. Por padrão, todas as alocações podem falhar.
Aplicações
Limita as verificações que o Verificador de Driver pode falhar às relacionadas com o 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 os quais o Verificador de Driver não falha intencionalmente em nenhuma alocação. Este atraso permite que os condutores carreguem e o sistema estabilize antes do início do teste. Digite um número (em formato decimal ou hexadecimal). O valor padrão é 8 (minutos).
Por exemplo, o comando a seguir habilita o Low Resources Simulation com uma probabilidade de 10% (1000/10000) e um atraso de cinco minutos para as tags 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 Baixos Recursos com os valores padrão, exceto que ele estende o atraso para 10 minutos.
verifier /faults "" "" "" 0xa
#B0 Usando o Driver Verifier Manager #C1
Inicie o Driver Verifier Manager. Digite #B0 Verificador #C1 em uma janela do prompt de comando.
Selecione Criar configurações personalizadas (para desenvolvedores de código) e clique em Avançar.
Selecione #B0 Selecionar configurações individuais em uma lista completa #A1 .
Selecione Simulação de recursos baixos e clique em Avançar.
Altere as configurações para as propriedades de atraso, probabilidade, aplicativos e tags de pool conforme desejado.
Visualizando 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 Falhas Injetadas 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 visualizar esse contador em um arquivo de log do Verificador de Driver (/log), na linha de comando (/query) ou no Gerenciador do 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 verificados no momento e pressione Avançar duas vezes. Para obter mais informações, consulte Monitorando contadores globais.
Você também pode exibir o número de alocações intencionalmente falhadas e o número total de alocações (para calcular a probabilidade) usando a extensão do depurador !verifier . O exemplo a seguir mostra um exemplo da saída !verifier .
Neste exemplo, Injetar falhas aleatórias de API de baixo recurso indica que a Simulação de Baixo Recursos está habilitada. Alocações de Recursos Deliberadamente Falhadas representa o número de alocações intencionalmente falhadas e Alocações de Grupo Tentadas 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 mais recentemente falhadas pelo Verificador de Driver, use !verifier 4 no depurador do kernel.
O exemplo a seguir mostra uma amostra da saída do !verifier 4. Por padrão, !verifier 4 exibe traços de pilha das quatro alocações falhadas mais recentemente, mas pode usar o parâmetro Quantity para aumentar o número de traços de pilha exibidos. Por exemplo, !verifier 0x80 exibe as 128 alocações falhadas mais recentes.
Neste exemplo, observe que o Verifier intercetou e substituiu a chamada do driver para ExAllocatePoolWithTag. Uma das causas mais comuns de falhas de controlador ocorre quando um controlador tenta alocar memória e, em seguida, usa o ponteiro que a função de alocação retorna antes de verificar se 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 de Simulação de Baixos Recursos revela que a maioria dos acidentes de condutores são causados pela falha mais recente de alocação. No exemplo acima, o acidente foi no caminho do win32k! GreEnableEUDC. Examine o código no caminho da alocação para encontrar a causa da falha.
Para obter informações sobre !verifier, consulte a documentação das 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