LocalIrpProcessing-Regelsatz (WDM)

Verwenden Sie diese Regeln, um zu überprüfen, ob Ihr Treiber E/A-Anforderungspakete (IRP) ordnungsgemäß verarbeitet, die vom Treiber erstellt werden.

In diesem Abschnitt

Thema BESCHREIBUNG

IoAllocateComplete

Die IoAllocateComplete-Regel gibt an, dass ein Treiber IoCompleteRequest nicht aufrufen soll, wenn das IRP mit IoAllocateIrp erstellt wurde.

IoAllocateFree

Die IoAllocateFree-Regel gibt an, dass ein Treiber IoFreeIrp nur für IRPs verwenden soll, die zuvor IoAllocateIrp zugeordnet wurden.

IoAllocateForward

Die IoAllocateForward-Regel gibt an, dass der Treiber vor dem Aufrufen von IoCallDriver oder PoCallDriver eine Vervollständigungsroutine festlegen muss, wenn ein IRP durch einen Aufruf von IoAllocateIrp generiert wird.

IoAllocateIrpSignalEventInCompletion

Die IoAllocateIrpSignalEventInCompletion-Regel gibt an, dass der Treiber KeSetEvent in der Abschlussroutine aufrufen soll, wenn das Flag Irp-PendingReturned> festgelegt ist und die Vervollständigungsroutine ein lokal erstelltes asynchrones IRP verarbeitet.

IoAllocateIrpSignalEventInCompletion2

Die IoAllocateIrpSignalEventInCompletion2-Regel gibt an, dass KeSetEvent in der Abschlussroutine aufgerufen werden muss, wenn das Irp-PendingReturned-Flag> festgelegt ist und die Vervollständigungsroutine ein lokal erstelltes asynchrones IRP verarbeitet.

IoAllocateIrpSignalEventInCompletion3

Die IoAllocateIrpSignalEventInCompletion3-Regel gibt an, dass KeSetEvent in der Abschlussroutine aufgerufen werden muss, wenn das Flag Irp-PendingReturned> festgelegt ist und die Abschlussroutine ein lokal erstelltes asynchrones IRP verarbeitet.

IoAllocateIrpSignalEventInCompletionTimeout

Die IoAllocateIrpSignalEventInCompletionTimeout-Regel meldet einen Fehler, wenn erkannt wird, dass dieser Treiber unbegrenzt wartet, bis der niedrigere Treiber zurückkehrt, da das Ereignis des IRP in der Abschlussroutine signalisiert werden muss.

IoBuildDeviceControlNoFree

Die IoBuildDeviceControlNoFree-Regel gibt an, dass ein Treiber, der IoBuildDeviceIoControlRequest aufruft, IoFreeIrp nicht aufrufen darf.

IoBuildDeviceControlWait

Die IoBuildDeviceControlWait-Regel gibt an, dass die KeWaitForSingleObject-Routine aufgerufen werden soll, wenn IoCallDriver oder PoCallDriver STATUS_PENDING zurückgibt.

IoBuildDeviceControlWaitTimeout

Die IoBuildDeviceControlWaitTimeout-Regel meldet einen Fehler, wenn erkannt wird, dass dieser Treiber unbegrenzt wartet, bis der niedrigere Treiber zurückkehrt, da das Ereignis des IRP in der Abschlussroutine signalisiert werden muss.

IoBuildDeviceIoControlSetEvent

Die IoBuildDeviceIoControlSetEvent-Regel gibt an, dass ein Treiber, der IoBuildDeviceIoControlRequest aufruft, KeSetEvent nicht aufrufen darf, wenn der Treiber einen Zeiger auf ein vom Aufrufer zugeordnetes und initialisiertes Ereignisobjekt bereitstellt. Das KeSetEvent muss nicht vom Treiber für dieses IRP aufgerufen werden.

IoBuildFsdComplete

