[go: up one dir, main page]

Menu

[r34]: / from_work / poolutil.py  Maximize  Restore  History

Download this file

59 lines (53 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
#!/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 = {
"NonPagedPool": 0,
"PagedPool": 1,
"NonPagedPoolMustSucceed": 2,
"DontUseThisType": 3,
"NonPagedPoolCacheAligned": 4,
"PagedPoolCacheAligned": 5,
"NonPagedPoolCacheAlignedMustS": 6,
"MaxPoolType": 7,
"NonPagedPoolSession": 32,
"PagedPoolSession": 33,
"NonPagedPoolMustSucceedSession": 34,
"DontUseThisTypeSession": 35,
"NonPagedPoolCacheAlignedSession": 36,
"PagedPoolCacheAlignedSession": 37,
"NonPagedPoolCacheAlignedMustSSession": 38
}
names = {
0: "NonPagedPool",
1: "PagedPool",
2: "NonPagedPoolMustSucceed",
3: "DontUseThisType",
4: "NonPagedPoolCacheAligned",
5: "PagedPoolCacheAligned",
6: "NonPagedPoolCacheAlignedMustS",
7: "MaxPoolType",
32: "NonPagedPool",
33: "PagedPoolSession",
34: "NonPagedPoolMustSucceedSession",
35: "DontUseThisTypeSession",
36: "NonPagedPoolCacheAlignedSession",
37: "PagedPoolCacheAlignedSession",
38: "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"