Kernel mode/BugCheck2014. 5. 16. 15:45


*******************************************************************************

*                                                                             *

*                        Bugcheck Analysis                                    *

*                                                                             *

*******************************************************************************


NO_MORE_SYSTEM_PTES (3f)

No System PTEs left.  Usually caused by a driver not cleaning up

properly.  If kernel debugger available get stack trace and

"!sysptes 3".

Set HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\TrackPtes

to a DWORD 1 value and reboot.  Then the system will save stack traces

so the guilty driver can be identified.  There is no other way to find out

which driver is neglecting to clean up the I/Os.

A bugcheck DRIVER_USED_EXCESSIVE_PTES will then occur if the system runs out of

PTEs again and the offending driver's name will be printed.

Arguments:

Arg1: 00000000, PTE Type (0 - system expansion, 1 nonpaged pool expansion)

Arg2: 00001000, Requested size

Arg3: 0000961b, Total free system PTEs

Arg4: 00000000, Total system PTEs



System PTE 부족으로 인해 발생.


드라이버를 이용하여 VirtualQuery와 ReadProcessMemory 기능을 구현하였는데,

유저모드에서 프로세스 검사를 하면서 너무 많은 VIrtualQuery와 ReadPRocessMemory를 호출.

해당 에러 발생시 ReadProcessMemory 기능을 사용하기 위하여 유저 버퍼를 공유하기 위하여 MDL을 사용하는중이었으며,

0x01000000 크기의 버퍼사용.


정확한 확인을 위해서는 위에 있는대로 레지스트리 수정 후 !sysptes 명령어를 이용하여 확인.


결국 구조 변경 ㅋ



[참조]

http://maystyle.tistory.com/523

http://driveronline.org/bbs/view.asp?tb=systembbs&no=87

Posted by hswang