겹치는 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 루틴
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기