Previous | Table of Contents | Next |
The technique used for COM chain bypass is very similar to the technique used in CORBA. The only difference is the result
of the fact that DCOM extents are not propagated into subsequent calls unlike CORBA service contexts.
struct ResolvedRef
{IResolver resolver;ObjectSystemID objSysID;unsigned long chainDataFormat;BYTE chainDataVersion;OpaqueData chainData;
OpaqueRef reference;};
struct ResolvableRefChain
{unsigned long len;unsigned long maxlen;ResolvableRef [size_is(len,)]**data;
};
struct ChainBypassCheck // Outgoing extent body{};
struct ChainBypassInfo // Reply extent body
{ResolvableRefChain chain;
};
The ChainBypassCheck extent is sent out with the first outgoing request. If a reply extent, ChainBypassInfo, is received with
the reply message, then a view has been detected. The information in the ResolvedRefChain can be used to bypass intermediate
views. Each ResolvedRef is identical to a ResolvableRef except that it also contains the result of the resolution -- the reference
member contains the data that would be returned if Resolve were called on the included resolver. If the reference field of
ResolvedRef is an empty sequence, then the marshaled object reference is assumed to be identical to the chainData.
The UUID for the request and reply extents are both:
1eba96a0-20b1-11d1-8a22-006097cc044d