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:
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