MarkingQueuedIrps 규칙(wdm)
MarkingQueuedIrps 규칙은 드라이버가 스핀 잠금을 유지하는 동안에만 추가 처리가 필요한 IRP에 대해 IoMarkIrpPending을 호출하도록 지정합니다. 이 규칙은 드라이버가 드라이버 관리 큐에 IRP를 추가하는 경우에만 적용됩니다.
특히 드라이버는 다음 이벤트가 모두 발생하는 경우에만 이 규칙을 위반합니다.
드라이버는 KeAcquireSpinLock 또는 KeAcquireInStackQueuedSpinLock 을 호출하여 스핀 잠금을 획득합니다.
드라이버는 다음 루틴 중 하나를 호출하여 드라이버 관리 큐에 IRP를 추가합니다.
드라이버는 KeReleaseSpinLock 또는 KeReleaseInStackQueuedSpinLock 을 호출하여 IoMarkIrpPending을 호출하기 전에 스핀 잠금을 해제합니다.
드라이버는 IRP에 대한 STATUS_PENDING 상태 반환합니다.
드라이버는 스핀 잠금을 유지하는 동안에만 대기 중인 IRP에 대해 IoMarkIrpPending 을 호출해야 합니다. 그렇지 않으면 IRP가 큐에서 해제되고, 다른 드라이버 루틴에 의해 완료되고, IoMarkIrpPending 호출이 발생하기 전에 시스템에서 해제되어 충돌이 발생할 수 있습니다.
자세한 내용은 IRP 취소 동기화를 참조하세요.
드라이버 모델: WDM
테스트 방법
컴파일 시 |
---|
정적 드라이버 검증 도구를 실행하고 MarkingQueuedIrps 규칙을 지정합니다. 다음 단계를 사용하여 코드 분석을 실행합니다. |
적용 대상
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueueKeInsertDeviceQueueKeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList