Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tópico fornece informações sobre registo, rastreamento e depuração das extensões de classe de áudio ACX.
Registo de logs do driver ACX
O rastreamento de software para drivers geralmente é baseado no Event Tracing for Windows (ETW), um recurso de nível de kernel que registra mensagens de rastreamento para processos de modo kernel e modo de usuário. Como os drivers ACX são drivers WDF, todos os recursos de registro e eventos do WDF estão disponíveis para desenvolvedores de drivers ACX.
WPP
Como o ETW pode ser um pouco complicado de usar, a maioria dos desenvolvedores de drivers usa o pré-processador de rastreamento de software (WPP) do Windows, que simplifica e aprimora o processo de instrumentação de um driver para rastreamento ETW.
O ACX usa registos WPP para rastreamento e depuração. Para obter mais informações, consulte Usando o rastreamento de software WPP em drivers KMDF e Adicionando rastreamento de software WPP a um driver do Windows.
Gravador In-Flight (IFR)
In-Flight gravador (IFR) é suportado e pode ser visualizado via WDFKD, RCDRKD ou com a extensão do depurador ACXKD quando estiver disponível. Para obter informações gerais sobre como trabalhar com logs IFR, consulte Usando o IFR (Inflight Trace Recorder) em drivers KMDF e UMDF 2 eVídeo: Acessando logs IFR do driver sem um depurador
O ACX registra eventos-chave usando outros provedores ETW para simplificar a visualização desses eventos especiais.
Adicionar log ao seu driver
Os drivers de terceiros são altamente encorajados a também usar eventos WPP e ETW.
Este código de exemplo mostra a verificação de um valor de retorno e o registro de um erro apropriado.
//
// The driver uses this DDI to delete the circuits from the current device.
//
status = AcxDeviceRemoveCircuit(Device, devCtx->Speaker);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove speaker circuit, continuing with ReleaseHardware, %!STATUS!", status); }
status = AcxDeviceRemoveCircuit(Device, devCtx->MicArray);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove micarray circuit, continuing with ReleaseHardware, %!STATUS!", status); }
status = AcxDeviceRemoveCircuit(Device, devCtx->SpeakerHp);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove speakerHp circuit, continuing with ReleaseHardware, %!STATUS!", status); }
status = AcxDeviceRemoveCircuit(Device, devCtx->MicrophoneHp);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove microphoneHp circuit, continuing with ReleaseHardware, %!STATUS!", status); }
status = AcxDeviceRemoveCircuit(Device, devCtx->HDMI);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove HDMI circuit, continuing with ReleaseHardware, %!STATUS!", status); }
A versão em destaque do código de exemplo do driver Toaster fornece exemplos de rastreamento WMI, bem como código de rastreamento reutilizável. Para mais informações sobre o exemplo do driver Toaster, consulte Driver de exemplo Toaster.
Recomendações para o registro em log do driver ACX
Para melhorar a confiabilidade do driver ACX, considere os seguintes comportamentos para registo de eventos.
- Valores de retorno inesperados do buffer de E/S do fluxo ou de outra ação regular de processamento de sinais.
- Estados de energia inesperados ou transições de estado de energia.
- Erros relacionados a chamadas feitas durante atualizações ou reinstalação.
- Outros comportamentos que podem levar à "ausência de áudio" podem ser considerados para o registro.
Usando as extensões do depurador de rastreio WMI
Para exibir eventos de rastreio no depurador, use a extensão WMI Wmitrace.dll. Ele contém uma biblioteca de funções projetadas para controlar e visualizar o rastreamento de eventos WMI. Para obter mais informações, consulte Extensões de rastreamento WMI (Wmitrace.dll).
Depuração do driver ACX
Os drivers ACX são drivers WDF, portanto, as técnicas de depuração descritas para drivers WDF se aplicam aos drivers ACX. Consulte os tópicos a seguir para obter informações sobre como depurar drivers WDF.
Informações gerais sobre as ferramentas de depuração
Ferramentas de depuração para Windows (WinDbg, KD, CDB, NTSD)
Depuração KMDF
Este passo a passo usa o driver de áudio Sysvad tradicional, mas ilustra algumas técnicas que podem ser úteis para os drivers ACX. Debug Drivers - Laboratório Guiado Passo a Passo (Modo Kernel Sysvad)
Vídeo Passo a passo
- Vídeo: Depurando seu driver com o código-fonte WDF
- Série de vídeos: Depuração de drivers do Driver Framework Kernel-Mode
Biblioteca de extensão do depurador do kernel ACX (AcxKd.dll)
Para ajudar na depuração, o ACX tem uma biblioteca associada de extensão do depurador do kernel (AcxKd.dll). Esta biblioteca ajuda os desenvolvedores a localizar problemas em percursos de áudio em pilhas únicas e múltiplas. A extensão kd permite que o desenvolvedor olhe para dentro das estruturas ACX.
Para obter mais informações sobre como depurar drivers ACX e trabalhar com a extensão do depurador AcxKd.dll, consulte !acxkd.