| Author | Message | 
	
		| _aLfa_ Site Admin
 
 
 Joined: 21 Sep 2002
 Posts: 233
 Location: Aveiro, Portugal
 
 | 
				
					| Posted: Mon Aug 23, 2004 5:07 pm
							    Post subject: Designer Info |  
					| 
 |  
					| Parents: COM Registration Info
 
 
  	  | Code: |  	  | Type DesignerInfo uuidDesigner(15)       As Byte    '0x00 (00d)                           CLSID of the Addin/Designer
 lStructSize            As Long    '0x10 (16d)                           Total Size of the next fields
 
 sAddinRegKey           As bStr  '0x14 (20d)                           Registry Key of the Addin
 
 sAddinName             As bStr  '0x16 (22d) + iSizeAddinRegKey        Friendly Name of the Addin
 
 sAddinDescription      As bStr  '0x18 (24d) + iSizeAddinRegKey _
 + iSizeAddinName          Description of Addin
 
 lLoadBehaviour         As Long    '0x1A (26d) + iSizeAddinRegKey _
 + iSizeAddinName _
 + iSizeAddinDescription   CLSID of Object
 
 sSatelliteDLL          As bStr  '0x1E (30d) + iSizeAddinRegKey _
 + iSizeAddinName _
 + iSizeAddinDescription   SatelliteDLL, if specified
 
 sAdditionalRegKey      As bStr  '0x20 (32d) + iSizeAddinRegKey _
 + iSizeAddinName _
 + iSizeAddinDescription _
 + iSizeSatteliteDLL       Extra Registry Key, if specified
 
 lCommandLineSafe       As Long    '0x22 (34d) + iSizeAddinRegKey _
 + iSizeAddinName _
 + iSizeAddinDescription _
 + iSizeSatteliteDLL _
 + iSizeAdditionalRegKey   Specifies a GUI-less Addin if 1
 '0x14 + lStructSize  <-- Structure Size
 End Type
 
 Type bStr
 Size  As Integer
 Str   As String * Size
 End Type
 | 
 
 Notes:
 This structure is an extension to the COM Registration Info structure  if COMRegInfo.fIsDesigner <> 0 (Designer)
 
 Greetings to Alexandru Ionescu for decoding this structure
 
 Last edited by _aLfa_ on Wed Aug 25, 2004 12:07 pm; edited 2 times in total
 |  | 
	
		| Back to top |  | 
	
		|  |  | 
	
		| MrUnleaded Site Admin
 
 
 Joined: 21 Sep 2002
 Posts: 385
 Location: California
 
 | 
				
					| Posted: Mon Aug 23, 2004 5:23 pm
							    Post subject: |  
					| 
 |  
					| By augmentation.....do you mean it goes afterwards? similar to OptionalObjectInfo? 
 Also....is there another way we can do this struct....because it looks awfully confusing... as there is overlapping section(i assume based on the type of the struct.) and if it is based on the type of struct...perhaps several structs or even an appending struct should be made?
 
 Thoughts?
 _________________
 -MrU
 |  | 
	
		| Back to top |  | 
	
		|  |  | 
	
		| ionescu007 Sometimes here
 
 
 Joined: 21 Aug 2004
 Posts: 33
 
 
 | 
				
					| Posted: Tue Aug 24, 2004 4:43 am
							    Post subject: |  
					| 
 |  
					| Unforunately, because of the dumb-headness of VB, variable UDTs don't really work out nicely. The whole idea is to treat the structure stable only until the first bstr, whose first long is the size of the upcoming string. Everything past that is variable and the best would be to use a dynamic array. Worse, you can't know in advance which strings are present or not, since you must actually read their size, and skip if 0. 
 This is sadly a limitation of VB
 
 Best regards,
 Alex Ionescu
 |  | 
	
		| Back to top |  | 
	
		|  |  | 
	
		| Dr Memory Expert
 
 
 Joined: 16 Aug 2004
 Posts: 147
 Location: Surrey, UK
 
 | 
				
					| Posted: Tue Aug 24, 2004 6:46 am
							    Post subject: Dynamic UDT's |  
					| 
 |  
					| VB6's reluctance to let you use a UDT that way has been a source of grief for many people over the past decade, that's for sure! 
 
 It is, however, just that -  reluctance, not a limitation.  It's perfectly capable of doing it for you, but making it available would require acknowledgement that it opens the door to open-slather pointer operations, making it all too easy for the average VB Joe in the street to  screw his application
 
 Like "can't build normal dll's", and several other famous problems, mythical beasts, the ability to apply an arbitrary UDT mapping to an address of your choosing is not so hard....
 
 Have you never "rolled your own"???
 
 
 Dynamic array, I mean, not a spliff!              :chuckle:
 
 
 You CAN have your cake (access Fred.Member.SubMember), and eat it too (set Fred.Address yourself).   I do it all the time!
 |  | 
	
		| Back to top |  | 
	
		|  |  | 
	
		| ionescu007 Sometimes here
 
 
 Joined: 21 Aug 2004
 Posts: 33
 
 
 | 
				
					| Posted: Tue Aug 24, 2004 10:48 am
							    Post subject: |  
					| 
 |  
					| If you're thinking of doing: 
 UDT Foo
 Bar as Long
 BarString() As String
 Bar2 as Long
 Bat2String() as String
 Bar3 as Long
 etc...
 
 and then manually reading the first long, then copying into the strptr/varptr of the string array, you'll notice that the structure isn't alctually contigous (because of dynamic OLESAFEARRAYS) and if you'll want to read the whole thing at once (in the case of passing it to an API, I know it won't happen here), you'll run into a dead end.
 
 In other news, I've found out the unknown/flag parts of ProjectInfo 2 and will be updating the PDF when I get back from school tonight.
 
 Best regards,
 Alex Ionescu
 |  | 
	
		| Back to top |  | 
	
		|  |  | 
	
		| MrUnleaded Site Admin
 
 
 Joined: 21 Sep 2002
 Posts: 385
 Location: California
 
 | 
				
					| Posted: Tue Aug 24, 2004 3:56 pm
							    Post subject: |  
					| 
 |  
					| Several of the structures here will simply not work when copied and pasted into VB5/6/.Net  but they are all in a format that isnt too confusing to understand. 
 Anyways it looks like it has changed since my last view.
 
 I guess it is just the +iSizeAddinRegKey +iSizeAddinName +... stuff that represents the offset that is confusing me....
 
 Usually for something like this i load up the entire struct into a custom buffer....size equal to lStructSize....and then "pop" off variables....
 
 
  	  | Code: |  	  | Type DesignerInfo
 uuidDesigner(15)       As Byte    '0x00 (00d)                           CLSID of the Addin/Designer
 lStructSize            As Long    '0x10 (16d)                           Total Size of the next fields
 End Type
 
 buffer.Load(cFile,DesignerInfo.lStructSize,Offset)
 
 sAddinRegKey      = buffer.PopString()
 sAddinName        = buffer.PopString()
 sAddinDescription = buffer.PopString()
 lLoadBehaviour    = buffer.PopLong()
 .....
 
 
 | 
 
 This is just me...i dont understand Dr. Memorys way.....i dont usually try to read things from memory or load things into memory....
 _________________
 -MrU
 |  | 
	
		| Back to top |  | 
	
		|  |  | 
	
		| _aLfa_ Site Admin
 
 
 Joined: 21 Sep 2002
 Posts: 233
 Location: Aveiro, Portugal
 
 | 
				
					| Posted: Tue Aug 24, 2004 4:32 pm
							    Post subject: |  
					| 
 |  
					| I use something like that too. And in VB .NET is even easier to do that
 _________________
 One thing only I know, and that is that I know nothing. (Socrates)
 |  | 
	
		| Back to top |  | 
	
		|  |  | 
	
		| Dr Memory Expert
 
 
 Joined: 16 Aug 2004
 Posts: 147
 Location: Surrey, UK
 
 | 
				
					| Posted: Tue Aug 24, 2004 5:51 pm
							    Post subject: |  
					| 
 |  
					| Was that explanation a little too brief? 
 Oops!  Sorry about that!
 
 I'll fix that,  but before I do, can you tell me, what methods are you and/or people here generally using to examine EXE files?
 
 I mean, are you accessing it as a file or as an image?
 
 Cheers
 |  | 
	
		| Back to top |  | 
	
		|  |  | 
	
		| Dr Memory Expert
 
 
 Joined: 16 Aug 2004
 Posts: 147
 Location: Surrey, UK
 
 | 
				
					| Posted: Tue Aug 24, 2004 5:58 pm
							    Post subject: |  
					| 
 |  
					| "something like that in VB.NET" 
 Omygawwd!
 
 
 Don't worry, they'll probably develop a cure soon!
 |  | 
	
		| Back to top |  | 
	
		|  |  | 
	
		|  |  |