겹치는 I/O 작업 처리
디바이스에서 작업을 겹치는 드라이버의 DpcForIsr 또는 CustomDpc 루틴은 StartIo 루틴에 대한 요청 입력과 IoRequestDpc 또는 KeInsertQueueDpc에 대한 ISR 호출 간의 일대일 대응을 사용할 수 없습니다. 이러한 드라이버의 DpcForIsr 또는 CustomDpc 는 IRP 및 ISR 제공 컨텍스트 또는 대상 디바이스 개체의 CurrentIrp 포인터에 대한 입력 포인터를 사용하여 해당 IRP만 완료할 수 없습니다.
지정된 순간에 동일한 DPC 개체를 두 번 큐에 대기할 수 없습니다. ISR이 해당 DpcForIsr 또는 CustomDpc가 실행되기 전에 IoRequestDpc 또는 KeInsertQueueDpc를 두 번 이상 호출하는 경우 프로세서의 IRQL이 DISPATCH_LEVEL 아래로 떨어질 때 DPC 루틴이 한 번만 실행됩니다. 반면에 해당 DpcForIsr 또는 CustomDpc가 다른 프로세서에서 실행되는 동안 ISR이 IoRequestDpc 또는 KeInsertQueueDpc를 호출하는 경우 DPC 루틴은 두 프로세서에서 동시에 실행할 수 있습니다.
따라서 디바이스에서 인터럽트 기반 I/O 작업과 겹치는 모든 드라이버에는 다음이 있어야 합니다.
호출될 때마다 드라이버에서 유지 관리되는 미해결 요청 수를 완료할 수 있는 DpcForIsr 또는 CustomDpc 루틴
해당 루틴이 컨텍스트 정보를 사용하고 컨텍스트 정보가 속한 IRP를 완료할 때까지 DpcForIsr 또는 CustomDpc 루틴에 전달하는 컨텍스트 정보를 덮어쓰지 않는 ISR
DpcForIsr 또는 CustomDpc 루틴을 대신하여 ISR의 컨텍스트 영역에 액세스하는 SynchCritSection 루틴