SMALL
드라이버를 제작하면서 여기저기 코드를 찾다보면
PAGED_CODE()위와 같은 함수들이 DriverEntry 시작부분에 등록되어 있다.
뭐지 하면서 찾아보았다.
#define PAGED_CODE() { if (KeGetCurrentIrql() > APC_LEVEL) {KdPrint(("EX: Pageable code called at IRQL %d\n", KeGetCurrentIrql()));PAGED_ASSERT(FALSE); } }
보통 메크로 함수로 사용된다고 한다.
현재 IRQL을 확인하고 APC LEVEL보다 높으면 종료하는 코드이다.
*IRQL[Interrupt Request Level]
인터럽트의 우선순위? Level이 현재 코드의 우선순위 보다 높으면 쫓겨나기 때문에? 인거 같다.
만약에 코드를 PAGE 풀 하게 할려면 alloc_text를 사용하는 것 같다.
위와 같이.
추가.
#if (NTDDI_VERSION >= NTDDI_VISTA)
#define PAGED_ASSERT( exp ) NT_ASSERT( exp )
#else
#define PAGED_ASSERT( exp ) ASSERT( exp )
#endif
참고 : http://osronline.com/showThread.CFM?link=195247
LIST
'reversing > Windows Driver' 카테고리의 다른 글
[Device Stack] 디바이스 스택 (0) | 2017.07.25 |
---|---|
MDL(Memory Descriptor List) (0) | 2017.07.21 |
DPC (Deferred Procedure Calls) (0) | 2017.07.20 |
[PAE] Linear Address to Physical Address (0) | 2016.12.04 |
DRIVER OBJECT 구조체 (0) | 2016.08.11 |