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.
Use estas regras para verificar se o controlador utiliza as DDIs KMDF corretamente.
Nesta secção
| Tópico | Descrição |
|---|---|
A regra BufAfterReqCompletedIoctl especifica que, dentro da função de retorno de chamada EvtIoDeviceControl , o buffer de solicitação de E/S recuperado não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra BufAfterReqCompletedIntIoctl especifica que, depois que uma solicitação é concluída, seu buffer não pode ser acessado (dentro da função de retorno de chamada EvtIoInternalDeviceControl somente). O buffer é recuperado chamando WdfRequestRetrieveOutputBuffer ou WdfRequestRetrieveUnsafeUserOutputBuffer ou WdfRequestRetrieveInputBuffer ou WdfRequestRetrieveUnsafeUserInputBuffer. |
|
A regra BufAfterReqCompletedIntIoctlA verifica que, após a conclusão de uma solicitação, seu buffer não pode ser acessado (somente dentro do retorno de chamada EvtIoInternalDeviceControl ). O buffer foi recuperado chamando WdfRequestRetrieveInputBuffer ou WdfRequestRetrieveOutputBuffer ou WdfRequestRetrieveUnsafeUserInputBuffer ou WdfRequestRetrieveUnsafeUserOutputBuffer. |
|
A regra BufAfterReqCompletedIoctlA especifica que, dentro da função de retorno de chamada EvtIoDeviceControl , o buffer de solicitação de E/S recuperado não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra BufAfterReqCompletedRead especifica que, dentro da função de retorno de chamada EvtIoRead , o buffer de solicitação de E/S recuperado não pode ser acessado após a conclusão da solicitação de E/S. Existem 14 DDIs que servem como possíveis métodos de acesso a buffers. |
|
A regra BufAfterReqCompletedReadA especifica que, dentro da função de retorno de chamada EvtIoRead , o buffer de solicitação de E/S recuperado não pode ser acessado após a conclusão da solicitação de E/S. Existem 14 DDIs que servem como possíveis métodos de acesso ao buffer. |
|
A regra BufAfterReqCompletedWrite especifica que, dentro da função de retorno de chamada EvtIoWrite , o buffer de solicitação de E/S recuperado não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra BufAfterReqCompletedWriteA especifica que, dentro da função de retorno de chamada EvtIoWrite , o buffer de solicitação de E/S recuperado não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra ChildDeviceInitApi especifica que, para um dispositivo filho, os métodos de inicialização de objeto de dispositivo de estrutura devem ser chamados antes que o driver chame o método WdfDeviceCreate para o objeto de dispositivo filho. |
|
A regra ControDeviceDeleted especifica que, se um driver PnP criar um objeto de dispositivo de controle, o driver deverá excluir o objeto de dispositivo de controle em uma das funções de retorno de chamada de limpeza antes que o driver seja descarregado. |
|
A regra ControlDeviceInitAPI especifica que WdfControlDeviceInitAllocate e todos os outros DDIs de inicialização de objetos de dispositivo que configuram uma estrutura WDFDEVICE_INIT para o dispositivo de controlo devem ser chamados antes de WdfDeviceCreate ser chamado para o dispositivo de controlo. |
|
A regra CtlDeviceFinishInitDeviceAdd especifica que, se um driver criar um objeto de dispositivo de controlo numa função de retorno de chamada EvtDriverDeviceAdd, o driver deverá chamar WdfControlFinishInitializing depois que o dispositivo for criado e antes de sair da função de retorno de chamada EvtDriverDeviceAdd. Esta regra não se aplica a drivers não-PnP. |
|
A regra CtlDeviceFinishInitDrEntry especifica que, se um driver criar um objeto de dispositivo de controle em uma função de retorno de chamada DriverEntry , ele deverá chamar WdfControlFinishInitializing depois que o dispositivo tiver sido criado e antes de sair da função de retorno de chamada EvtDriverDeviceAdd . Esta regra não se aplica a controladores não-PnP. |
|
A regra DeviceCreateFail especifica que EVT_WDF_DRIVER_DEVICE_ADD retorna um status de erro quando a chamada para WdfDeviceCreate falha. |
|
A regra DeviceInitAllocate especifica que, para um dispositivo PDO ou um objeto de dispositivo de controle, os métodos de inicialização de objeto de dispositivo de estrutura WdfPdoInitAllocate ou WdfControlDeviceInitAllocate devem ser chamados antes que o driver chame WdfDeviceCreate. |
|
Para um dispositivo FDO, os métodos de inicialização do objeto de dispositivo do framework e os métodos de inicialização do FDO do framework devem ser chamados antes que o driver chame o método WdfDeviceCreate para o objeto de dispositivo. |
|
A regra DoubleDeviceInitFree especifica que os drivers não devem liberar a estrutura de inicialização do dispositivo duas vezes. |
|
A regra DriverCreate especifica que um driver que usa o KMDF (Kernel Mode Driver Framework) deve chamar o método WdfDriverCreate para criar um objeto de driver de estrutura de dentro de sua rotina DriverEntry . |
|
A regra InitFreeDeviceCallback especifica que um driver deve chamar WdfDeviceInitFree se o driver encontrar um erro ao inicializar um novo objeto de dispositivo de estrutura e se o driver recebeu a estrutura WDFDEVICE_INIT de uma chamada para WdfControlDeviceInitAllocate. |
|
A regra InitFreeDeviceCreate especifica que um driver deve chamar WdfDeviceInitFree em vez de WdfDeviceCreate se ocorrer um erro em um dos métodos de inicialização de objeto de dispositivo e se o driver recebeu a estrutura WDFDEVICE_INIT de uma chamada para WdfControlDeviceInitAllocate. |
|
A regra InitFreeDeviceCreateType2 especifica que um driver não deve chamar WdfDeviceCreate depois de chamar WdfDeviceInitFree. |
|
A regra InitFreeDeviceCreateType4 especifica que um driver deve chamar WdfDeviceInitFree se o driver encontrar um erro enquanto chama WdfDeviceCreate e se o driver recebeu a estrutura WDFDEVICE_INIT de uma chamada para WdfControlDeviceInitAllocate. |
|
A regra InitFreeNull especifica que DDIs que recebem PWDFDEVICE_INIT como um parâmetro não podem ser chamados usando um ponteiro NULL para uma estrutura WDFDEVICE_INIT . |
|
A regra MdlAfterReqCompletedIntIoctl especifica que, dentro da função de retorno de chamada EvtIoInternalDeviceControl , a lista de descritores de memória (MDL) não pode ser acessada após a conclusão da solicitação de E/S. |
|
A regra MdlAfterReqCompletedIntIoctlA especifica que, dentro da função de retorno de chamada EvtIoInternalDeviceControl , a lista de descritores de memória (MDL) não pode ser acessada após a conclusão da solicitação de E/S. |
|
A regra MdlAfterReqCompletedIoctl especifica que, dentro da função de retorno de chamada EvtIoDeviceControl , a lista de descritores de memória (MDL) não pode ser acessada após a conclusão da solicitação de E/S. |
|
A regra MdlAfterReqCompletedIoctlA especifica que, dentro da função de retorno de chamada EvtIoDeviceControl , a lista de descritores de memória (MDL) não pode ser acessada após a conclusão da solicitação de E/S. |
|
A regra MdlAfterReqCompletedRead especifica que, dentro da função de retorno de chamada EvtIoRead , o objeto MDL (lista de descritores de memória) recuperado não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MdlAfterReqCompletedReadA especifica que, dentro da função de retorno de chamada EvtIoRead , o objeto MDL (lista de descritores de memória) recuperado não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MdlAfterReqCompletedWrite especifica que, dentro da função de retorno de chamada EvtIoWrite , o objeto MDL (lista de descritores de memória) recuperado não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MdlAfterReqCompletedWriteA especifica que, dentro da função de retorno de chamada EvtIoWrite , o objeto MDL (lista de descritores de memória) recuperado não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MemAfterReqCompletedIntIoctl especifica que, dentro da função de retorno de chamada EvtIoInternalDeviceControl , o objeto de memória da estrutura não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MemAfterReqCompletedIntIoctlA especifica que, dentro da função de retorno de chamada EvtIoInternalDeviceControl , o objeto de memória da estrutura não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MemAfterReqCompletedIoctl especifica que, dentro da função de retorno de chamada EvtIoDeviceControl , o objeto de memória da estrutura não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MemAfterReqCompletedIoctlA especifica que, dentro da função de retorno de chamada EvtIoDeviceControl , o objeto de memória da estrutura não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MemAfterReqCompletedRead especifica que, dentro da função de retorno de chamada EvtIoRead , o objeto de memória da estrutura não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MemAfterReqCompletedReadA especifica que, dentro da função de retorno de chamada EvtIoRead , o objeto de memória da estrutura não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MemAfterReqCompletedWrite especifica que, dentro da função de retorno de chamada EvtIoWrite , o objeto de memória da estrutura não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra MemAfterReqCompletedWriteA especifica que, dentro da função de retorno de chamada EvtIoWrite , o objeto de memória da estrutura não pode ser acessado após a conclusão da solicitação de E/S. |
|
A regra NullCheck verifica se um valor NULL dentro do código do driver não é desreferenciado posteriormente no driver. Esta regra relata um defeito se uma destas condições for verdadeira:
** Com violações da regra NullCheck, as instruções de código mais relevantes são realçadas no painel da estrutura hierárquica de rastreamento. Para obter mais informações sobre como trabalhar com saída de relatório, consulte Relatório do verificador de driver estático e Noções básicas sobre o visualizador de rastreamento. |
|
A regra PdoDeviceInitAPI especifica que WdfPdoInitAllocate e todos os outros DDIs de inicialização de objeto de dispositivo que configuram uma estrutura WDFDEVICE_INIT para o objeto de dispositivo físico (PDO) devem ser chamados antes que o driver chame WdfDeviceCreate para o PDO. |
|
A regra PdoInitFreeDeviceCallback especifica que o driver deve chamar WdfDeviceInitFree se ocorrer um erro quando o driver chamar qualquer função de inicialização de objeto de dispositivo do framework. |
|
A regra PdoInitFreeDeviceCreate especifica que um driver deve chamar WdfDeviceInitFree em vez de WdfDeviceCreate se ocorrer um erro em uma das funções de inicialização do objeto do dispositivo e se o driver recebeu a estrutura WDFDEVICE_INIT de uma chamada para WdfPdoInitAllocate. |
|
A regra PdoInitFreeDeviceCreateType2 especifica que um driver não deve chamar WdfDeviceCreate depois de chamar WdfDeviceInitFree. |
|
A regra PdoInitFreeDeviceCreateType4 especifica que o driver deve chamar WdfDeviceInitFree se ocorrer um erro quando o driver chama WdfDeviceCreate. |
|
A regra ControlDeviceInitAllocate especifica que, para um objeto de dispositivo de controle, o driver deve chamar o método de inicialização de objeto de dispositivo de estrutura WdfControlDeviceInitAllocate antes que o driver chame WdfDeviceCreate. |
|
A regra InputBufferAPI especifica que os DDIs corretos para recuperação de buffer são usados na função de retorno de chamada EvtIoRead. Dentro da função de retorno de chamada EvtIoRead, as seguintes DDIs não podem ser chamadas para recuperação de buffer: |
Para selecionar o conjunto de regras de uso de DDI
Selecione seu projeto de driver (.vcxProj) no Microsoft Visual Studio. No menu Driver, clique em Iniciar Verificador de Driver Estático...
Clique na guia Regras . Em Conjuntos de regras, selecione DDIUsage.
Para selecionar o conjunto de regras padrão em uma janela de prompt de comando do desenvolvedor do Visual Studio, especifique DDIUsage.sdv com a opção /check . Por exemplo:
msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Para obter mais informações, consulte Usando o Verificador de Driver Estático para Localizar Defeitos em Drivers e Comandos do Verificador de Driver Estático (MSBuild).