류짱:Beyond MySelf

Pool Tag(풀 태그)란 무엇인가? 본문

Microsoft/Windows Platform

Pool Tag(풀 태그)란 무엇인가?

リュちゃん 2010. 12. 3. 14:16

아래 정리한 글은 Ask the Performance Team 블로그에 기재 된 An Introduction to Pool Tags의 내용을 참고하여 작성 하였습니다.
원문을 보시려면 아래 사이트를 참고 하시기 바랍니다.
https://blogs.technet.com/b/askperf/archive/2008/04/11/an-introduction-to-pool-tags.aspx

Pool Tag(풀 태그)란 무엇인가?

Pool Tag는 4byte 문자로 하나의 드라이버가 Pool memory 공간에 동적으로 메모리를 할당 받을 때 ExAllocatedPoolWithTag 루틴이 사용 되는데 이때 명시 되어지는 것으로 쉽게 얘기하자면 Pool Memory를 사용하는 드라이버들의 이름을 구분 하기 위한 별칭이다.

위 루틴이 사용 될 때 명시 되는 세 가지 파라미터가 있습니다.

PoolType : 할당 할 Pool 메모리 Type 지정(Paged Pool or NonPaged Pool)
Number of Bytes: 얼마 만큼의 메모리를 할당 할 것인지
Tag: 위에서 설명한 4bytes 케릭터 PoolTag (할당 된 메모리를 사용할 driver의 별칭).
       하나의 드라이버가 메모리 할당을 요청 할 때 "Fred"라는 Tag를 사용 하면  실제 pool dump에서
       는 "derF"로 나타난다.

PoolTag 의 중요한 점은 반드시 유일한 문자이어야 한다는 것이다. 즉 tag 이름이 중복 되지 않아야 한다는 것이다.
사이즈가 작은 driver는 하나의 PooTag를 사용 하지만 큰 Drivers는 여러 개의 driver를 가지기도 한다.
그럼 어떤 드라이브가 어떤 Tag를 사용하는지는 어떻게 확인 할 수 있을 까?

첫번째로 Debugging tools for windows 를 설치 하면 생성 되는  pooltag.txt라는 파일을 통해서 확인 할 수 있고

두번째로는 위 pool.txt 에 해당 Tag가 없다면 명령 프롬프트에서 findstr /m /l <tag> *.sys 명령어를 사용하여 찾을 수 있다.
위 명령어 실행은 %systemroot%\system32\drivers 폴더에서 실행하면 된다.
예) 
findstr /m /l File *.sys

Windows에서 제공하는 "File"이라는 tag는 많은 driver들이 사용하고 있음을 확인 할 수 있다.

[
참고 자료]
How to find pool tags that are used by third-party drivers

http://support.microsoft.com/kb/298102

Who's Using the pool?
http://msdn.microsoft.com/en-us/windows/hardware/gg463213.aspx

How to use Memory Pool Monitor (Poolmon.exe) to troubleshoot kernel mode memory leaks
메모리 풀 모니터(Poolmon.exe)를 사용하여 커널 모드 메모리 누수 문제를 해결하는 방법
http://support.microsoft.com/kb/177415/ko

감사합니다.^^