[go: up one dir, main page]

Menu

[r79]: / poolutil.py  Maximize  Restore  History

Download this file

61 lines (55 with data), 1.9 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/env python
from struct import unpack
POOL_SIZE_MASK = 0x01FF
POOL_TYPE_MASK = 0xFE00
# info based on _POOL_HEADER info from XPSP2
# Some details differ on Win2K SP4--don't trust this entirely.
class PoolHeader:
types = {
"FreedPool": 0,
"NonPagedPool": 1,
"PagedPool": 2,
"NonPagedPoolMustSucceed": 3,
"DontUseThisType": 4,
"NonPagedPoolCacheAligned": 5,
"PagedPoolCacheAligned": 6,
"NonPagedPoolCacheAlignedMustS": 7,
"MaxPoolType": 8,
"NonPagedPoolSession": 33,
"PagedPoolSession": 34,
"NonPagedPoolMustSucceedSession": 35,
"DontUseThisTypeSession": 36,
"NonPagedPoolCacheAlignedSession": 37,
"PagedPoolCacheAlignedSession": 38,
"NonPagedPoolCacheAlignedMustSSession": 39
}
names = {
0: "FreedPool",
1: "NonPagedPool",
2: "PagedPool",
3: "NonPagedPoolMustSucceed",
4: "DontUseThisType",
5: "NonPagedPoolCacheAligned",
6: "PagedPoolCacheAligned",
7: "NonPagedPoolCacheAlignedMustS",
8: "MaxPoolType",
33: "NonPagedPool",
34: "PagedPoolSession",
35: "NonPagedPoolMustSucceedSession",
36: "DontUseThisTypeSession",
37: "NonPagedPoolCacheAlignedSession",
38: "PagedPoolCacheAlignedSession",
39: "NonPagedPoolCacheAlignedMustSSession",
}
def __init__(self, str):
(prev, cur, tag) = unpack("<HH4s", str)
self.tag = tag
self.prev_size = (prev & POOL_SIZE_MASK) * 8 # Should be 32 on Win2k
self.cur_size = (cur & POOL_SIZE_MASK) * 8 # Should be 32 on Win2k
self.index = (prev & POOL_TYPE_MASK) >> 9
self.type = (cur & POOL_TYPE_MASK) >> 9
def getType(self):
return self.type
def getTypeStr(self):
try: return self.names[self.type]
except KeyError: return "UnknownType"