Module load completed but symbols could not be loaded for WdFilter.sys FLTMGR.SYS

O problema

O dispositivo apresentava tela azul e reinicialização logo em seguida.


Resumo

O dispositivo apresentava tela azul e reinicialização logo em seguida. Durante a análise do problema, verificou-se que o recurso de despejo de memória no arquivo de DUMP estava desabilitado na máquina, impedindo a coleta de evidências. Após habilitar a opção de despejo de memória, identificou-se um problema relacionado aos drivers FLTMGR.SYS e WdFilter.sys, mas as informações sobre o erro não foram carregadas corretamente no arquivo de DUMP, impossibilitando uma análise mais precisa. Suspeitando de um possível comportamento causado pelo antivírus, atualizamos o antivírus e em seguida executamos comandos para procurar e corrigir arquivos corrompidos no sistema, resolvendo o problema de tela azul.


Análise do problema

Durante a análise do problema, verificou-se que o recurso de despejo de memória no arquivo de DUMP estava desabilitado na máquina, impedindo a coleta de evidências. Após habilitar a opção de despejo de memória, identificou-se um problema relacionado aos drivers FLTMGR.SYS e WdFilter.sys, mas as informações sobre o erro não foram carregadas corretamente no arquivo de DUMP, impossibilitando uma análise mais precisa. Suspeitamos de um possível comportamento causado pelo antivírus, então, atualizamos o antivírus e executamos alguns comandos para procurar e corrigir arquivos corrompidos no sistema, resolvendo o problema de tela azul.

Além disso, tivemos também dificuldade para instalar as atualizações do Windows devido à aplicação de uma GPO antiga que configurava o serviço de Wpdade do Windows e apontava para o servidor WSUS com chaves de registro para pausar as atualizações do Windows. A solução encontrada foi apagar todas as chaves de registro aplicadas via GPO no equipamento.


Causa Raiz

A causa raiz do problema foram os drivers FLTMGR.SYS e WdFilter.sys por uma possível interferência do antivírus, que foi solucionada com a atualização do antivírus e a correção de arquivos corrompidos no sistema. Por fim, a dificuldade na instalação de atualizações do Windows se deu pela aplicação de uma GPO antiga que configurava o serviço de Update do Windows e apontava para os servidores WSUS com chaves de registro para pausar as atualizações do Windows, sendo solucionada com a remoção das chaves de registro aplicadas via GPO no equipamento.


Solução

A solução para o problema de tela azul foi a habilitação do recurso de despejo de memória no arquivo de DUMP, a atualização do antivírus e a correção de arquivos corrompidos no sistema. Já para a dificuldade em instalar as atualizações do Windows, a solução foi apagar todas as chaves de registro aplicadas via GPO no equipamento.

Script em PowerShell para automatizar a solução:

# Script:  WindowsUpdateDefender.ps1
# Descrição: Esse script vai aplicar atualização do antivírus, executar correção de arquivos corrompidos no sistema,
# Atualizar o Windows e apagar todas as chaves de registro aplicadas via GPO para o serviço do Windows Update.
# Autor: DicasQueFunfa
# Data: 09/03/2023
# Dependências: Install-Module -Name PSWindowsUpdate e Import-Module PSWindowsUpdate

# Adiciona log de execução
$logFile = "C:\temp\Logs\WindowsUpdateDefender.log"
Start-Transcript -Path $logFile -Append

# Alterar a política de execução de scripts do PowerShell para "RemoteSigned"
function Set-ExecutionPolicyRemoteSigned {
    # Obtém a política de execução atual
    $policy = Get-ExecutionPolicy

    # Verifica se a política atual é diferente de "RemoteSigned"
    if ($policy -ne "RemoteSigned") {
        # Define a política de execução como "RemoteSigned"
        Set-ExecutionPolicy RemoteSigned -Force

        # Verifica se a política de execução foi definida com sucesso
        if ((Get-ExecutionPolicy) -eq "RemoteSigned") {
            Write-Host "A política de execução de scripts foi alterada para 'RemoteSigned'."
        } else {
            Write-Warning "Não foi possível alterar a política de execução de scripts."
        }
    } else {
        Write-Host "A política de execução de scripts já está definida como 'RemoteSigned'."
    }
}


