Conjunto de regras de aviso (KMDF)
Use essas regras para verificar se o driver pode processar corretamente os IRPs em vários contextos e segue as melhores práticas recomendadas da Microsoft.
Nesta seção
Tópico | Descrição |
---|---|
A regra DeferredRequestCompleted especifica que, se uma solicitação de E/S apresentada à fila de E/S padrão de um driver não for concluída na função de retorno de chamada, mas for adiada para processamento posterior, a solicitação deverá ser concluída em uma função de retorno de chamada de processamento adiada, a menos que a solicitação seja encaminhada e entregue à estrutura, ou a menos que o método WdfRequestStopAcknowledge seja chamado. |
|
A regra DriverAttributeChanged especifica que um driver não deve alterar o nível de execução ou o escopo de sincronização de um driver KMDF. |
|
A regra DrvAckIoStop verifica se o driver está ciente das solicitações pendentes enquanto sua fila gerenciada por energia está sendo alimentada e o driver reconhece, conclui ou cancela as solicitações pendentes adequadamente. No caso de solicitações de E/S autogerenciadas, o driver também deve lidar corretamente com essas solicitações de sua função EvtDeviceSelfManagedIoSuspend . Um driver que não consegue lidar com essas solicitações durante uma desligar causaria 0x9F de Verificação de Bugs: DRIVER_POWER_STATE_FAILURE. |
|
A regra EvtIoResumeGetParam especifica que WdfRequestGetParameters não é chamado dentro da função de retorno de chamada EvtIoResumeGetParam . |
|
A regra EvtIoStopGetParam verifica se WdfRequestGetParameters não é chamado no retorno de chamada EvtIoStop . |
|
A regra EvtIoStopResume especifica que, se um driver registrar uma função de retorno de chamada EvtIoStop e chamar WdfRequestStopAcknowledge com o parâmetro Requeue igual a FALSE, o driver deverá registrar uma função de retorno de chamada EvtIoResume . A estrutura fornece solicitações para a função de retorno de chamada EvtIoResume quando o dispositivo entra no estado D0 novamente. |
|
A regra EvtSurpriseRemoveNoRequestComplete especifica que os drivers WDF não devem concluir solicitações do retorno de chamada EvtDeviceSurpriseRemoval , em vez disso, as funções de retorno de chamada de E/S autogerenciadas devem ser usadas. O retorno de chamada EvtDeviceSurpriseRemoval não é sincronizado com o caminho de desligar. |
|
A regra FDOPowerPolicyOwnerAPI especifica que, se um driver FDO abrir mão da propriedade da política de energia, os métodos WdfDeviceInitSetPowerPolicyEventCallbacks, WdfDeviceAssignS0IdleSettings e WdfDeviceAssignSxWakeSettings só poderão ser chamados nos caminhos de execução em que o driver é proprietário de uma política de energia. O SDV emite um aviso para essa regra. |
|
A regra NoCancelFromEvtSurpriseRemove especifica que os drivers WDF não devem cancelar solicitações da função de retorno de chamada EvtDeviceSurpriseRemoval , em vez disso, as funções de retorno de chamada de E/S autogerenciadas devem ser usadas. A função de retorno de chamada EvtDeviceSurpriseRemoval não é sincronizada com o caminho de desligar. |
|
A regra PagedCodeAtD0 especifica que um driver não deve marcar o código como paginável dentro de funções de retorno de chamada que estão no caminho do código de energia. |
|
A regra ParentObjectCheck especifica que o driver deve chamar WdfMemoryCreate especificando um objeto pai usando uma estrutura WDF_OBJECT_ATTRIBUTES . Se o driver não definir um objeto pai para o objeto de memória da estrutura, a estrutura definirá o driver como o pai padrão, de modo que, a menos que o driver exclua explicitamente o objeto de memória da estrutura, ele permanecerá na memória até que o objeto de driver seja descarregado. |
|
A regra ReqNotCanceledLocal especifica que, se uma solicitação marcada como cancelável for concluída em uma função de retorno de chamada de fila de E/S padrão, o método WdfRequestUnmarkCancelable deverá ser chamado na solicitação de E/S antes da conclusão. A solicitação de E/S deve ser concluída, a menos que a solicitação seja cancelada antes de chamar WdfRequestUnmarkCancelable. |
|
A regra ReqSendFail especifica que um driver deve definir o status de conclusão correto nos casos em que o método WdfRequestSend pode falhar. |
|
A regra RequestCompletedLocal especifica que, se uma solicitação de E/S não for concluída em nenhum dos EvtIoDefault, Funções de retorno de chamada EvtIoRead, EvtIoWrite, EvtIoDeviceControl e EvtIoInternalDeviceControl e, se WdfRequestMarkCancelable não foi chamado na solicitação dentro da função de retorno de chamada, pode haver um problema com a conclusão da solicitação no código do driver. |
|
Se o driver cliente chamar WdfUsbTargetDeviceCreateWithParameters e especificar a versão do contrato do cliente USBD_CLIENT_CONTRACT_VERSION_602 na estrutura WDF_USB_DEVICE_CREATE_CONFIG (para usar os novos recursos da pilha de drivers USB para Windows 8), os DDIs que usam um URB internamente só usarão o contexto URB se qualquer uma das seguintes pré-condições se aplicar: |
|
A regra SyncReqSend especifica que todas as solicitações de envio síncronas são feitas usando métodos de interface de driver de dispositivo KMDF específicos de síncrono e que os métodos têm um valor de tempo limite diferente de zero definido. |
|
A regra SyncReqSend2 especifica que os envios de solicitação síncrona têm um valor de tempo limite diferente de zero definido. |
Para selecionar o conjunto de regras de aviso
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 Aviso.
Para selecionar o conjunto de regras padrão em uma janela do prompt de comando do desenvolvedor do Visual Studio, especifique Warning.sdv com a opção /marcar. Por exemplo:
msbuild /t:sdv /p:Inputs="/check:Warning.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Para obter mais informações, consulte Using Static Driver Verifier to Find Defects in Drivers and Static Driver Verifier commands (MSBuild).