Die IoBuildFsdComplete-Regel gibt an, dass ein Treiber IoCompleteRequest nicht aufrufen soll, wenn das IRP mit IoBuildAsynchronousFsdRequest erstellt wurde.

IoBuildFsdForward

Die IoBuildFsdForward-Regel gibt an, dass eine Vervollständigungsroutine festgelegt werden muss, bevor ein Treiber IoCallDriver oder PoCallDriver aufruft, wenn die IRP durch einen Aufruf von IoBuildAsynchronousFsdRequest generiert wird.

IoBuildFsdFree

Die IoBuildFsdFree-Regel gibt an, dass ein Treiber IoFreeIrp nur für IRPs verwenden soll, die er zuvor IoBuildAsynchronousFsdRequest zugeordnet hat.

IoBuildFsdIrpSignalEventInCompletion

Die IoBuildFsdIrpSignalEventInCompletion-Regel gibt an, dass der Treiber KeSetEvent in der Abschlussroutine aufrufen soll, wenn das Flag Irp-PendingReturned> festgelegt ist und die Abschlussroutine ein lokal erstelltes asynchrones IRP verarbeitet.

IoBuildFsdIrpSignalEventInCompletion2

Die IoBuildFsdIrpSignalEventInCompletion2-Regel gibt an, dass KeSetEvent in der Abschlussroutine aufgerufen werden muss, wenn das Flag Irp-PendingReturned> festgelegt ist und die Abschlussroutine ein lokal erstelltes asynchrones IRP verarbeitet.

IoBuildFsdIrpSignalEventInCompletion3

Die IoBuildFsdIrpSignalEventInCompletion3-Regel gibt an, dass KeSetEvent in der Abschlussroutine aufgerufen werden muss, wenn das Flag Irp-PendingReturned> festgelegt ist und die Vervollständigungsroutine ein lokal erstelltes asynchrones IRP verarbeitet.

IoBuildFsdIrpSignalEventInCompletionTimeout

Die IoBuildFsdIrpSignalEventInCompletionTimeout-Regel meldet einen Fehler, wenn der Treiber unbegrenzt wartet, bis der niedrigere Treiber zurückkehrt, da das Ereignis des IRP in der Abschlussroutine signalisiert werden muss.

IoBuildSynchronousFsdRequestNoFree

Die Regel IoBuildSynchronousFsdRequestNoFree gibt an, dass ein Treiber, der IoBuildSynchronousFsdRequest aufruft, IoFreeIrp nicht aufrufen darf.

IoBuildSynchronousFsdRequestWait

Die IoBuildSynchronousFsdRequestWait-Regel gibt an, dass KeWaitForSingleObject für den Fall aufgerufen werden soll, dass IoCallDriver oder PoCallDriver STATUS_PENDING zurückgibt.

IoBuildSynchronousFsdRequestWaitTimeout

Die IoBuildSynchronousFsdRequestWaitTimeout-Regel meldet einen Fehler, wenn erkannt wird, dass dieser Treiber unbegrenzt wartet, bis der niedrigere Treiber zurückkehrt, da das Ereignis des IRP in der Abschlussroutine signalisiert werden muss.

RequestedPowerIrp

Die RequestedPowerIrp-Regel gibt an, dass der Treiber PoRequestPowerIrp aufruft , wobei die *Irp Zeigervariable auf NULL festgelegt ist.

So wählen Sie den Regelsatz LocalIrpProcessing aus

  1. Wählen Sie Ihr Treiberprojekt (VCXProj) in Microsoft Visual Studio aus. Klicken Sie im Menü Treiber auf Statische Treiberüberprüfung starten....

  2. Klicken Sie auf die Registerkarte Regeln . Wählen Sie unter Regelsätzedie Option LocalIrpProcessing aus.

    Um den Standardregelsatz aus einem Visual Studio-Entwicklereingabeaufforderungsfenster auszuwählen, geben Sie LocalIrpProcessing.sdv mit der Option /check an. Beispiel:

    msbuild /t:sdv /p:Inputs="/check:LocalIrpProcessing.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).