Freigeben über


IrqlExApcLte3-Regel (wdm)

Die IrqlExApcLte3-Regel gibt an, dass der Treiber die folgenden Supportroutinen für Führungskräfte nur bei IRQL <= APC_LEVEL aufruft.

Treiber mit Fehlern im Zusammenhang mit IRQL können schwerwiegende Probleme verursachen und zu einem Absturz eines Computers führen.

Treibermodell: WDM

Mit dieser Regel gefundene Fehlerüberprüfungen: Fehlerprüfung 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20007), Fehlerprüfung 0xA: IRQL_NOT_LESS_OR_EQUAL

Beispiel

Der folgende Code verstößt gegen diese Regel:

NTSTATUS
DispatchRequest (
    _In_ PDEVICE_REQUEST DeviceRequest
    )
{  
    KIRQL OldIrql;
    KSPIN_LOCK SpinLock;
    NTSTATUS Status;
    ...

    KeInitializeSpinLock(&SpinLock);

    //
    // KeAcquireSpinLock sets IRQL to DISPATCH_LEVEL and the previous IRQL is 
    // written to OldIrql after the lock is acquired.
    //

    KeAcquireSpinLock(&SpinLock, &OldIrql);
    ...

    Status = ProcessRequest(DeviceRequest);

    //
    // KeReleaseSpinLock sets IRQL to the OldIrql returned by KeAcquireSpinLock.
    //

    KeReleaseSpinLock(&SpinLock, &OldIrql);
    ...
}

NTSTATUS
ProcessRequest (
    _In_ PDEVICE_REQUEST DeviceRequest
    )
{
    ERESOURCE Resource;
    NTSTATUS Status;
    ...

    Resource = DeviceRequest->GetTableLock();

    //
    // RULE VIOLATION! - ExAcquireSharedStarveExclusive can be called only at 
    //                   IRQL <= APC_LEVEL. 
    //

    if(!ExAcquireSharedStarveExclusive(&Resource, FALSE)) {
        return STATUS_UNSUCCESSFUL;
    }

    ...

    ExReleaseResourceLite(&Resource);
    ...
    return Status;
}

So führen Sie einen Test durch

Beim Kompilieren:

Führen Sie static Driver Verifier aus, und geben Sie die IrqlExApcLte3-Regel an.

Gehen Sie folgendermaßen vor, um Ihren Code zu analysieren:
  1. Bereiten Sie den Code vor (verwenden Sie Rollentypdeklarationen).
  2. Führen Sie Static Driver Verifier aus.
  3. Überprüfen und analysieren Sie die Ergebnisse.

Weitere Informationen finden Sie unter Verwenden der statischen Treiberüberprüfung, um Fehler in Treibern zu finden.

Zur Laufzeit

Führen Sie die Treiberüberprüfung aus, und wählen Sie die DDI-Konformitätsüberprüfungsoption aus.

Gilt für:

ExAcquireResourceExclusiveLiteExAcquireResourceSharedLiteExAcquireSharedStarveExclusiveExAcquireSharedWaitForExclusiveExConvertExclusiveToSharedLiteExDeleteResourceLite

Weitere Informationen

Verwalten von Hardwareprioritäten, um Fehler und Deadlocks bei verwendung von Spin-Sperren zu verhindern