GUID clsid; /* Clsid of unmarshaling code */
uint32 cbExtension; /* size of extension data */
uint32 size; /* size of data that follows */
- [size_is(size), ref] uint8 *pData; /* extension + class specific data */
+ [size_is(size)] uint8 pData[]; /* extension + class specific data */
} u_custom;
typedef struct
typedef [public] struct
{
uint32 size;
- [size_is(size)] uint8 data[];
+ [subcontext(4)] OBJREF obj;
} MInterfacePointer;
}
/* Function 0x00 */
/* Returns the interface with the specified IID
if implemented by this object */
- [local] WERROR QueryInterface([in] IID *riid
- /*FIXME, [out] void **data*/);
+ [local] WERROR QueryInterface([in] IID *riid,
+ [out,iid_is(riid)] MInterfacePointer *data);
/*****************/
/* Function 0x01 */
pointer_default(unique)
] interface IClassFactory : IUnknown
{
- [local] WERROR CreateInstance(/*FIXME[in] IUnknown *pUnknown,
+ [local] WERROR CreateInstance(/*FIXME[in] IUnknown *pUnknown*/,
[in] IID *riid,
- [out, iid_is(riid)] void **ppv*/);
+ [out, iid_is(riid)] MInterfacePointer *ppv);
[call_as(CreateInstance)] WERROR RemoteCreateInstance();
[in] uint32 cRefs, /* count of AddRefs requested */
[in] uint16 cIids, /* count of IIDs that follow */
[in, size_is(cIids)] IID* iids, /*, // IIDs to QI for */
- [out] MInterfacePointer *ip
+ [out, size_is(cIids)] MInterfacePointer *ip
);
typedef struct
void RemoteGetClassObject([in] GUID clsid,
[in] uint32 context,
[in] LCID locale,
- [in] GUID iid/*FIXME,
- [out, iid_is(iid)] void *data */);
+ [in] GUID iid,
+ [out, iid_is(iid)] MInterfacePointer data);
}
/* Looks like this is the equivalent of .NET's
struct RemoteActivation r;
NTSTATUS status;
struct GUID iids[2];
- uint16 protseq[2] = { EPM_PROTOCOL_TCP, EPM_PROTOCOL_NCALRPC };
+ uint16 protseq[3] = { EPM_PROTOCOL_TCP, EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_UUID };
ZERO_STRUCT(r.in);
r.in.this.version.MajorVersion = 5;
uuid_generate_random(&r.in.this.cid);
GUID_from_string(CLSID_SIMPLE, &r.in.Clsid);
r.in.ClientImpLevel = RPC_C_IMP_LEVEL_IDENTIFY;
- r.in.num_protseqs = 2;
+ r.in.num_protseqs = 3;
r.in.protseq = protseq;
r.in.Interfaces = 1;
GUID_from_string(DCERPC_IUNKNOWN_UUID, &iids[0]);