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


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

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

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

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

MarkDevicePower

Правило MarkDevicePower указывает, что IRP_MJ_POWER с IRP_MN_SET_POWER для SystemPowerState IRP, идущее к S0, будет заполнено.

MarkingInterlockedQueuedIrps

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

MarkingQueuedIrps

Правило MarkingQueuedIrps указывает, что драйвер вызывает IoMarkIrpPending для IRP, который требует дальнейшей обработки только при удержании спин-блокировки. Это правило применяется только в том случае, если драйвер добавляет IRP в очередь, управляемую драйвером.

MarkIrpPending

Правило MarkIrpPending указывает, что всякий раз, когда подпрограмма диспетчеризации драйвера вызывает IoMarkIrpPending, драйвер возвращает STATUS_PENDING после завершения процедуры диспетчеризации. Дополнительные сведения см. в разделе MarkIrpPending2 .

MarkIrpPending2

Правило MarkIrpPending2 указывает, что если подпрограмма диспетчеризации возвращает STATUS_PENDING, она вызывает IoMarkIrpPending или передает IRP нижнему драйверу. Дополнительные спецификации см. в разделе MarkIrpPending .

MarkPower

Правило MarkPower указывает, что IRP_MJ_POWER с IRP_MN_SET_POWER для SystemPowerState IRP, идущее к S0, будет заполнено. Это правило применяется только к драйверам FDO и FIDO.

MarkPowerDown

Правило MarkPowerDown указывает, что IRP_MJ_POWER с IRP_MN_SET_POWER для SystemPowerState IRP с s0 до [S1... S5] загона.

MarkQueryRelations

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

MarkStartDevice

Правило MarkStartDevice указывает, что драйвер правильно IRP_MN_START_DEVICE IRP. Это правило применяется только к драйверам FDO и FIDO.

PendedCompletedRequest

Правило PendedCompletedRequest указывает, что подпрограмма диспетчеризации драйвера не возвращает STATUS_PENDING в IRP, если драйвер вызвал IoCompleteRequest во входящем IRP.

PendedCompletedRequest2

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

PendedCompletedRequest3

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

PendedCompletedRequestEx

Правило PendedCompletedRequestEx указывает, что драйвер не должен вызывать IoCompleteRequest для ожидающего IRP.

StartDeviceWait

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

StartDeviceWait2

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

StartDeviceWait3

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

StartDeviceWait4

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

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

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

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

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

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

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