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.
O Inflight Trace Recorder (IFR) é um recurso de rastreamento que permite que um provedor de rastreamento, como um driver de modo kernel ou um driver UMDF, crie um conjunto de buffers circulares na memória onde as mensagens de log mais recentes são preservadas. As mensagens de log podem ser visualizadas usando um depurador.
IFR é construído sobre o rastreamento de software WPP. O principal benefício do IFR sobre o WPP é que ele é ativado automaticamente e você não precisa iniciar sessões de rastreamento com antecedência.
Aplica-se a:
- Sistema operacional mínimo: Windows 8 para desenvolvedores de drivers KMDF e WDM
- SO mínimo: Windows 10 para desenvolvedores de drivers UMDF (2.15)
Como habilitar o gravador de rastreamento de bordo no Visual Studio
Primeiro, siga as etapas em Adicionando rastreio de software WPP a um driver no Windows.
Em seguida, na página de propriedades do projeto, em Propriedades de Configuração-Rastreamento WPP-Opções de Função e Macro-Habilitar Gravador de Rastreamento em Voo, selecione Sim.
Finalmente, apenas para UMDF, há uma etapa adicional: em WPP Tracing->Function and Macro Options->Preprocessor Definitions, adicione WPP_MACRO_USE_KM_VERSION_FOR_UM=1.
Como ativar o Inflight Trace Recorder a partir da linha de comando
Se você editar o arquivo .vcxproj manualmente, defina as seguintes entradas:
Para um driver KMDF ou WDM:
<ClCompile Include=...>
<WppEnabled>true</WppEnabled>
<WppKernelMode>true</WppKernelMode>
<WppRecorderEnabled>true</WppRecorderEnabled>
...
</ClCompile>
Para um driver UMDF:
<ClCompile Include=...>
<WppEnabled>true</WppEnabled>
<WppRecorderEnabled>true</WppRecorderEnabled>
<WppPreprocessorDefinitions>WPP_MACRO_USE_KM_VERSION_FOR_UM=1</WppPreprocessorDefinitions>
...
</ClCompile>
Como configurar os parâmetros do Inflight Trace Recorder
Você pode configurar o IFR definindo as seguintes entradas opcionais de registo na chave Parameter do driver.
Utilize as seguintes entradas dos Registos:
LogPages: REG_DWORD
Defina o número de páginas para armazenar o log padrão. O padrão é um.
VerboseOn: REG_DWORD
A configuração padrão de zero faz com que o IFR registre erros, avisos e eventos informativos. Defina para um para adicionar saída detalhada ao log.
WppRecorder_UseTimeStamp: REG_DWORD (disponível a partir da compilação 22557 do WDK)
Os drivers definem essa entrada como uma para adicionar carimbos de data/hora às entradas de log que podem ser visualizadas usando !rcdrkd.rcdrlogdump ou !wdfkd.wdflogdump.
WppRecorder_PreciseTimeStamp: REG_DWORD (disponível a partir da compilação 22557 do WDK)
Se você quiser carimbos de data/hora mais precisos, além de WppRecorder_UseTimeStamp, adicione WppRecorder_PreciseTimeStamp usando a mesma sintaxe mostrada acima.
Exemplos
Nos exemplos a seguir, adicione as linhas entre os comentários iniciais e finais para definir o número de páginas de log como duas e ativar os carimbos de data/hora.
Para um driver de modo kernel:
[IfrSample_Service_Inst]
DisplayName = %IfrSample.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\IfrSample.sys
; =============== START
AddReg = IfrSample_Service_Inst.AddReg
[IfrSample_Service_Inst.AddReg]
HKR, "Parameters", "LogPages", %REG_DWORD%, 2
HKR, "Parameters", "WppRecorder_UseTimeStamp", %REG_DWORD%, 1
; =============== END
[Strings]
REG_DWORD = 0x00010001
Para um driver UMDF:
[IfrSampleUm_Install]
UmdfLibraryVersion=$UMDFVERSION$
ServiceBinary=%13%\IfrSampleUm.dll
; =============== START
AddReg=IfrSampleUm_Install.AddReg
[IfrSampleUm_Install.AddReg]
HKR, "Parameters", "LogPages", %REG_DWORD%, 2
HKR, "Parameters", "WppRecorder_UseTimeStamp", %REG_DWORD%, 1
; =============== END
Como enviar mensagens de rastreamento para o log padrão
Siga as instruções em Adicionando rastreamento de software WPP a um driver do Windows. Por exemplo:
- Em DriverEntry, chame
WPP_INIT_TRACING(DriverObject, RegistryPath). - Em EvtDriverUnload, chame
WPP_CLEANUP(WdfDriverWdmGetDriverObject(Driver)).
Agora, o driver pode chamar a função de rastreamento conforme necessário. Por exemplo: TraceEvents(TRACE_LEVEL_ERROR, DBG_INIT, "WdfDriverCreate failed, %!STATUS!", ntStatus);
Para obter mais informações, consulte WPP_INIT_TRACING e WPP_CLEANUP.
Como enviar mensagens de rastreamento para um log personalizado
Isso só se aplica a drivers de modo kernel (KMDF ou WDM).
Para a maioria dos drivers, o único log padrão é bom o suficiente. No entanto, em alguns cenários, é útil ter buffers de log separados para entidades distintas.
Por exemplo, ao escrever um driver de barramento, você pode querer que cada dispositivo filho tenha seu próprio buffer. Em seguida, pode utilizar o depurador para exportar apenas o registo de um dispositivo filho específico.
Para configurar logs personalizados, o driver deve incluir <WppRecorder.h>. Em seguida, chame as seguintes APIs:
- WppRecorderLogCreate para criar mais de um buffer de log
- WppRecorderLogDelete antes de chamar WPP_CLEANUP.
- WppRecorderLogSetIdentifier para definir um identificador de cadeia de caracteres para um determinado log do gravador (opcional)
- WppRecorderConfigure para desativar o log padrão (opcional)
O driver também precisa definir uma nova macro de rastreamento que usa o identificador de log como o primeiro parâmetro. Para obter um exemplo, consulte o Driver de Exemplo Toaster.
Como adicionar informações de carimbo de data/hora a um log personalizado
Se o driver chamar WppRecorderLogCreate para criar identificadores de log adicionais, é possível habilitar carimbos de data/hora para alguns identificadores de log, mas não para outros.
Para fazer isso, é necessário adicionar uma única linha ao código do driver para cada identificador de log que deve usar time stamps. Para obter um exemplo de código, consulte WppRecorderLogCreate.
Observação
Essa funcionalidade está disponível a partir do WDK build 22557. Para obter informações sobre como direcionar uma versão específica, consulte Criando drivers para diferentes versões do Windows.
Como exibir mensagens de rastreamento no depurador
Para controladores KMDF e UMDF, utilize !wdfkd.wdflogdump como de costume. Ele imprimirá tanto o log IFR do framework quanto o log IFR do driver.
Para os drivers WDM, use !rcdrkd.rcdrloglist e !rcdrkd.rcdrlogdump.