VB Decompiler Forum Index VB Decompiler
Hosted by TheAutomaters.com
 
  MemberlistMemberlist
 

OptionalObjectInfo
Goto page 1, 2  Next
 
   VB Decompiler Forum Index -> Structures
Author Message
MrUnleaded
Site Admin


Joined: 21 Sep 2002
Posts: 385
Location: California

Posted: Tue Oct 01, 2002 5:48 pm     Post subject: OptionalObjectInfo

Parents:
Object Header

[vb:1ec62ddh]
  1. Type OptionalObjectInfo 'If ((ObjectHeader.lObjectType AND &H2) = &H2)
  2.   lguidObjectGUICount    As Long    '0x00 (00d) Number of ObjectGUI GUIDs (2 for Designer)
  3.   aObjectCLSID           As Long    '0x04 (04d) Pointer to object CLSID
  4.   lNull1                 As Long    '0x08 (08d)
  5.   aguidObjectGUITable    As Long    '0x0C (12d) Pointer to pointers of guidObjectGUI
  6.   lObjectDefaultIIDCount As Long    '0x10 (16d) Number of DefaultIID's
  7.   aObjectEventsIIDTable  As Long    '0x14 (20d) Pointer to pointers of EventsIID
  8.   lObjectEventsIIDCount  As Long    '0x18 (24d) Number of EventsIID's
  9.   aObjectDefaultIIDTable As Long    '0x1C (28d) Pointer to pointers of DefaultIID
  10.   lControlCount          As Long    '0x20 (32d) Number of controls
  11.   aControlArray          As Long    '0x24 (36d) Pointer to an array of Controls
  12.   iMethodLinkCount       As Integer '0x28 (40d) Number of Method Links
  13.   iPCodeCount            As Integer '0x2A (42d) Number of OpCodes used
  14.   oInitializeEvent       As Integer '0x2C (44d) Offset to Initialize Event from aMethodLinkTable
  15.   oTerminateEvent        As Integer '0x2E (46d) Offset to Terminate Event from aMethodLinkTable
  16.   aMethodLinkTable       As Long    '0x30 (48d) Pointer to pointers of MethodLink
  17.   aBasicClassObject      As Long    '0x34 (52d) Pointer to an in-memory structure
  18.   lNull2                 As Long    '0x38 (56d)
  19.   lFlag1                 As Long    '0x3C (60d)
  20.                                     '0x40 (64d) <-- Structure size
  21. End Type
[/vb:1ec62ddh]

Notes:
* lNull1 and lNull2 are never written/readed by the compiler/runtime.
* lFlag1 is a temporary value only used in the IDE.
* guidObjectGUI is the same for all class modules. Since they don't have a real GUI, Visual Basic puts some general GUID for them.
* aMethodLinkTable includes: Event, Sub, Function, Property Get and Property Let; it doesn't include Declare Sub and Declare Function (API Imports).

* Why is there an array of DefaultIID and EventsIID?
-> Visual Basic saves previous IID's to keep binary compatibility between builds, so the most recent one is the one at index 0, and the other ones are there just in case there is some older project that uses a previous version of this object.

Pointers:
Control Array -> Control
aMethodLinkTable -> Method Link


Last edited by MrUnleaded on Mon Aug 02, 2004 6:09 pm; edited 6 times in total
Back to top
_aLfa_
Site Admin


Joined: 21 Sep 2002
Posts: 233
Location: Aveiro, Portugal

Posted: Tue Oct 01, 2002 9:30 pm     Post subject:

changed the name of Const1 (i verified that in all projects ive tested, but if any1 disagrees, plz tell me)

changed the name of ControlsAdress to aControlsTable
_________________
One thing only I know, and that is that I know nothing. (Socrates)
Back to top
MrUnleaded
Site Admin


Joined: 21 Sep 2002
Posts: 385
Location: California

Posted: Wed Oct 02, 2002 2:51 pm     Post subject: ok

[="_aLfa_":1sct6csu]changed the name of Const1 (i verified that in all projects ive tested, but if any1 disagrees, plz tell me)[/:1sct6csu]

ok...what do you mean by Form Designer??

[="_aLfa_":1sct6csu]changed the name of ControlsAdress to aControlsTable[/:1sct6csu]

the only reason i put ControlsAddress is because it implys several controls....while ControlTable impies another structure that has to do with Controls......
_________________
-MrU
Back to top
_aLfa_
Site Admin


Joined: 21 Sep 2002
Posts: 233
Location: Aveiro, Portugal

Posted: Wed Oct 02, 2002 7:05 pm     Post subject:

that Form_Designer is self explained
if that value =2 then its a designer, else it is a form or usercontrol or propertypage

hope u understand...
_________________
One thing only I know, and that is that I know nothing. (Socrates)
Back to top
Anonymous
New User


Joined: 10 Feb 2008
Posts: 0

