MarkingQueuedIrps-Regel (wdm)
Die MarkingQueuedIrps-Regel gibt an, dass der Treiber IoMarkIrpPending für ein IRP aufruft, das eine weitere Verarbeitung nur bei Beibehaltung einer Drehsperre erfordert. Diese Regel gilt nur, wenn der Treiber die IRP einer vom Treiber verwalteten Warteschlange hinzufügt.
Insbesondere verstößt der Treiber nur gegen diese Regel, wenn alle folgenden Ereignisse auftreten.
Der Treiber ruft KeAcquireSpinLock oder KeAcquireInStackQueuedSpinLock auf, um eine Drehsperre zu erhalten.
Der Treiber ruft eine der folgenden Routinen auf, um einer vom Treiber verwalteten Warteschlange ein IRP hinzuzufügen:
Der Treiber ruft KeReleaseSpinLock oder KeReleaseInStackQueuedSpinLock auf, um die Spinsperre freizugeben, bevor IoMarkIrpPending aufgerufen wird.
Der Treiber gibt eine status von STATUS_PENDING für den IRP zurück.
Treiber sollten IoMarkIrpPending für eine IRP in der Warteschlange nur aufrufen, wenn sie eine Drehsperre halten. Andernfalls könnte ein IRP entfernt, von einer anderen Treiberroutine abgeschlossen und vom System freigegeben werden, bevor der Aufruf von IoMarkIrpPending erfolgt, wodurch ein Absturz verursacht wird.
Weitere Informationen finden Sie unter Synchronisieren des IRP-Abbruchs.
Treibermodell: WDM
So führen Sie einen Test durch
Beim Kompilieren: |
---|
Führen Sie static Driver Verifier aus, und geben Sie die MarkingQueuedIrps-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. |
Gilt für:
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueueKeInsertDeviceQueueKeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList