IrpProcessing Rule Set (WDM)
Verwenden Sie diese Regeln, um zu überprüfen, ob Ihr Treiber E/A-Anforderungspakete (IRP) ordnungsgemäß verarbeitet.
In diesem Abschnitt
Thema | BESCHREIBUNG |
---|---|
Die CompleteRequest-Regel überprüft, ob die IoCompleteRequest-Routine nicht aufgerufen wird, nachdem eine Vervollständigungsroutine ausgeführt wurde, und dass sie keine STATUS_MORE_PROCESSING_REQUIRED zurückgibt. |
|
Die CompleteRequestStatusCheck-Regel überprüft, ob der E/A-status-Wert in der IRP mit dem vom unteren Treiber zurückgegebenen status Wert übereinstimmt. |
|
Die CompletionRoutineRegistered-Regel gibt an, dass die Dispatchroutine danach IoCallDriver oder PoCallDriver aufrufen muss, wenn die Dispatchroutine Eine IoCompletion-Routine mithilfe von IoSetCompletionRoutineEx registriert. |
|
Die DoubleCompletion-Regel (WDM) gibt an, dass der Treiber die IoCompleteRequest-Routine nicht zweimal für dieselbe IRP aufrufen darf. |
|
Die IoReuseIrp-Regel gibt an, dass ein Treiber IoReuseIrp nur für IRPs verwenden soll, die er zuvor IoAllocateIrp zugeordnet hat. |
|
Die IoReuseIrp2-Regel gibt an, dass ein Treiber IoReuseIrp nur für IRPs verwenden soll, die er zuvor im Treiber zugeordnet hat. |
|
Die IoSetCompletionExCompleteIrp-Regel gibt an, dass die IoSetCompletionRoutineEx-Routine einen NTSTATUS-Wert zurückgibt. Der Treiber muss diesen Wert überprüfen, um festzustellen, ob die IoCompletion-Routine vor dem Aufrufen von IoCallDriver oder PoCallDriver erfolgreich registriert wurde. Wenn IoSetCompletionRoutineEx fehlschlägt, sollte die IRP abgeschlossen sein, und die Dispatchroutine sollte zurückkehren. |
|
Die IoSetCompletionRoutineExCheck-Regel gibt an, dass die IoSetCompletionRoutineEx-Routine einen NTSTATUS-Wert zurückgibt. Der Treiber muss diesen Wert überprüfen, um festzustellen, ob die IoCompletion-Routine erfolgreich registriert wurde, bevor IoCallDriver oder PoCallDriver aufgerufen wird. |
|
Die IoSetCompletionRoutineExCheckDeviceObject-Regel gibt an, dass, wenn das aktuelle Geräteobjekt nicht an IoSetCompletionRoutineEx übergeben wird und das niedrigere Geräteobjekt ist, dies zu einer Racebedingung führen kann, bei der das aktuelle Geräteobjekt entladen werden kann, obwohl die Vervollständigungsroutine nicht ausgeführt wurde. |
|
Die IoSetCompletionRoutineNonPnpDriver-Regel gibt an, dass Treiber, die keine PnP-Treiber sind, IoSetCompletionRoutineEx und nicht IoSetCompletionRoutine verwenden sollten. |
|
Die IrpCancelField-Regel gibt an, dass der Treiber den Wert des Irp-Cancel-Members> überprüft, wenn er eine Abbruchroutine für ein IRP festlegt, das er geschrieben hat. |
|
Die IrpProcessingComplete-Regel gibt an, dass die IRP entweder vom Treiber selbst oder von einem Treiber auf niedrigerer Ebene abgeschlossen worden sein muss, wenn eine Dispatchroutine STATUS_SUCCESS zurückgibt. |
|
Die LowerDriverReturn-Regel gibt an, dass der Treiber nach der Verwendung von PoCallDriver oder IoCallDriver zum Aufrufen eines niedrigeren Treibers die Rückgabe status aus dem Anruf speichert und die zurückgegebene status an die Dispatchroutine übergibt. |
|
Die SignalEventInCompletion-Regel gibt an, dass der Treiber bei der Verarbeitung eines asynchronen IRP das KeSetEvent in der Vervollständigungsroutine aufrufen muss, wenn das Irp-PendingReturned-Flag> festgelegt ist. |
|
Die SignalEventInCompletion2-Regel gibt an, dass der Treiber bei der Verarbeitung eines asynchronen IRP das KeSetEvent in der Vervollständigungsroutine aufrufen muss, wenn das Irp-PendingReturned-Flag> festgelegt ist. |
|
Die SignalEventInCompletion3-Regel gibt an, dass der Treiber bei der Verarbeitung eines asynchronen IRP das KeSetEvent in der Vervollständigungsroutine aufrufen muss, wenn das Irp-PendingReturned-Flag> festgelegt ist. |
|
Die StartIoCancel-Regel gibt an, dass der Treiber IoSetStartIoAttributes nicht aufrufen darf, wobei der NonCancelable-Parameter auf FALSE festgelegt ist, bevor IoSetCancelRoutine mit einer Cancel-Routine ohne NULL aufgerufen wird. |
|
Die StartIoRecursion-Regel gibt an, dass, wenn die StartIo-Routine eines Treibers einen Aufruf von IoStartNextPacket enthält, der Treiber zuerst IoSetStartIoAttributes aufrufen muss, wobei das DeferredStartIo-Attribut auf TRUE festgelegt ist. Andernfalls kann es zu unendlicher Rekursion führen. |
|
Die PnpRemove-Regel gibt an, dass der Treiber IRP_MN_SURPRISE_REMOVAL-, IRP_MN_CANCEL_REMOVE_DEVICE-, IRP_MN_CANCEL_STOP_DEVICE- oder IRP_MN_REMOVE_DEVICE-Anforderungen mit einem Fehler nicht abschließen kann. |
|
Die PnpSurpriseRemove-Regel gibt an, dass der Treiber bei der Verarbeitung einer IRP_MN_SURPRISE_REMOVAL Anforderung nicht IoDeleteDevice oder IoDetachDevice aufruft. |
|
Die PowerDownAllocate-Regel gibt an, dass ein FDO- und FIDO-Treiber beim Verarbeiten einer IRP_MN_SET_POWER Anforderung für einen SystemPowerState-Übergang von s0 auf [S1... S5]. |
|
Die PowerDownFail-Regel gibt an, dass ein FDO- oder FIDO-Treiber eine IRP_MN_SET_POWER Anforderung nicht fehlschlagen darf, wenn das Gerät heruntergefahren wird. Diese Regel gilt nur für FDO- und FIDO-Treiber. |
|
Die PowerIrpDDIs-Regel gibt an, dass ein Treiber bei der Verarbeitung eines Systems oder eines Geräts, das mit IRP_MN_SET_POWER IRP_MJ_POWER, keine DDIs aufrufen soll, die nur bei PASSIVE_LEVEL aufgerufen werden können. |
|
Die PowerUpFail-Regel gibt an, dass ein FDO- oder FIDO-Treiber keine IRP_MN_SET_POWER-Anforderung fehlschlagen darf, wenn das Gerät hochfahren wird. |
|
Die PnpIrpCompletion-Regel überprüft, ob ein FDO-Treiber PnP-IRPs an den unteren Treiber übergibt. |
|
Die WmiComplete-Regel gibt an, dass der Treiber bei der Verarbeitung eines WMI-Neben-IRPIoCompleteRequest aufruft, bevor er von der DispatchSystemControl-Routine zurückkehrt. |
|
Die WmiForward-Regel gibt an, dass der Treiber WMI-Neben-IRPs weiterleiten muss, wenn eine Weiterleitung erforderlich ist. |
So wählen Sie den IrpProcessing-Regelsatz aus
Wählen Sie Ihr Treiberprojekt (.vcxProj) in Microsoft Visual Studio aus. Klicken Sie im Menü Treiber auf Statische Treiberüberprüfung starten....
Klicken Sie auf die Registerkarte Regeln . Wählen Sie unter Regelsätzedie Option IrpProcessing aus.
Um den Standardregelsatz in einem Visual Studio-Entwicklereingabeaufforderungsfenster auszuwählen, geben Sie IrpProcessing.sdv mit der Option /check an . Beispiel:
msbuild /t:sdv /p:Inputs="/check:IrpProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Weitere Informationen finden Sie unter Using Static Driver Verifier to Find Defects in Drivers and Static Driver Verifier commands (MSBuild).
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für