Posted: Thu Oct 03, 2002 10:30 am     Post subject:

I cant see why a form designer would have a special flag for itself though...
Back to top
MrUnleaded
Site Admin


Joined: 21 Sep 2002
Posts: 385
Location: California

Posted: Thu Oct 03, 2002 2:50 pm     Post subject:

[="moogman":40bl50f7]I cant see why a form designer would have a special flag for itself though...[/:40bl50f7]

aLfa was saying that he thinks Form_Designer is part of the ObjectInfo...


i thought it was a constant.....but i never thought about Designers....i havent had time to check this out...


he was saying that this is a more direct indicator to the Presence of the OptionalObjectInfo....1=form;2=designer;im not sure on the other values;i believe he said forms are 0....im not sure.....
Back to top
_aLfa_
Site Admin


Joined: 21 Sep 2002
Posts: 233
Location: Aveiro, Portugal

Posted: Thu Oct 03, 2002 5:58 pm     Post subject:

possible values i found:
0=module, class (things without optional objectinfo)
1=form, usercontrol, propertypage
2=activex designer like "datadynamics activereports" or "vb6 active components"
(both 1 and 2 ve optional objectinfo)

i would any1 to test this more deeply, though...
ive only made a few tests on vb5/6

_________________
One thing only I know, and that is that I know nothing. (Socrates)
Back to top
sarge
Moderator


Joined: 24 Sep 2002
Posts: 194

Posted: Sun Oct 13, 2002 9:30 pm     Post subject:

Under "OptionalObjectInfo":

Address5 As Long ' 0x30

if non-zero, points to event procedures block for the control events for their particular parent form. This event procedures block includes pointers to GUI blocks (which in turn contain pointers to the GUI data), as well as pointers to the control events.

Don't know what you want to call it, tho.

sarge
Back to top
MrUnleaded
Site Admin


Joined: 21 Sep 2002
Posts: 385
Location: California

Posted: Mon Oct 14, 2002 5:00 pm     Post subject:

[="sarge":3ifa7eob]Under "OptionalObjectInfo":

Address5 As Long ' 0x30

...

Don't know what you want to call it, tho.

sarge[/:3ifa7eob]

i havent explored this area yet....it looks somewhat familiar though...im not sure why...

perhaps you could elaborate on the "control events" that this points to.....as i have found another way to find the control events and the events dont match up....
_________________
-MrU
Back to top
sarge
Moderator


Joined: 24 Sep 2002
Posts: 194

Posted: Mon Oct 14, 2002 7:01 pm     Post subject:

