'''OBJREF''' is the name of the structure of marshalled interfaces in COM and DCOM. Because COM interfaces can only be called directly from the context (like a thread, process or machine) where they originated, when they are needed in another context they are marshalled in this structure, which is then passed to the destination context where it is unmarshalled to a proxy that takes care of the necessary communication, for example passing messages or network packets or marshalling other interfaces passed in calls.<ref>{{cite web |url=http://www.informit.com/articles/article.aspx?p=167771&rll=1 |title=The Mechanics of COM+ |access-date=2008-09-07 |author=Tim Ewald |date=2001-03-06 |work=Informit |publisher=Pearson Education & Addison-Wesley Professional }}</ref><ref>{{cite web |url=http://www.winehq.org/pipermail/wine-devel/2005-January/033082.html |title=More DCOM notes |access-date=2008-09-07 |author=Mike Hearn |date=2005-01-22 |work=Wine Developer's List |publisher=Codeweavers }}</ref>
==Format== The layout of the structure is as follows:<ref>{{cite web |url=http://source.winehq.org/source//dlls/ole32/dcom.idl#L133 |title=dcom.idl |access-date=2008-09-06 |year=2003 |work=Wine |publisher=CodeWeavers }}</ref><ref>{{cite web |url=http://members.tripod.com/IUnknwn/showme.htm |title=ShowMeMyOBJREF |access-date=2008-09-07 |author=Dharma Shukla |year=1998 }} (This is example code to inspect the contents of an OBJREF.)</ref> {| class="wikitable" !Offset!!Size!!Description |- |0||4||Signature: 'MEOW' |- |4||4||Flag indicating the kind of structure |- |8||16||Interface identifier |- |colspan=3|Flag = 1: standard |- |24||4||Flags, mostly reserved for the system, but can be used to turn off pinging objects.<ref>{{cite web |url=http://www.microsoft.com/msj/0398/dcom.aspx |title=Understanding the DCOM Wire Protocol by Analyzing Network Data Packets |access-date=2008-09-07 |last=Eddon |first=Guy |author2=Eddon, Henry |date=March 1998 |work=Microsoft Systems Journal |publisher=Microsoft }}</ref> |- |28||4||Reference count |- |32||8||OXID – object exporter identifier<ref name=MSDN-O>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc232137.aspx |title=Windows Protocols Master Glossary: O |access-date=2008-09-06 |work=MSDN |publisher=Microsoft |quote=object exporter identifier (OXID): A 64-bit number that uniquely identifies an '''object exporter''' within an object server. … object identifier (OID): (1) In the context of an object server, a 64-bit number that uniquely identifies an object. }}</ref> |- |40||8||OID – object identifier<ref name=MSDN-O /> |- |48||16||IPID – interface pointer identifier<ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc232132.aspx |title=Windows Protocols Master Glossary: I |access-date=2008-09-06 |work=MSDN |publisher=Microsoft |quote=interface pointer identifier (IPID): A 128-bit number that uniquely identifies an interface on an object within an object exporter. }}</ref> |- |64||variable||DUALSTRINGARRAY |- |colspan=3|Flag = 2: handler (an extension of standard)<ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc226833.aspx |title=OBJREF_HANDLER |access-date=2008-09-06 |work=MSDN |publisher=Microsoft }}</ref> |- |64||16||Class identifier of a class that will be used as a handler for the interface, i.e. sit between the client and the proxy. |- |80||variable||DUALSTRINGARRAY |- |colspan=3|Flag = 4: custom marshalling<ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc226834.aspx |title=OBJREF_CUSTOM |access-date=2008-09-07 |work=MSDN |publisher=Microsoft }}</ref> |- |24||16||Class identifier of the custom proxy |- |40||4||0 (reserved value) |- |44||4||Size of the data below |- |48||variable||Custom marshalling data |- |colspan=3|Flag = 8: extended (also an extension of standard)<ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc226835.aspx |title=OBJREF_EXTENDED |access-date=2008-09-06 |work=MSDN |publisher=Microsoft }}</ref> |- |64||4||Signature 'VYSN' |- |68||variable||DUALSTRINGARRAY |- | ||4||1 (historically the number of data elements below, but there always is only a single element) |- | ||4||Signature 'VYSN' |- |colspan=3|<small>Data element used to identify and marshal an envoy context:<ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc225397.aspx |title=Context Properties |access-date=2008-09-07 |work=MSDN |publisher=Microsoft }}</ref><ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc225402.aspx |title=Context Properties and Marshaling |access-date=2008-09-07 |work=MSDN |publisher=Microsoft }}</ref><ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc232153.aspx |title=Windows Protocols Master Glossary: E |access-date=2008-09-07 |work=MSDN |publisher=Microsoft |quote=envoy context: A context that is marshaled and returned to a client as a result of obtaining an object reference. }}</ref></small> |- | ||16||Context identifier<ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc232151.aspx |title=Windows Protocols Master Glossary: C |access-date=2008-09-07 |work=MSDN |publisher=Microsoft |quote=context: A collection of context properties that describe an execution environment. ''sqq.'' }}</ref> |- | ||4||Size of the data below, excluding padding |- | ||4||Size of the data below, including padding |- | ||8n||A marshalled envoy context, padded to a multiple of eight bytes |} The layout of DUALSTRINGARRAY is:<ref>{{cite web |url=http://msdn.microsoft.com/en-us/library/cc226837.aspx |title=DUALSTRINGARRAY |access-date=2008-09-06 |work=MSDN |publisher=Microsoft }}</ref><ref>{{cite book |last=Eddon |first=Guy |author2=Eddon, Henry |editor=Stroo, Eric |editor2=Turner, Alice |editor3=Young, Marc |editor4=Chang, Ina |title=Inside COM+ Base Services |year=1999 |publisher=Microsoft Press |location=Redmond |isbn=0-7356-0728-1 |chapter=Marshaled Interface Pointers }}</ref> {| class="wikitable" !Offset!!Size!!Description |- |0||2||Total number of entries in the arrays below, including nulls |- |2||2||Number of entries in the array that represent string bindings |- |4||2n||String and security bindings |} The string bindings are null-terminated records specifying connection information, like IP addresses, and the security bindings are null-terminated records specifying authentication information. Both arrays are null-terminated too.
==References== <references />
Category:Component-based software engineering
{{windows-stub}}