Набор правил LocalIrpProcessing (WDM)
Используйте эти правила, чтобы убедиться, что драйвер правильно обрабатывает пакеты запросов ввода-вывода (IRP), созданные драйвером.
В этом разделе
Раздел | Описание |
---|---|
Правило IoAllocateComplete указывает, что драйвер не должен вызывать IoCompleteRequest , если IRP был создан с помощью IoAllocateIrp. |
|
Правило IoAllocateFree указывает, что драйвер должен использовать IoFreeIrp только для IRP, которые ранее были выделены с Помощью IoAllocateIrp. |
|
Правило IoAllocateForward указывает, что если IRP создается вызовом IoAllocateIrp, драйвер должен задать подпрограмму завершения перед вызовом IoCallDriver или PoCallDriver. |
|
Правило IoAllocateIrpSignalEventInCompletion указывает, что драйвер должен вызывать KeSetEvent в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP. |
|
Правило IoAllocateIrpSignalEventInCompletion2 указывает, что keSetEvent необходимо вызывать в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP. |
|
Правило IoAllocateIrpSignalEventInCompletion3 указывает, что KeSetEvent необходимо вызывать в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP. |
|
Правило IoAllocateIrpSignalEventInCompletionTimeout сообщает о дефекте, если обнаруживает, что этот драйвер будет ожидать неограниченное время, пока не вернется нижний драйвер, так как событие IRP должно быть указано в процедуре завершения. |
|
Правило IoBuildDeviceControlNoFree указывает, что драйвер, вызывающий IoBuildDeviceIoControlRequest , не должен вызывать IoFreeIrp. |
|
Правило IoBuildDeviceControlWait указывает, что подпрограмма KeWaitForSingleObject должна вызываться, если IoCallDriver или PoCallDriver возвращают STATUS_PENDING. |
|
Правило IoBuildDeviceControlWaitTimeout сообщает о дефекте, если обнаруживает, что этот драйвер будет ждать неограниченное время, пока не вернется нижний драйвер, так как событие IRP должно быть указано в процедуре завершения. |
|
Правило IoBuildDeviceIoControlSetEvent указывает, что драйвер, вызывающий IoBuildDeviceIoControlRequest , не должен вызывать KeSetEvent , если драйвер предоставляет указатель на объект события, выделенный вызывающим и инициализированный. Драйвер не должен вызывать KeSetEvent для этого IRP. |
|
Правило IoBuildFsdComplete указывает, что драйвер не должен вызывать IoCompleteRequest , если IRP был создан с помощью IoBuildAsynchronousFsdRequest. |
|
Правило IoBuildFsdForward указывает, что подпрограмма завершения должна быть задана до того, как драйвер вызывает IoCallDriver или PoCallDriver , если IRP создается вызовом IoBuildAsynchronousFsdRequest. |
|
Правило IoBuildFsdFree указывает, что драйвер должен использовать IoFreeIrp только в средах IRP, которые он ранее выделил с IoBuildAsynchronousFsdRequest. |
|
Правило IoBuildFsdIrpSignalEventInCompletion указывает, что драйвер должен вызывать KeSetEvent в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP. |
|
Правило IoBuildFsdIrpSignalEventInCompletion2 указывает, что keSetEvent необходимо вызывать в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP. |
|
Правило IoBuildFsdIrpSignalEventInCompletion3 указывает, что KeSetEvent необходимо вызывать в подпрограмме завершения, если установлен флаг Irp-PendingReturned> и подпрограмма завершения обрабатывает локально созданный асинхронный IRP. |
|
Правило IoBuildFsdIrpSignalEventInCompletionTimeout сообщает о дефекте, когда драйвер ожидает неограниченное время, пока не вернется нижний драйвер, так как событие IRP должно быть указано в процедуре завершения. |
|
Правило IoBuildSynchronousFsdRequestNoFree указывает, что драйвер, вызывающий IoBuildSynchronousFsdRequest , не должен вызывать IoFreeIrp. |
|
Правило IoBuildSynchronousFsdRequestWait указывает, что необходимо вызвать KeWaitForSingleObject в случае, если IoCallDriver или PoCallDriver возвращают STATUS_PENDING. |
|
Правило IoBuildSynchronousFsdRequestWaitTimeout сообщает о дефекте, если обнаруживает, что этот драйвер будет ожидать неограниченное время, пока не вернется нижний драйвер, так как событие IRP должно быть указано в процедуре завершения. |
|
Правило RequestedPowerIrp указывает, что драйвер вызывает PoRequestPowerIrp с переменной |
Выбор набора правил LocalIrpProcessing
Выберите проект драйвера (VCXProj) в Microsoft Visual Studio. В меню Драйвер выберите Запуск средства проверки статических драйверов....
Перейдите на вкладку Правила . В разделе Наборы правил выберите LocalIrpProcessing.
Чтобы выбрать набор правил по умолчанию в окне командной строки разработчика Visual Studio, укажите LocalIrpProcessing.sdv с параметром /проверка. Пример:
msbuild /t:sdv /p:Inputs="/check:LocalIrpProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Дополнительные сведения см. в разделах Использование статического средства проверки драйверов для поиска дефектов в драйверах и Команд средства проверки статических драйверов (MSBuild).