0x10D de Verificação de Bugs: WDF_VIOLATION
O bug WDF_VIOLATION marcar tem um valor de 0x0000010D. Isso indica que Kernel-Mode KMDF (Driver Framework) detectou que o Windows encontrou um erro em um driver baseado em estrutura.
Importante
Este artigo é para programadores. Se você for um cliente que recebeu um código de erro de tela azul ao usar o computador, consulte Solucionar erros de tela azul.
Parâmetros de WDF_VIOLATION
O parâmetro 1 indica o código de erro específico do bug marcar. O parâmetro 4 é reservado.
Parâmetro 1 | Parâmetro 2 | Parâmetro 3 | Causa do erro |
---|---|---|---|
0x1 |
Ponteiro para uma estrutura de WDF_POWER_ROUTINE_TIMED_OUT_DATA |
Reservado |
Um driver baseado em estrutura atingiu o tempo limite durante uma operação de energia. Isso normalmente significa que a pilha do dispositivo não definiu o bit DO_POWER_PAGABLE e um driver tentou uma operação paginável depois que a pilha do dispositivo de paginação foi desligar. |
0x2 |
Reservado |
Reservado |
Uma tentativa está sendo feita para adquirir um bloqueio que está sendo mantido no momento. |
0x3 |
Identificador WDFREQUEST |
O número de referências pendentes que permanecem em ambos os buffers |
O Verificador do Windows Driver Framework encontrou um erro fatal. Em particular, uma solicitação de E/S foi concluída, mas um objeto de solicitação de estrutura não pode ser excluído porque há referências pendentes para o buffer de entrada, o buffer de saída ou ambos. |
0x4 |
Reservado |
O endereço do chamador |
Um parâmetro NULL foi passado para uma função que exigia um valor não NULL . |
0x5 |
O valor do identificador passado |
Reservado |
Um identificador de objeto de estrutura do tipo incorreto foi passado para um método de objeto de estrutura. |
0x6 |
Consulte a tabela abaixo. |
||
0x7 |
O identificador do objeto framework |
Reservado |
Um driver tentou excluir um objeto de estrutura incorretamente chamando WdfObjectDereference para excluir um identificador em vez de chamar WdfObjectDelete. |
0x8 |
O identificador do objeto de transação DMA |
Reservado |
Ocorreu uma operação em um objeto de transação DMA enquanto ele não estava no estado correto. |
0x9 |
Atualmente não utilizado. |
||
0xA |
Um ponteiro para uma estrutura de WDF_QUEUE_FATAL_ERROR_DATA |
Reservado |
Ocorreu um erro fatal ao processar uma solicitação que está atualmente na fila. |
0xB |
Consulte a tabela abaixo. |
||
0xC |
Identificador WDFDEVICE |
Ponteiro para o novo PnP IRP |
Um novo PnP IRP de alteração de estado chegou enquanto o driver estava processando outro PnP IRP de alteração de estado. |
0xD |
Identificador WDFDEVICE |
Ponteiro para ligar o IRP |
O proprietário da política de energia de um dispositivo recebeu um IRP de energia que não solicitou. Pode haver vários proprietários de política de energia, mas apenas um é permitido. Um driver KMDF pode alterar a propriedade da política de energia chamando WdfDeviceInitSetPowerPolicyOwnership. |
0xE |
IRQL no qual a função de retorno de chamada de evento foi chamada. |
IRQL no qual a função de retorno de chamada de evento retornou. |
Uma função de retorno de chamada de evento não retornou no mesmo IRQL em que foi chamada. A função de retorno de chamada alterou o IRQL direta ou indiretamente (por exemplo, adquirindo um spinlock, o que eleva IRQL para DISPATCH_LEVEL, mas não liberando o spinlock). |
0xF |
Endereço de uma função de retorno de chamada de evento. |
Reservado |
Uma função de retorno de chamada de evento entrou em uma região crítica, mas não deixou a região crítica antes de retornar. |
O parâmetro 1 é igual a 0x6
Se o Parâmetro 1 for igual a 0x6, um erro fatal foi cometido no tratamento de uma solicitação do WDF. Nesse caso, o Parâmetro 2 especifica ainda mais o tipo de erro fatal que foi feito, conforme definido pela enumeração WDF_REQUEST_FATAL_ERROR.
Parâmetro 2 | Parâmetro 3 | Causa do erro |
---|---|---|
0x1 |
O endereço do IRP |
Não há mais locais de pilha de E/S disponíveis para formatar o IRP subjacente. |
0x2 |
O valor do identificador de solicitação do WDF |
Foi feita uma tentativa de formatar um objeto de solicitação de estrutura que não continha um IRP. |
0x3 |
O valor do identificador de solicitação do WDF |
O driver tentou enviar uma solicitação de estrutura que já foi enviada para um destino de E/S. |
0x4 |
Um ponteiro para uma estrutura WDR_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA que contém um ponteiro para o IRP, um valor de identificador de solicitação WDF, uma função principal irp e o número de bytes que tentaram ser gravados |
O driver concluiu uma solicitação de estrutura, mas gravou mais bytes no buffer de saída do que os especificados no IRP. |
O parâmetro 1 é igual a 0xB
Se o Parâmetro 1 for igual a 0xB, uma tentativa de adquirir ou liberar um bloqueio era inválida. Nesse caso, o Parâmetro 3 especifica ainda mais o erro que foi feito.
Parâmetro 2 | Parâmetro 3 | Causa do erro |
---|---|---|
O valor do identificador |
0x0 |
Um identificador passado para WdfObjectAcquireLock ou WdfObjectReleaseLock representa um objeto que não dá suporte a bloqueios de sincronização. |
Um identificador de bloqueio de rotação do WDF |
0x1 |
O bloqueio de rotação está sendo liberado por um thread que não o adquiriu. |
Causa
Consulte a descrição de cada código na seção Parâmetros para obter uma explicação da causa.
Resolução
A extensão de depuração !analyze exibe informações sobre o bug marcar e pode ser útil na coleta de informações, como o módulo de código com falha.
Normalmente, o arquivo de despejo do WDF produzirá mais informações sobre o driver que causou esse bug marcar. Use este comando para examinar o arquivo de log.
kd> !wdfkd.wdflogdump <WDF_Driver_Name>
Se o Parâmetro 1 for igual a 0x2, examine a pilha do chamador para determinar o bloqueio em questão.
Se o Parâmetro 1 for igual a 0x3, o log de erros do driver Kernel-Mode Driver Framework incluirá detalhes sobre as referências pendentes.
Se o Parâmetro 1 for igual a 0x4, use o comando ln debugger com o valor do Parâmetro 3 como seu argumento para determinar qual função requer um parâmetro não NULL .
Se o Parâmetro 1 for igual a 0x7, use o comando de extensão !wdfkd.wdfhandleParameter 2 para determinar o tipo de identificador.
Se o Parâmetro 1 for igual a 0xA, a estrutura WDF_QUEUE_FATAL_ERROR_DATA indicará a solicitação problemática ou o identificador da fila. Ele também indicará o NTSTATUS, se não STATUS_SUCCESS, quando disponível.