# Função para verificar e instalar o módulo PowerShellGet
function Install-PowerShellGetModule {
    # Verifica se o módulo PowerShellGet está instalado
    $module = Get-Module -Name "PowerShellGet" -ListAvailable -ErrorAction SilentlyContinue

    if ($module -eq $null) {
        # Instala o módulo PowerShellGet
        Write-Host "O módulo PowerShellGet não está instalado. Instalando o módulo agora..."
        Install-Module -Name "PowerShellGet" -Force
    } else {
        Write-Host "O módulo PowerShellGet já está instalado."
    }
}

# Chama a função para verificar e instalar o módulo PowerShellGet
Install-PowerShellGetModule


function Install-ModuloWindowsUpdate {
    # Verifica se o módulo PSWindowsUpdate está instalado
    $module = Get-Module -Name "PSWindowsUpdate" -ListAvailable -ErrorAction SilentlyContinue

    if ($module -eq $null) {
        # Instala o módulo PSWindowsUpdate
        Write-Host "O módulo PSWindowsUpdate não está instalado. Instalando o módulo agora..."
        Install-Module -Name "PSWindowsUpdate" -Force
    } else {
        Write-Host "O módulo PSWindowsUpdate já está instalado."
    }
}

# Chama a função para verificar e instalar o módulo PSWindowsUpdate
Install-ModuloWindowsUpdate


try {
    # Atualizar antivírus
    Write-Host "Atualizando antivírus..."
    Update-MpSignature -UpdateSource "MicrosoftUpdateServer" -ErrorAction Stop
    Write-Host "Antivírus atualizado com sucesso!"

    # Procurar e corrigir arquivos corrompidos do sistema
    Write-Host "Verificando e corrigindo arquivos corrompidos no sistema..."
    sfc /scannow

    # Remover chaves do registro associadas à política de grupo do serviço de atualização do Windows aplicada via GPO
    Write-Host "Removendo chaves do registro associadas à política de grupo do serviço de atualização do Windows..."
    Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Recurse -ErrorAction SilentlyContinue
    Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Recurse -ErrorAction SilentlyContinue
    Write-Host "Chaves do registro removidas com sucesso!"

    # Verifica se o serviço do Windows Update está em execução
    $service = Get-Service -Name wuauserv
    if ($service.Status -ne "Running") {
        # Inicializa o serviço do Windows Update
        Write-Host "Iniciando o serviço do Windows Update..."
        Start-Service -Name wuauserv
        Write-Host "Serviço do Windows Update iniciado com sucesso!"
    }
    
    # Verifica se há atualizações disponíveis
    Write-Host "Verificando atualizações disponíveis..."
    $updates = Get-WindowsUpdate -ErrorAction Stop
    if ($updates -eq $null) {
        Write-Host "Não há atualizações disponíveis no momento."
    } else {
        Write-Host "Atualizações disponíveis:"
        $updates | Format-Table -AutoSize

        $opcao = Read-Host "Deseja instalar agora (SIM) ou (Não)?"
        switch ($opcao) {
            "Sim" {
                Write-Host "Instalação Aceita. O dispositivo será atualizado."
                # Verifica se o serviço do Windows Update foi interrompido
                $wuService = Get-Service -Name wuauserv
                if ($wuService.Status -eq "Stopped") {
                    Write-Host "O serviço do Windows Update estava parado e foi iniciado."
                    Start-Service -Name wuauserv
                }

                # Instala as atualizações
                Write-Host "Instalando atualizações..."
                Install-WindowsUpdate -AcceptAll -AutoReboot -ErrorAction Stop
                Write-Host "As atualizações foram instaladas com sucesso!"
            }
            "Não" {
                Write-Host "Instalação recusada"
                break
                
            }
            Default {
                Write-Host "Resposta incorreta:" $_
            }
        }
        
    }    
    
}
catch {
    # Captura e trata erros
    Write-Host "Erro: $_" -ForegroundColor Red
}

# Finaliza o log de execução
Stop-Transcript



Arquivo de DUMP

