Partilhar via


Conjunto de regras RequestProcessing (KMDF)

Use estas regras para verificar se o driver completa ou cancela corretamente os pacotes de solicitação de E/S (IRP).

Nesta secção

Tópico Descrição

ChangeQueueState

A regra ChangeQueueState especifica que o driver WDF não tenta alterar o estado da Fila a partir de threads concorrentes ou não chama DDIs de alteração de estado uma após a outra dentro do mesmo thread. As funções de retorno de chamada que alteram o 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 da fila já estiver em andamento, isso fará com que um computador falhe ou pare de responder.

CompleteCanceledReq

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. Enquanto o driver desmarca uma solicitação que foi marcada anteriormente como cancelável, deve verificar se a solicitação não já foi cancelada. Se o driver não fizer essa verificação, o driver pode concluir uma solicitação que foi liberada.

DoubleCompletion

A regra DoubleCompletion especifica que os drivers não devem concluir uma solicitação de E/S duas vezes. Os seguintes métodos não devem ser chamados duas vezes seguidas para a mesma solicitação: WdfRequestComplete,WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost.

DoubleCompletionLocal

A regra DoubleCompletionLocal especifica que os drivers não devem concluir uma solicitação de E/S duas vezes.

EvtIoStopCancel

A regra EvtIoStopCancel especifica que, dentro da função de retorno de chamada EvtIoStop , o driver chama um dos seguintes métodos para solicitações de E/S que não podem ser canceladas.

EvtIoStopCompleteOrStopAck

A regra EvtIoStopCompleteOrStopAck especifica que, dentro da função de retorno de chamada EvtIoStop , o driver chama um dos seguintes métodos para cada solicitação de E/S apresentada pela estrutura. Se isso não for feito, o driver pode bloquear o sistema de entrar em outro estado de energia inferior.

EvtSurpriseRemoveNoSuspendQueue

A regra EvtSurpriseRemoveNoSuspendQueue especifica que os drivers WDF não devem drenar, parar ou limpar a fila da função de retorno de chamada EvtDeviceSurpriseRemoval e, em vez disso, devem ser usadas funções de retorno de chamada de E/S autogeridas. A função de retorno de chamada EvtDeviceSurpriseRemoval não está sincronizada com o processo de desligamento.

FileObjectConfigured

A regra FileObjectConfigured especifica que uma chamada para o método WdfRequestGetFileObject é precedida por uma chamada para WdfDeviceInitSetFileObjectConfig.

InternalIoctlReqs

A regra InternalIoctlReqs especifica que as solicitações IOCTL internas não são passadas para interfaces de driver de dispositivo do KMDF inadequadas para envio de solicitações (DDIs).

InvalidReqAccess

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 verificam se há dupla conclusão ou regras que verificam se solicitações foram marcadas como canceláveis duas vezes.

InvalidReqAccessLocal

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 verificam se há dupla conclusão ou regras que verificam se solicitações foram marcadas como canceláveis duas vezes.

IoctlReqs

A regra IoctlReqs especifica que as solicitações IOCTL não devem ser passadas para solicitações KMDF inadequadas ou enviar interfaces de driver de dispositivo (DDIs).

MarkCancOnCancReqLocal

A regra MarkCancOnCancReqLocal especifica que o método WdfRequestMarkCancelable não pode ser chamado duas vezes consecutivas na mesma solicitação de E/S.

NoIoQueuePurgeSynchronously

A regra NoIoQueuePurgeSynchronously verifica se os drivers WDF não chamam as funções de retorno de chamada de evento de objeto de fila WdfIoQueueStopSynchronously, WdfIoQueueStopAndPurgeSynchronously ou WdfIoQueuePurgeSynchronously das seguintes funções de retorno de chamada de evento de objeto de fila EvtIO:

OutputBufferAPI

A regra OutputBufferAPI especifica que as DDIs corretas para recuperação de buffer são usadas na função de retorno de chamada EvtIoWrite . Dentro da função de retorno de chamada EvtIoWrite , as seguintes DDIs não podem ser chamadas para recuperação de buffer:

ReadReqs

A regra ReadReqs especifica que as solicitações de leitura não são passadas para métodos KMDF inadequados.

ReqCompletionRoutine

A regra ReqCompletionRoutine especifica que uma rotina de conclusão deve ser definida antes que uma solicitação seja enviada a um destino de E/S.

ReqDelete

A regra ReqDelete especifica que as solicitações criadas pelo driver não são passadas para as funções WdfRequestCompleteXxx . Em vez disso, a solicitação deve ser excluída após a conclusão.

ReqIsCancOnCancReq

A regra ReqIsCancOnCancReq especifica que o método WdfRequestIsCanceled só pode ser chamado em uma solicitação que não esteja marcada como cancelável.

ReqMarkCancelableSend

A regra ReqMarkCancelableSend especifica que as solicitações encaminhadas pelo driver não são marcadas como canceláveis chamando WdfRequestMarkCancelable.

PedidoConcluído

A regra DeferredRequestCompleted especifica que, para um driver não-filtrante, 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.

RequestFormattedValid

A regra RequestFormattedValid especifica que o driver formata todas as solicitações, exceto uma solicitação WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET, antes de enviá-las para um destino de E/S.

RequestGetStatusValid

A regra RequestGetStatusValid que especifica que WdfRequestGetStatus deve ser chamado para uma solicitação em uma das seguintes situações:

  • Quando WdfRequestSend retorna a falha.
  • Quando o pedido tiver sido enviado com WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.

RequestSendAndForgetNoFormatting

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.

RequestSendAndForgetNoFormatting2

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.

StopAckWithinEvtIoStop

A regra StopAckWithinEvtIoStop especifica que a função WdfRequestStopAcknowledge só é chamada de dentro da função de retorno de chamada EvtIoStop .

WdfIoQueueFindRequestFailed

A regra WdfIoQueueFindRequestFailed especifica que WdfIoQueueRetrieveFoundRequest ou WdfObjectDereference só deve ser chamado depois que WdfIoQueueFindRequestFailed retornar STATUS_SUCCESS.

WdfIoQueueRetrieveFoundRequest

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.

WdfIoQueueRetrieveNextRequest

A regra WdfIoQueueRetrieveNextRequest especifica que WdfIoQueueRetrieveNextRequest não é chamado depois que WdfIoQueueFindRequest é chamado.

WriteReqs

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

  1. Selecione seu projeto de driver (.vcxProj) no Microsoft Visual Studio. No menu Driver, clique em Iniciar Verificador de Driver Estático...

  2. 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 /check . 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).