Conjunto de regras de RequestProcessing (KMDF)
Use essas regras para verificar se o driver conclui ou cancela corretamente os pacotes de solicitação de E/S (IRP).
Nesta seção
Tópico | Descrição |
---|---|
A regra ChangeQueueState especifica que o driver WDF não tenta alterar o estado da Fila de threads simultâneos ou não chama o estado de alteração de DDIs um após o outro de dentro do mesmo thread. As funções de retorno de chamada de alteração de estado da fila são WdfIoQueueStop, WdfIoQueueStopSynchronously,WdfIoQueuePurge,WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurge e WdfIoQueueStopAndPurgeSynchronously. Se esses DDIs forem chamados quando uma alteração de estado de fila já estiver em andamento, isso fará com que um computador falhe ou não responda. |
|
A regra CompleteCanceledReq especifica que, se a solicitação já tiver sido cancelada, a solicitação não será mais válida e o driver não deverá concluí-la. Embora o driver desmarca uma solicitação que foi marcada anteriormente como cancelável, ele deve marcar que a solicitação ainda não foi cancelada. Se o driver não fizer esse marcar, o driver poderá concluir uma solicitação que foi liberada. |
|
A regra DoubleCompletion especifica que os drivers não devem concluir uma solicitação de E/S duas vezes. Os métodos a seguir não devem ser chamados duas vezes seguidas para a mesma solicitação: WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost. |
|
A regra DoubleCompletionLocal especifica que os drivers não devem concluir uma solicitação de E/S duas vezes. |
|
A regra EvtIoStopCancel especifica que, dentro da função de retorno de chamada EvtIoStop , o driver chama um dos métodos a seguir para solicitações de E/S que não podem ser canceladas. |
|
A regra EvtIoStopCompleteOrStopAck especifica que, dentro da função de retorno de chamada EvtIoStop , o driver chama um dos métodos a seguir para cada solicitação de E/S apresentada pela estrutura. Se isso não for feito, o driver poderá impedir que o sistema insira outro estado de energia inferior. |
|
A regra EvtSurpriseRemoveNoSuspendQueue especifica que os Drivers do WDF não devem esvaziar, parar ou limpar a fila 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 FileObjectConfigured especifica que uma chamada para o método WdfRequestGetFileObject é precedida por uma chamada para WdfDeviceInitSetFileObjectConfig. |
|
A regra InternalIoctlReqs especifica que as solicitações internas do IOCTL não são passadas para DDIs (interfaces de driver de dispositivo) de envio de solicitação kmdf inadequadas. |
|
A regra InvalidReqAccess especifica que as solicitações não são acessadas depois de concluídas ou canceladas. Essa regra pode se sobrepor a outras regras, como regras que marcar para conclusão dupla ou regras que marcar para solicitações foram marcadas como canceláveis duas vezes. |
|
A regra InvalidReqAccessLocal especifica que as solicitações criadas localmente não são acessadas depois de concluídas ou canceladas. Essa regra pode se sobrepor a outras regras, como regras que marcar para conclusão dupla ou regras que marcar para solicitações foram marcadas como canceláveis duas vezes. |
|
A regra IoctlReqs especifica que as solicitações IOCTL não devem ser passadas para uma solicitação KMDF inadequada ou enviar DDIs (interfaces de driver de dispositivo). |
|
A regra MarkCancOnCancReqLocal especifica que o método WdfRequestMarkCancelable não pode ser chamado duas vezes consecutivas na mesma solicitação de E/S. |
|
A regra NoIoQueuePurgeSynchronously verifica se os drivers WDF não chamam o WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously ou WdfIoQueuePurgeSynchronously funciona das seguintes funções de retorno de chamada de evento de objeto de fila EvtIO: |
|
A regra OutputBufferAPI especifica que os DDIs corretos para recuperação de buffer são usados na função de retorno de chamada EvtIoWrite . Na função de retorno de chamada EvtIoWrite , os seguintes DDIs não podem ser chamados para recuperação de buffer: |
|
A regra ReadReqs especifica que as solicitações de leitura não são passadas para métodos KMDF inadequados. |
|
A regra ReqCompletionRoutine especifica que uma rotina de conclusão deve ser definida antes que uma solicitação seja enviada para um destino de E/S. |
|
A regra ReqDelete especifica que as solicitações criadas pelo driver não são passadas para funções WdfRequestCompleteXxx . Em vez disso, a solicitação deve ser excluída após a conclusão. |
|
A regra ReqIsCancOnCancReq especifica que o método WdfRequestIsCanceled só pode ser chamado em uma solicitação que não está marcada como cancelável. |
|
A regra ReqMarkCancelableSend especifica que as solicitações encaminhadas pelo driver não são marcadas como canceláveis chamando WdfRequestMarkCancelable. |
|
A regra DeferredRequestCompleted especifica que, para um driver sem filtro, cada solicitação apresentada à fila de E/S padrão do driver deve ser concluída, a menos que a solicitação seja adiada ou encaminhada ou se WdfRequestStopAcknowledge for chamado. |
|
A regra RequestFormattedValid especifica que o driver formata todas as solicitações, exceto para uma solicitação WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET, antes de enviar para um destino de E/S. |
|
A regra RequestGetStatusValid que especifica que WdfRequestGetStatus deve ser chamado para uma solicitação em uma das seguintes situações:
|
|
A regra RequestSendAndForgetNoFormatting verifica se o driver não formata uma solicitação usando as funções de formatação de destino de E/S antes de enviá-la para um destino de E/S com a opção de envio WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
A regra RequestSendAndForgetNoFormatting2 verifica se o driver não formata uma solicitação usando as funções de formatação de destino de E/S antes de enviá-la para um destino de E/S com a opção de envio WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
A regra StopAckWithinEvtIoStop especifica que a função WdfRequestStopAcknowledge só é chamada de dentro da função de retorno de chamada EvtIoStop . |
|
A regra WdfIoQueueFindRequestFailed especifica que WdfIoQueueRetrieveFoundRequest ou WdfObjectDereference só deve ser chamado depois que WdfIoQueueFindRequestFailed retornar STATUS_SUCCESS. |
|
A regra WdfIoQueueRetrieveFoundRequest especifica que o método WdfIoQueueRetrieveFoundRequest é chamado somente depois que WdfIoQueueFindRequest é chamado e retornado STATUS_SUCCESS e nenhum WdfObjectDereference é chamado na mesma solicitação. |
|
A regra WdfIoQueueRetrieveNextRequest especifica que WdfIoQueueRetrieveNextRequest não é chamado depois que WdfIoQueueFindRequest é chamado. |
|
A regra WriteReqs especifica que uma solicitação de gravação não é passada para métodos KMDF inadequados. |
Para selecionar o conjunto de regras RequestProcessing
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 RequestProcessing.
Para selecionar o conjunto de regras padrão em uma janela do prompt de comando do desenvolvedor do Visual Studio, especifique RequestProcessing.sdv com a opção /marcar. Por exemplo:
msbuild /t:sdv /p:Inputs="/check:RequestProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Para 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).