BAD_POOL_CALLER (c2)
The current thread is making a bad pool request.  Typically this is at a bad IRQL level or double freeing the same allocation, etc.
Arguments:
Arg1: 000000000000000d, type of pool violation the caller is guilty of.
Arg2: ffffd3086d6e5b30
Arg3: 000000007266504d
Arg4: 77d327bd6f192610
Debugging Details:
------------------
*** ERROR: Module load completed but symbols could not be loaded for WdFilter.sys
Page 20040eb33 too large to be in the dump file.
BUGCHECK_STR:  0xc2_d
DEFAULT_BUCKET_ID:  WIN8_DRIVER_FAULT
PROCESS_NAME:  MsMpEng.exe
CURRENT_IRQL:  0
ANALYSIS_VERSION: 6.3.9600.16384 (debuggers(dbg).130821-1623) amd64fre
LAST_CONTROL_TRANSFER:  from fffff8014486896e to fffff801447f6210
STACK_TEXT:  
fffff60c`45cbee98 fffff801`4486896e : 00000000`000000c2 00000000`0000000d ffffd308`6d6e5b30 00000000`7266504d : nt!KeBugCheckEx
fffff60c`45cbeea0 fffff801`44db2019 : ffffd308`63dd5050 ffffd308`6d6e5b48 00000000`00000081 01000000`00100000 : nt!ExFreeHeapPool+0x1a0a6e
fffff60c`45cbef80 fffff801`44dd3226 : ffffd308`6d6e5b30 00000000`00000000 00000000`00000001 00000000`00000000 : nt!ExFreePool+0x9
fffff60c`45cbefb0 fffff801`46335243 : 0000008b`c487ddc0 ffffd308`63dd5050 00000000`00000000 00000000`00000000 : nt!VerifierExFreePoolWithTag+0x56
fffff60c`45cbefe0 fffff801`442cb7fb : 00000000`00000000 00000193`4e0b0f70 d3086b9b`000002b0 0000008b`c487ddc0 : WdFilter+0x25243
fffff60c`45cbf090 fffff801`44303499 : ffffbc01`f4906500 ffffbc01`f4906430 0000008b`c487ddc0 ffffa552`a94fff20 : FLTMGR!FltpFilterMessage+0xdb
fffff60c`45cbf0f0 fffff801`442c4910 : ffffbc01`f203bd60 00000000`00000002 00000000`00000000 ffffbc01`f4906430 : FLTMGR!FltpMsgDispatch+0x179
fffff60c`45cbf160 fffff801`446ce6c5 : ffffbc01`f4906430 00000000`00000000 fffff60c`45cbf540 00000000`00000001 : FLTMGR!FltpDispatch+0xe0
fffff60c`45cbf1c0 fffff801`44ac3528 : ffffbc01`f4906430 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IofCallDriver+0x55
fffff60c`45cbf200 fffff801`44ac2df5 : 00000000`00000000 fffff60c`45cbf540 00000000`00000000 fffff60c`45cbf540 : nt!IopSynchronousServiceTail+0x1a8
fffff60c`45cbf2a0 fffff801`44ac27f6 : 00007ff9`07f1f4ac 00000000`00000000 00000000`00000000 00000000`00000000 : nt!IopXxxControlFile+0x5e5
fffff60c`45cbf3e0 fffff801`44807bb5 : 00000000`00000000 00000000`00000000 00000000`00000000 0000008b`c487e4b0 : nt!NtDeviceIoControlFile+0x56
fffff60c`45cbf450 00007ff9`24fabe84 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x25
0000008b`c487dc78 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x00007ff9`24fabe84
STACK_COMMAND:  kb
FOLLOWUP_IP: 
WdFilter+25243
fffff801`46335243 0f1f440000      nop     dword ptr [rax+rax]
SYMBOL_STACK_INDEX:  4
SYMBOL_NAME:  WdFilter+25243
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: WdFilter
IMAGE_NAME:  WdFilter.sys
DEBUG_FLR_IMAGE_TIMESTAMP:  0
FAILURE_BUCKET_ID:  0xc2_d_VRF_WdFilter+25243
BUCKET_ID:  0xc2_d_VRF_WdFilter+25243
ANALYSIS_SOURCE:  KM
FAILURE_ID_HASH_STRING:  km:0xc2_d_vrf_wdfilter+25243
FAILURE_ID_HASH:  {90c175c5-7cf9-66d5-0c76-92c98cb21ab0}
Followup: MachineOwner

Comentários

LEIA-ME

Desenvolver ferramentas e scripts que facilitem o seu trabalho diário, solucionar problemas e documentar tudo, criando passo a passos detalhados de como resolvê-los, é uma tarefa que requer tempo e dedicação. Por esse motivo, contamos com a sua contribuição.

Sua doação não é obrigatória, mas é muito importante para que possamos continuar mantendo o DicasQueFunfa funcionando e desenvolvendo soluções úteis para você.



Mais