Поделиться через


Набор правил LocalIrpProcessing (WDM)

Используйте эти правила, чтобы убедиться, что драйвер правильно обрабатывает пакеты запросов ввода-вывода (IRP), созданные драйвером.

В этом разделе

Раздел Описание

IoAllocateComplete

Правило IoAllocateComplete указывает, что драйвер не должен вызывать IoCompleteRequest , если IRP был создан с помощью IoAllocateIrp.

IoAllocateFree

Правило IoAllocateFree указывает, что драйвер должен использовать IoFreeIrp только для IRP, которые ранее были выделены с Помощью IoAllocateIrp.

IoAllocateForward

Правило IoAllocateForward указывает, что если IRP создается вызовом IoAllocateIrp, драйвер должен задать подпрограмму завершения перед вызовом IoCallDriver или PoCallDriver.

IoAllocateIrpSignalEventInCompletion

Правило IoAllocateIrpSignalEventInCompletion указывает, что драйвер должен вызывать KeSetEvent в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP.

IoAllocateIrpSignalEventInCompletion2

Правило IoAllocateIrpSignalEventInCompletion2 указывает, что keSetEvent необходимо вызывать в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP.

IoAllocateIrpSignalEventInCompletion3

Правило IoAllocateIrpSignalEventInCompletion3 указывает, что KeSetEvent необходимо вызывать в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP.

IoAllocateIrpSignalEventInCompletionTimeout

Правило IoAllocateIrpSignalEventInCompletionTimeout сообщает о дефекте, если обнаруживает, что этот драйвер будет ожидать неограниченное время, пока не вернется нижний драйвер, так как событие IRP должно быть указано в процедуре завершения.

IoBuildDeviceControlNoFree

Правило IoBuildDeviceControlNoFree указывает, что драйвер, вызывающий IoBuildDeviceIoControlRequest , не должен вызывать IoFreeIrp.

IoBuildDeviceControlWait

Правило IoBuildDeviceControlWait указывает, что подпрограмма KeWaitForSingleObject должна вызываться, если IoCallDriver или PoCallDriver возвращают STATUS_PENDING.

IoBuildDeviceControlWaitTimeout

Правило IoBuildDeviceControlWaitTimeout сообщает о дефекте, если обнаруживает, что этот драйвер будет ждать неограниченное время, пока не вернется нижний драйвер, так как событие IRP должно быть указано в процедуре завершения.

IoBuildDeviceIoControlSetEvent

Правило IoBuildDeviceIoControlSetEvent указывает, что драйвер, вызывающий IoBuildDeviceIoControlRequest , не должен вызывать KeSetEvent , если драйвер предоставляет указатель на объект события, выделенный вызывающим и инициализированный. Драйвер не должен вызывать KeSetEvent для этого IRP.

IoBuildFsdComplete

Правило IoBuildFsdComplete указывает, что драйвер не должен вызывать IoCompleteRequest , если IRP был создан с помощью IoBuildAsynchronousFsdRequest.

IoBuildFsdForward

Правило IoBuildFsdForward указывает, что подпрограмма завершения должна быть задана до того, как драйвер вызывает IoCallDriver или PoCallDriver , если IRP создается вызовом IoBuildAsynchronousFsdRequest.

IoBuildFsdFree

Правило IoBuildFsdFree указывает, что драйвер должен использовать IoFreeIrp только в средах IRP, которые он ранее выделил с IoBuildAsynchronousFsdRequest.

IoBuildFsdIrpSignalEventInCompletion

Правило IoBuildFsdIrpSignalEventInCompletion указывает, что драйвер должен вызывать KeSetEvent в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP.

IoBuildFsdIrpSignalEventInCompletion2

Правило IoBuildFsdIrpSignalEventInCompletion2 указывает, что keSetEvent необходимо вызывать в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP.

IoBuildFsdIrpSignalEventInCompletion3

Правило IoBuildFsdIrpSignalEventInCompletion3 указывает, что KeSetEvent необходимо вызывать в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP.

IoBuildFsdIrpSignalEventInCompletionTimeout

Правило IoBuildFsdIrpSignalEventInCompletionTimeout сообщает о дефекте, когда драйвер ожидает неограниченное время, пока не вернется нижний драйвер, так как событие IRP должно быть указано в процедуре завершения.

IoBuildSynchronousFsdRequestNoFree

Правило IoBuildSynchronousFsdRequestNoFree указывает, что драйвер, вызывающий IoBuildSynchronousFsdRequest , не должен вызывать IoFreeIrp.

IoBuildSynchronousFsdRequestWait

Правило IoBuildSynchronousFsdRequestWait указывает, что необходимо вызвать KeWaitForSingleObject в случае, если IoCallDriver или PoCallDriver возвращают STATUS_PENDING.

IoBuildSynchronousFsdRequestWaitTimeout

Правило IoBuildSynchronousFsdRequestWaitTimeout сообщает о дефекте, если обнаруживает, что этот драйвер будет ожидать неограниченное время, пока не вернется нижний драйвер, так как событие IRP должно быть указано в процедуре завершения.

RequestedPowerIrp

Правило RequestedPowerIrp указывает, что драйвер вызывает PoRequestPowerIrp с переменной *Irp указателя, которая имеет значение NULL.

Выбор набора правил LocalIrpProcessing

  1. Выберите проект драйвера (VCXProj) в Microsoft Visual Studio. В меню Драйвер выберите Запуск средства проверки статических драйверов....

  2. Перейдите на вкладку Правила . В разделе Наборы правил выберите LocalIrpProcessing.

    Чтобы выбрать набор правил по умолчанию в окне командной строки разработчика Visual Studio, укажите LocalIrpProcessing.sdv с параметром /проверка. Пример:

    msbuild /t:sdv /p:Inputs="/check:LocalIrpProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    Дополнительные сведения см. в разделах Использование статического средства проверки драйверов для поиска дефектов в драйверах и Команд средства проверки статических драйверов (MSBuild).