Partilhar via


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

ChangeQueueState

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.

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. 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.

DoubleCompletion

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.

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 métodos a seguir 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 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.

EvtSurpriseRemoveNoSuspendQueue

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.

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 internas do IOCTL não são passadas para DDIs (interfaces de driver de dispositivo) de envio de solicitação kmdf inadequadas.

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 marcar para conclusão dupla ou regras que marcar para 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 marcar para conclusão dupla ou regras que marcar para 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 uma solicitação KMDF inadequada ou enviar DDIs (interfaces de driver de dispositivo).

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 o WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously ou WdfIoQueuePurgeSynchronously funciona das seguintes funções de retorno de chamada de evento de objeto de fila EvtIO:

OutputBufferAPI

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:

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 para um destino de E/S.

ReqDelete

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.

ReqIsCancOnCancReq

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.

ReqMarkCancelableSend

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

RequestCompleted

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.

RequestFormattedValid

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.

RequestGetStatusValid

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

  • Quando WdfRequestSend retorna falha.
  • Quando a solicitação tiver sido enviada 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 /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).