다음 예제에서 드라이버는 ASSERT 매크로를 사용하여 드라이버 이미지의 디버그 버전에서 올바른 디바이스 상태를 확인하지만 동일한 드라이버 원본의 소매 빌드에서 디바이스 상태를 확인하지는 않습니다.
case IOCTL_WAIT_FOR_EVENT:
ASSERT((!Extension->WaitEventIrp));
Extension->WaitEventIrp = Irp;
IoMarkIrpPending(Irp);
status = STATUS_PENDING;
디버그 드라이버 이미지에서 드라이버가 이미 IRP 보류를 갖고 있는 경우, 시스템은 어설트를 발생시킵니다. 그러나 소매 빌드에서는 드라이버가 이 오류를 확인하지 않습니다. 동일한 IOCTL에 대한 두 번의 호출로 인해 드라이버가 IRP 추적을 잃게 됩니다.
다중 프로세서 시스템에서 이 코드 조각은 추가 문제를 일으킬 수 있습니다. 초기 진입 시 이 루틴이 이 IRP를 소유하고 조작할 권리가 있다고 가정합니다. 루틴이 Extension-WaitEventIrp>의 전역 구조에 Irp 포인터를 저장하면 다른 스레드가 해당 전역 구조에서 IRP 주소를 가져와서 IRP에 대한 작업을 수행할 수 있습니다. 이 문제를 방지하려면 드라이버가 IRP를 저장하기 전에 보류 중인 IRP를 표시해야 하며 IoMarkIrpPending 에 대한 호출과 할당을 연동 시퀀스에 모두 포함해야 합니다. IRP에 대한 취소 루틴도 필요할 수 있습니다.