Compartilhar via


Conjunto de regras LocalIrpProcessing (WDM)

Use essas regras para verificar se o driver manipula corretamente os IRP (pacotes de solicitação de E/S) criados pelo driver.

Nesta seção

Tópico Descrição

IoAllocateComplete

A regra IoAllocateComplete especifica que um driver não deve chamar IoCompleteRequest se o IRP foi criado com IoAllocateIrp.

IoAllocateFree

A regra IoAllocateFree especifica que um driver deve usar IoFreeIrp somente em IRPs alocados anteriormente com IoAllocateIrp.

IoAllocateForward

A regra IoAllocateForward especifica que, se um IRP for gerado por uma chamada para IoAllocateIrp, o driver deverá definir uma rotina de conclusão antes de chamar IoCallDriver ou PoCallDriver.

IoAllocateIrpSignalEventInCompletion

A regra IoAllocateIrpSignalEventInCompletion especifica que o driver deve chamar KeSetEvent na rotina de conclusão quando o sinalizador Irp-PendingReturned> for definido e a rotina de conclusão estiver processando um IRP assíncrono criado localmente.

IoAllocateIrpSignalEventInCompletion2

A regra IoAllocateIrpSignalEventInCompletion2 especifica que KeSetEvent precisa ser chamado na rotina de conclusão quando o sinalizador Irp-PendingReturned> é definido e a rotina de conclusão está processando um IRP assíncrono criado localmente.

IoAllocateIrpSignalEventInCompletion3

A regra IoAllocateIrpSignalEventInCompletion3 especifica que KeSetEvent precisa ser chamado na rotina de conclusão quando o sinalizador Irp-PendingReturned> é definido e a rotina de conclusão está processando um IRP assíncrono criado localmente.

IoAllocateIrpSignalEventInCompletionTimeout

A regra IoAllocateIrpSignalEventInCompletionTimeout relatará um defeito se detectar que esse driver aguardará indefinidamente até que o driver inferior retorne, pois o evento do IRP precisa ser sinalizado na rotina de conclusão.

IoBuildDeviceControlNoFree

A regra IoBuildDeviceControlNoFree especifica que um driver que chama IoBuildDeviceIoControlRequest não deve chamar IoFreeIrp.

IoBuildDeviceControlWait

A regra IoBuildDeviceControlWait especifica que a rotina KeWaitForSingleObject deve ser chamada se IoCallDriver ou PoCallDriver retornar STATUS_PENDING.

IoBuildDeviceControlWaitTimeout

A regra IoBuildDeviceControlWaitTimeout relatará um defeito se detectar que esse driver aguardará indefinidamente até que o driver inferior retorne, pois o evento do IRP é necessário para ser sinalizado na rotina de conclusão.

IoBuildDeviceIoControlSetEvent

A regra IoBuildDeviceIoControlSetEvent especifica que um driver que chama IoBuildDeviceIoControlRequest não deve chamar KeSetEvent se o driver fornecer um ponteiro para um objeto de evento alocado pelo chamador e inicializado. O KeSetEvent não precisa ser chamado pelo driver para esse IRP.

IoBuildFsdComplete

A regra IoBuildFsdComplete especifica que um driver não deve chamar IoCompleteRequest se o IRP foi criado com IoBuildAsynchronousFsdRequest.

IoBuildFsdForward

A regra IoBuildFsdForward especifica que uma rotina de conclusão deve ser definida antes que um driver chame IoCallDriver ou PoCallDriver se o IRP for gerado por uma chamada para IoBuildAsynchronousFsdRequest.

IoBuildFsdFree

A regra IoBuildFsdFree especifica que um driver deve usar IoFreeIrp somente em IRPs alocados anteriormente com IoBuildAsynchronousFsdRequest.

IoBuildFsdIrpSignalEventInCompletion

A regra IoBuildFsdIrpSignalEventInCompletion especifica que o driver deve chamar KeSetEvent na rotina de conclusão quando o sinalizador Irp-PendingReturned> estiver definido e a rotina de conclusão estiver processando um IRP assíncrono criado localmente.

IoBuildFsdIrpSignalEventInCompletion2

A regra IoBuildFsdIrpSignalEventInCompletion2 especifica que KeSetEvent precisa ser chamado na rotina de conclusão quando o sinalizador Irp-PendingReturned> é definido e a rotina de conclusão está processando um IRP assíncrono criado localmente.

IoBuildFsdIrpSignalEventInCompletion3

A regra IoBuildFsdIrpSignalEventInCompletion3 especifica que KeSetEvent precisa ser chamado na rotina de conclusão quando o sinalizador Irp-PendingReturned> é definido e a rotina de conclusão está processando um IRP assíncrono criado localmente.

IoBuildFsdIrpSignalEventInCompletionTimeout

A regra IoBuildFsdIrpSignalEventInCompletionTimeout relata um defeito quando o driver aguarda indefinidamente até que o driver inferior retorne, pois o evento do IRP é necessário para ser sinalizado na rotina de conclusão.

IoBuildSynchronousFsdRequestNoFree

A regra IoBuildSynchronousFsdRequestNoFree especifica que um driver que chama IoBuildSynchronousFsdRequest não deve chamar IoFreeIrp.

IoBuildSynchronousFsdRequestWait

A regra IoBuildSynchronousFsdRequestWait especifica que KeWaitForSingleObject deve ser chamado caso IoCallDriver ou PoCallDriver retorne STATUS_PENDING.

IoBuildSynchronousFsdRequestWaitTimeout

A regra IoBuildSynchronousFsdRequestWaitTimeout relatará um defeito se detectar que esse driver aguardará indefinidamente até que o driver inferior retorne, pois o evento do IRP precisa ser sinalizado na rotina de conclusão.

RequestedPowerIrp

A regra RequestedPowerIrp especifica que o driver chama PoRequestPowerIrp com a variável de *Irp ponteiro definida como NULL.

Para selecionar o conjunto de regras LocalIrpProcessing

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

    Para selecionar o conjunto de regras padrão em uma janela do prompt de comando do desenvolvedor do Visual Studio, especifique LocalIrpProcessing.sdv com a opção /marcar. Por exemplo:

    msbuild /t:sdv /p:Inputs="/check:LocalIrpProcessing.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).