Depuração de kernel para instâncias do Windows pela rede
O KDNET Extensibility Module for Elastic Network Adapter (ENA) é uma camada de suporte de driver de hardware que permite fazer a depuração de kernel do Windows pela rede por meio do ENA nas instâncias do Amazon Elastic Compute Cloud. Use o módulo de extensibilidade com o Windows Debugger (WinDbg) para realizar a depuração em nível de kernel em instâncias do Amazon EC2 executando o Windows.
A depuração do kernel ajuda a diagnosticar e solucionar problemas de baixo nível do sistema operacional, como erros de tela azul (BSODs), falhas de driver e problemas de inicialização em instâncias do EC2 Windows.
Pré-requisitos
Antes de começar, você deve ter o seguinte:
Duas instâncias do EC2 Windows, na mesma sub-rede:
-
Uma instância host da depuração: executa o Windows Debugger (WinDbg).
-
Uma instância de destino da depuração: a instância que você deseja depurar.
Para saber mais sobre inicialização de instâncias, consulte Comece a usar o Amazon EC2.
Os grupos de segurança da instância host e da instância de destino devem permitir tráfego UDP de entrada e saída na porta usada para depuração com KDNET (intervalo recomendado: 50.000 a 50.039). A maneira mais simples de configurar isso é criar um grupo de segurança com uma regra de entrada que permita o tráfego UDP tendo a si mesmo como origem e anexar esse grupo de segurança a ambas as instâncias. Para ter mais informações, consulte Security group rules no Guia do usuário da Amazon VPC.
A instância de destino da depuração deve executar uma dessas versões do Windows (ou posterior):
-
Windows Server 2025 com o número de compilação 26100.7462 (correção de dezembro de 2025)
-
Windows 11 24H2 com o número da compilação 26100.7309
-
Windows 11 25H2 com o número da compilação 26200.7309
nota
O módulo de extensibilidade KDNET para ENA é distribuído como parte do Windows e pode ser atualizado somente por meio das atualizações cumulativas mensais do Windows. É recomendável manter o KB do Windows mais recente instalado no destino da depuração para garantir que você tenha a versão mais recente.
Para verificar se o módulo está presente no destino da depuração, execute o seguinte comando em uma sessão elevada do PowerShell:
Test-Path C:\Windows\system32\kd_02_1d0f.dll
Se o comando retornar True, o módulo estará disponível.
Etapa 1: instalar as ferramentas de depuração do Windows na instância host da depuração
Instale as ferramentas de depuração do Windows na instância host da depuração executando o seguinte comando em uma sessão do PowerShell:
winget install microsoft.windbg
Para obter instruções de instalação detalhadas, consulte Instalar o Windows Debugger
Após a instalação, verifique se o depurador está funcionando, executando o seguinte comando em uma sessão do PowerShell:
windbgx
A janela do WinDbg deve se abrir. Se isso acontecer, a instalação foi bem-sucedida e você pode fechar a janela.
Etapa 2: Configurar o destino da depuração
nota
Quando a depuração do kernel está ativa, o dispositivo ENA usado para a sessão de depuração fica dedicado somente ao tráfego do depurador. Se você precisar manter o acesso à Internet na instância de destino da depuração durante a depuração, anexe um segundo ENA à instância antes de começar.
No destino da depuração, abra uma sessão elevada do PowerShell e configure a depuração do kernel usando as etapas a seguir.
Execute o seguinte comando para listar o número do barramento, dispositivo e função do adaptador ENA conectado à instância:
Get-NetAdapter -Physical | Where-Object -Property PnPDeviceID -Match -Value '^PCI\\VEN_1D0F&DEV_EC2[01]&' | Get-NetAdapterHardwareInfo | Select-Object InterfaceDescription, BusNumber, DeviceNumber, FunctionNumber | Format-List
Se vários adaptadores ENA estiverem conectados à instância, use o comando a seguir para mapear cada adaptador físico para seu endereço IP privado. Você pode fazer a referência cruzada entre esses detalhes no Console de gerenciamento da AWS em EC2 → Instâncias → [ID da instância] → Rede → Interfaces de rede. Isso ajuda a correlacionar os IDs de interface de rede, IPs privados e grupos de segurança específicos com o adaptador no nível do sistema operacional para depuração dirigida.
Get-NetAdapter -Physical | Where-Object PnPDeviceID -Match '^PCI\\VEN_1D0F&DEV_EC2[01]&' | ForEach-Object { $adapter = $_ $hwInfo = $adapter | Get-NetAdapterHardwareInfo $ipInfo = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 [PSCustomObject]@{ InterfaceDescription = $adapter.InterfaceDescription IPAddress = $ipInfo.IPAddress BusNumber = $hwInfo.BusNumber DeviceNumber = $hwInfo.DeviceNumber FunctionNumber = $hwInfo.FunctionNumber } } | Format-List
Observe os valores BusNumber, DeviceNumber e FunctionNumber do adaptador ENA para serem usados para depuração da saída.
Execute os comandos a seguir para configurar a depuração do kernel. Substitua os valores dos espaços reservados por suas informações específicas:
bcdedit /debug on bcdedit /set loadoptions FORCEHVTONOTSHAREDEBUGDEVICE bcdedit /dbgsettings net hostip:host-private-ipport:port-numberkey:encryption-keybusparams:b.d.f
nota
Verifique as loadoptions existentes executando o comando a seguir. Se um valor for retornado, copie essa string e anexe ;FORCEHVTONOTSHAREDEBUGDEVICE a ela.
(bcdedit /enum) -match "loadoptions"
Em que:
-
host-private-ip: o endereço IPv4 privado da instância host da depuração. Se suas instâncias forem inicializadas em uma sub-rede somente IPv6, consulte Setting up KDNET with IPv6na documentação da Microsoft para saber mais sobre o uso de IPv6 com KDNET. -
port-number: a porta a ser usada na sessão de depuração. O intervalo recomendado é de 50.000 a 50.039 (por exemplo,50000). -
cryption-key:uma chave de 256 bits usada para criptografar a conexão de depuração, especificada como quatro valores de 64 bits separados por pontos. Cada valor de 64 bits pode ter até 13 caracteres usando somente letras minúsculas de a a z e dígitos de 0 a 9. Não são permitidos caracteres especiais. Exemplo de chave de criptografia:1kdnet2keys3.4kdnet5keys6.7kdnet8keys9.10kdnet11ke. -
b.d.f: Os números do barramento, do dispositivo e da função do dispositivo ENA, formatados comobus.device.function(por exemplo,0.3.0), usados para depuração.
dica
Para depurar o processo de inicialização do Windows, execute também o seguinte comando:
bcdedit /bootdebug on
Etapa 3: iniciar a sessão de depuração no host da depuração
Para permitir o tráfego da depuração no host, crie uma regra de firewall para a aplicação WinDbg ou para uma porta UDP específica.
Opção 1: permitir a aplicação WinDbg
Execute os seguintes comandos para autorizar o executável WinDbg:
$WinDbgxPath = "$env:LocalAppData\Microsoft\WindowsApps\WinDbgX.exe" New-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection" -Action Allow -Program $WinDbgxPath
Opção 2: permitir uma porta UDP específica
Como alternativa, permita tráfego de UDP de entrada na porta configurada para depuração do kernel. Substitua o número da porta pela porta KDNET escolhida:
$DebugPort =port-numberNew-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection" -Direction Inbound -LocalPort $DebugPort -Protocol UDP -Action Allow
nota
As configurações de firewall podem ser restringidas pela Política de Grupo de Domínio (GPO) ou exigir permissões de administrador elevadas. Se o comando falhar, entre em contado com o administrador da rede.
Inicie o WinDbg com a porta e a chave que correspondem à configuração do destino da depuração. Você pode especificar as opções adicionais de depuração do kernel documentadas na Microsoft WinDbg command line reference
windbgx -k net:port=port-number,key=encryption-key
O WinDbg é aberto e espera que o destino da depuração se conecte.
Etapa 4: inicializar o destino da depuração
No destino da depuração, reinicie a instância para iniciar a conexão de depuração:
shutdown -r -t 0
Depois que o destino da depuração é reiniciado, o WinDbg no host da depuração se conecta automaticamente ao destino. Você já pode usar o WinDbg para inspecionar o estado do kernel, definir pontos de interrupção e diagnosticar problemas.
Após a depuração, limpe as configurações de depuração
No destino da depuração
Depois de concluir a depuração, remova a configuração de depuração de kernel do destino da depuração para restaurar o comportamento de inicialização normal. No destino da depuração, abra uma sessão elevada do PowerShell e execute os seguintes comandos:
bcdedit /debug off bcdedit /dbgsettings LOCAL bcdedit /deletevalue loadoptions
Se suas loadoptions não forem FORCEHVTONOTSHAREDEBUGDEVICE, restaure a configuração executando bcdedit /set loadoptions com as loadoptions originais.
Se você ativou a depuração de inicialização, execute também:
bcdedit /bootdebug off
Reinicie a instância do RDS para que as alterações entrem em vigor.
No host da depuração
Remova a regra de firewall executando:
Remove-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection"
Limitações
O módulo de extensibilidade KDNET para ENA atualmente não é compatível com:
-
Tipos de instância x86_64 não metal de 8ª geração (por exemplo,
m8a.xlarge) -
Tipos de instância x86_64 não metal 48xlarge de 7ª geração (por exemplo,
m7a.48xlarge) -
Tipos de instância u7i
Atualmente, o módulo não é compatível com instâncias com o Secure Boot habilitado. Você pode verificar o status executando Confirm-SecureBootUEFI em uma sessão elevada do PowerShell. Se a saída for True, Secure Boot estará habilitado. Observe que todas as imagens fornecidas pela Amazon com o prefixo 'TPM' têm Secure Boot habilitado por padrão.
Notas adicionais
Se você tiver problemas ao conectar o depurador à instância de destino, verifique o seguinte:
-
Todos os pré-requisitos listados neste guia foram atendidos, incluindo a versão de compilação do Windows Server exigida, e a presença do módulo de extensibilidade.
-
Os grupos de segurança conectados a ambas as instâncias estão configurados corretamente para permitir o tráfego entre elas na porta de depuração configurada.
-
As regras do Firewall do Windows nas instâncias host não bloqueiam tráfego de rede entre as duas instâncias na porta configurada.
Para obter orientação adicional, consulte Configurar a depuração do kernel de rede KDNET manualmente