Hey Adam,
For each of the objects (o1 and o2) can you paste the output from the
following commands (ignore the addresses in my examples):
[CType head] @ 0xBCA30658
0x0   : h                              3164800744
0x4   : cLockObj                       0
0x8   : pti                            0
0xc   : rpdesk                         0
0x10  : pSelf                          0
bca306e8
0002002e
Also, what context are you in when running the commands? By that I mean,
what is the value of proc() when you're doing
proc().get_process_address_space()?
MHL
On 5/7/16 9:02 AM, Bridgey theGeek wrote:
  Hi all,
 Doing some work with the windows plugin for VistaSP1x86.
 I have the following two fragments from the output:
 Window Handle: #20130 at 0xfe817078, Name:
 ClassAtom: 0xc052, Class: ConsoleProgmanHandle
 SuperClassAtom: 0xc018, SuperClass: Edit
 pti: 0xfde11e90, Tid: 3432 at 0x839714e0
 ppi: 0xff54be50, Process: explorer.exe, Pid: 2528
 Visible: Yes
 Left: 82, Top: 456, Bottom: 379, Right: 473
 Style Flags: WS_CHILD,WS_OVERLAPPED,WS_VISIBLE
 ExStyle Flags: WS_EX_LTRREADING,WS_EX_RIGHTSCROLLBAR,WS_EX_LEFT
 Window procedure: 0x7520d0d4
 Window Handle: #100bc at 0xfe807390, Name:
 ClassAtom: 0xc052, Class: ConsoleProgmanHandle
 SuperClassAtom: 0xc018, SuperClass: Edit
 pti: 0xfe44d660, Tid: 2552 at 0x837c8778
 ppi: 0xff54be50, Process: explorer.exe, Pid: 2528
 Visible: No
 Left: 11, Top: 542, Bottom: 229, Right: 559
 Style Flags: WS_CHILD,WS_OVERLAPPED
 ExStyle Flags:
 WS_EX_CLIENTEDGE,WS_EX_LTRREADING,WS_EX_RIGHTSCROLLBAR,WS_EX_LEFT
 Window procedure: 0x751f01c6
 Both are from the same instance of explorer.exe.
 Viewing windows.py, it shows that the "Window Handle" is simply the
 value of: wnd.head.h
 Now consider this from volshell:
 >> o1 = obj.Object('tagWND',
offset=0xfe817078, 
 vm=proc().get_process_address_space())
 >> dd(o1.head.h, length=4) 
 fe8172a0
00020130
 This seems logical: head.h is a void pointer. If we follow the pointer
 we get the handle: 20130.
 If I do the same with the other one:
 >> o2 = obj.Object('tagWND',
offset=0xfe807390, 
 vm=proc().get_process_address_space())
 >> dd(o2.head.h, length=4) 
 000100bc
00000000
 In this example, the handle is the VALUE of head.h, that is, you
 shouldn't follow the pointer.
 Volatility seems to know this because it displays the handles as 100bc
 rather than 0.
 I searched the Volatility code to see if I could find how this is being
 done, but I couldn't.
 So, how?? What rule don't I know??
 Thanks!
 _______________________________________________
 Vol-users mailing list
 Vol-users(a)volatilityfoundation.org
 
http://lists.volatilityfoundation.org/mailman/listinfo/vol-users