본문 바로가기

reversing/Windows Driver

DPC (Deferred Procedure Calls)

SMALL

------https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-dpc-objects --------


Because ISRs must execute as quickly as possible, drivers must usually postpone the completion of servicing an interrupt until after the ISR returns. Therefore, the system provides support for deferred procedure calls(DPCs), which can be queued from ISRs and which are executed at a later time and at a lower IRQL than the ISR.

ISR(Interrupt Service Routine) 루틴들은 가능한 빠르게 실행되어야 하기 때문에, 드라이브들은 다른 ISR이 리턴 될때까지 인터럽트 완료를 미뤄야 한다. 그렇기에, 시스템에서 deferred procedure calls(DPCs)을 제공한다. DPC 는 ISR을 큐로 관리하는 것으로서, 나중에 실행되거나, 우선순위가 낮은 ISR을 관리한다.

Each DPC is associated with a system-defined DPC object. The system supplies one DPC object for each device object. The system initializes this DPC object when a driver registers a DPC routine known as the DpcForIsr routine. A driver can create additional DPC objects if more than one DPC is needed. These extra DPCs are known as CustomDpc routines.

각각의 DPC는 시스템에서 정의한 DPC 객체와 연관성이 있다. 시스템은 각 각의 디바이스 오브젝트 마다 하나의  DPC 오브젝트를 제공해주고 있다. 시스템은 DpcForIsr 이라고 알려진 DPC 루틴이 드라이버에 등록되면 DPC  오브젝트를 초기화 한다. 하나의 드라이버가 하나 이상의 DPC 가 필요하다고 하면, 추가적으로 생성하여야 한다. 추가적인 부분은 CustomDpc 루틴이라고 알려져있는 나머지 DPC이다.

DPC object contents should not be directly referenced by drivers. The object's structure is not documented. Drivers do not have access to the system-supplied DPC object assigned to each device object. Drivers allocate storage for extra DPCs, but the contents of these DPC objects should only be referenced by system routines.

DPC 객체의 멤버들은 드라이들에게서 직접적으로 참조 되어서는 않된다. 객체의 구조체들은 정형화[문서화]되어 있지 않다.     드라이버들은 시스템에서 할당해준  각 디바이스 객체의 DPC 객체에는 접근할수 없다. 드라이버들은 나머지 DPCs를 위해서 저장 공간을 할당할 수 있지만, 해당 DPC들의 멤버에는 오직 시스템 루틴을 통해서만 접근이 가능하다.

DPC objects and DPCs can also be used with timers. For more information, see Timer Objects and DPCs.

DPC 객체와 DPCs들은 또한 타이머와 사용 가능하다. 추가적인 정보는 Timer Objects and DPCs를 참조



요약하면, 인터럽트를 처리 하는 루틴들이 진행되는 동안 다른 인터럽트가 발생하는 경우에 문제가 생김.

우선순위가 낮고, 나중에 실행되어야 할 루틴들의 경우에는 무시 되면 안된다. 그렇기 때문에 큐처럼 관리한다.

리눅스에서의 work queue 와 tasklet과 유사한듯 하다.





LIST

'reversing > Windows Driver' 카테고리의 다른 글

[Device Stack] 디바이스 스택  (0) 2017.07.25
MDL(Memory Descriptor List)  (0) 2017.07.21
[PAE] Linear Address to Physical Address  (0) 2016.12.04
PAGED_CODE()  (0) 2016.10.11
DRIVER OBJECT 구조체  (0) 2016.08.11