Note: This post was edited after posting! (So if you've already read it, read it again?)

Quickie caveat first:
I assuming that offset 0x30 of the OptionalObjectInfo, when it exists and is appended to the ObjectInfo, is equivalent to offset 0x68; at least, it works that way.

The EventBlock that this points to is the first of a series of EventBlocks that may exist (1 for the form; 1 each for each control), therefore, their quantity is not fixed.

In each EventBlock is a pointer to the GUILinkBlock; the GUILinkBlock is contains various addresses, offsets, and references to the appropriate data in the GUI code. By this, I mean that each EventBlock points to its own GUILinkBLock and that each GUILinkBlock points to a control/form in the GUI code. Obviously, each Eventblock representing a set of events for a given control, points to a GUILinkBlock that is also representing that same given control, which points to the GUI code of that control. In concept, these three items are a "married trio".

Each EventBlock also contains the address of its parent, the addresses of each possible event for that control (some will be NULL if the event has no code in it), and various other reference data including a pointer to the event code, and even a flag for the code type (PCODE or NATIVE). Since different controls have a different number of events, the size of the EventBlock will vary.

Thus, there is a variable quantity of EventBlocks, which in turn are of varying size, and which will require a varying number of GUILinkBlocks and a varying number of code pointers.

As a side thought, since the data in the GUILinkBlock needs to reference the data in the GUI code, should the structures of the GUI code be defined first? Otherwise, the data in the GUILinkBlock may not make sense. (It would seem to me that, since both the event code and the GUI code are the "parents" of the GUILinks, that both parents should be defined first.) Yes? No? Other thoughts?

sarge
Back to top
sarge
Moderator


Joined: 24 Sep 2002
Posts: 194

Posted: Tue Oct 15, 2002 1:08 pm     Post subject: After-thought

Moderators:

Should the last couple of posts maybe be moved to the "Interface/GUI-vs_Events" thread?

Sarge
Back to top
Anonymous
New User


Joined: 10 Feb 2008
Posts: 0

Posted: Wed Oct 16, 2002 1:18 pm     Post subject:

[="sarge":2j3oqpb7]Note: This post was edited after posting! (So if you've already read it, read it again?)

Quickie caveat first:
I assuming that offset 0x30 of the OptionalObjectInfo, when it exists and is appended to the ObjectInfo, is equivalent to offset 0x68; at least, it works that way.
[/:2j3oqpb7]

Quick answer:
Yes

Sorry, i'vent read any more of your text as of yet, since it looks complicated
Back to top
MrUnleaded
Site Admin


Joined: 21 Sep 2002
Posts: 385
Location: California

Posted: Wed Dec 04, 2002 4:02 pm     Post subject: minor change

i havent finished looking over this struct but i changed the size due to an overlap that i found after implementing stuff that i forgot to implement hehe

anyways i just trimmed the size by 4 bytes making the length 0x44 bytes
_________________
-MrU
Back to top
MrUnleaded
Site Admin


Joined: 21 Sep 2002
Posts: 385
Location: California

Posted: Fri Dec 13, 2002 7:41 am     Post subject: Re: OptionalObjectInfo

Ok i updated this struct....i removed the two aGUID as Longs at the end since i found overlap here....ie the size is no more then 0x40....

i also changed Address5 to aEventLinkArray

it is an array to the Active Events
_________________
-MrU
Back to top
sarge
Moderator


Joined: 24 Sep 2002
Posts: 194

Posted: Sat Dec 14, 2002 1:45 pm     Post subject:

HA! So does that mean tha "address6" now needs to be renamed to "address5"...so you won't have a gap? Wow! Blatant error :)

Sarge
Back to top
MrUnleaded
Site Admin


Joined: 21 Sep 2002
Posts: 385
Location: California

Posted: Sat Dec 14, 2002 6:21 pm     Post subject:

[="sarge":2tm3lcwo]HA! So does that mean tha "address6" now needs to be renamed to "address5"...so you won't have a gap? Wow! Blatant error

Sarge[/:2tm3lcwo]

thats alright...either way its an unknown addresss
_________________
-MrU
Back to top
sarge
Moderator


Joined: 24 Sep 2002
Posts: 194

Posted: Sat Dec 14, 2002 7:51 pm     Post subject:

True...

Now, if only that was ALL that was unknown, we'd be in real good shape!


And...thanks for adding the easier opcode access.

Sarge
Back to top
_aLfa_
Site Admin


Joined: 21 Sep 2002
Posts: 233
Location: Aveiro, Portugal

Posted: Mon Aug 02, 2004 6:04 pm     Post subject:

I've changed the name of Const1 to Flag1 because this definitively isn't a constant
_________________
One thing only I know, and that is that I know nothing. (Socrates)
Back to top
_aLfa_
Site Admin


Joined: 21 Sep 2002
Posts: 233
Location: Aveiro, Portugal

Posted: Sun Aug 29, 2004 2:24 pm     Post subject:

Another minor update.
_________________
One thing only I know, and that is that I know nothing. (Socrates)
Back to top
_aLfa_
Site Admin


Joined: 21 Sep 2002
Posts: 233
Location: Aveiro, Portugal

Posted: Tue Aug 31, 2004 5:25 pm     Post subject:

I think I found the meaning to all OptionalObjectInfo unknown Address's, with some help from Alexandru for the in-memory one
Now your are able to get Event Names for in-project controls
_________________
One thing only I know, and that is that I know nothing. (Socrates)
Back to top
MrUnleaded
Site Admin


Joined: 21 Sep 2002
Posts: 385
Location: California

Posted: Tue Aug 31, 2004 5:50 pm     Post subject:

Very nice work
_________________
-MrU
Back to top
vbgamer45
Regular user


Joined: 07 Jul 2004
Posts: 93
Location: 127.0.0.1

Posted: Tue Aug 31, 2004 7:03 pm     Post subject:

Bah, you used .Net datatypes again _aLfa_!
Back to top
_aLfa_
Site Admin


Joined: 21 Sep 2002
Posts: 233
Location: Aveiro, Portugal

Posted: Tue Aug 31, 2004 7:43 pm     Post subject:

woops
It's fixed now
_________________
One thing only I know, and that is that I know nothing. (Socrates)
Back to top
MrUnleaded
Site Admin


Joined: 21 Sep 2002
Posts: 385
Location: California

Posted: Tue Aug 31, 2004 7:50 pm     Post subject:

if you want to make it really confusing(from a vb5/6 programmer)..... in .net

Short is 16 bit
Integer is 32 bit
and Long is 64 bit
_________________
-MrU
Back to top
_aLfa_
Site Admin


Joined: 21 Sep 2002
Posts: 233
Location: Aveiro, Portugal

Posted: Tue Aug 31, 2004 11:00 pm     Post subject:

Another small fix related to guidObjectGUI

Will this stop....
_________________
One thing only I know, and that is that I know nothing. (Socrates)
Back to top
   VB Decompiler Forum Index -> Structures All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
You can post new topics in this forum
You can reply to topics in this forum
You can edit your posts in this forum
You can delete your posts in this forum
You can vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group