Набор правил IrpPending (WDM)
Используйте эти правила, чтобы убедиться, что драйвер правильно управляет пакетами запросов ввода-вывода (IRP).
В этом разделе
Раздел | Описание |
---|---|
Правило MarkDevicePower указывает, что IRP_MJ_POWER с IRP_MN_SET_POWER для SystemPowerState IRP, идущее к S0, будет заполнено. |
|
Правило MarkingInterlockedQueuedIrps указывает, что драйвер правильно помечает IRP как ожидающее, прежде чем помещает его в очередь для дальнейшей обработки. |
|
Правило MarkingQueuedIrps указывает, что драйвер вызывает IoMarkIrpPending для IRP, который требует дальнейшей обработки только при удержании спин-блокировки. Это правило применяется только в том случае, если драйвер добавляет IRP в очередь, управляемую драйвером. |
|
Правило MarkIrpPending указывает, что всякий раз, когда подпрограмма диспетчеризации драйвера вызывает IoMarkIrpPending, драйвер возвращает STATUS_PENDING после завершения процедуры диспетчеризации. Дополнительные сведения см. в разделе MarkIrpPending2 . |
|
Правило MarkIrpPending2 указывает, что если подпрограмма диспетчеризации возвращает STATUS_PENDING, она вызывает IoMarkIrpPending или передает IRP нижнему драйверу. Дополнительные спецификации см. в разделе MarkIrpPending . |
|
Правило MarkPower указывает, что IRP_MJ_POWER с IRP_MN_SET_POWER для SystemPowerState IRP, идущее к S0, будет заполнено. Это правило применяется только к драйверам FDO и FIDO. |
|
Правило MarkPowerDown указывает, что IRP_MJ_POWER с IRP_MN_SET_POWER для SystemPowerState IRP с s0 до [S1... S5] загона. |
|
Правило MarkQueryRelations указывает, что драйвер должен использовать IRP_MN_QUERY_DEVICE_RELATIONS IRP. |
|
Правило MarkStartDevice указывает, что драйвер правильно IRP_MN_START_DEVICE IRP. Это правило применяется только к драйверам FDO и FIDO. |
|
Правило PendedCompletedRequest указывает, что подпрограмма диспетчеризации драйвера не возвращает STATUS_PENDING в IRP, если драйвер вызвал IoCompleteRequest во входящем IRP. |
|
Правило PendedCompletedRequest2 указывает, что после вызова IoCallDriver или PoCallDriver требуется ожидание, так как подпрограмма диспетчеризации может завершить ожидающий IRP. |
|
Правило PendedCompletedRequest3 указывает, что ожидающий IRP не должен быть завершен вызовом IoCompleteRequest. |
|
Правило PendedCompletedRequestEx указывает, что драйвер не должен вызывать IoCompleteRequest для ожидающего IRP. |
|
Правило StartDeviceWait указывает, что драйвер не должен вызывать KeWaitForSingleObject в контексте IRP устройства запуска. |
|
Правило StartDeviceWait2 указывает, что драйвер не должен вызывать KeWaitForSingleObject в контексте IRP устройства запуска. |
|
Правило StartDeviceWait3 указывает, что драйвер не должен вызывать KeWaitForSingleObject в контексте IRP устройства запуска. |
|
Правило StartDeviceWait4 указывает, что драйвер не должен вызывать KeWaitForSingleObject в контексте IRP устройства запуска. |
Выбор набора правил IrpPending
Выберите проект драйвера (.vcxProj) в Microsoft Visual Studio. В меню Драйвер щелкните Запустить средство проверки статических драйверов....
Перейдите на вкладку Правила . В разделе Наборы правил выберите IrpPending.
Чтобы выбрать набор правил по умолчанию в окне командной строки разработчика Visual Studio, укажите IrpPending.sdv с параметром /проверка. Пример:
msbuild /t:sdv /p:Inputs="/check:IrpPending.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Дополнительные сведения см. в разделах Использование статического средства проверки драйверов для поиска дефектов в драйверах и Команд статического средства проверки драйверов (MSBuild).