ReactOS 0.4.16-dev-1946-g52006dd
cpsf.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  StdProxyImpl
 
struct  cstdstubbuffer_delegating_t
 
struct  delegating_vtbl
 

Macros

#define NB_THUNK_ENTRIES   1024
 

Functions

HRESULT StdProxy_Construct (REFIID riid, LPUNKNOWN pUnkOuter, const ProxyFileInfo *ProxyInfo, int Index, LPPSFACTORYBUFFER pPSFactory, LPRPCPROXYBUFFER *ppProxy, LPVOID *ppvObj)
 
HRESULT WINAPI StdProxy_QueryInterface (IRpcProxyBuffer *iface, REFIID iid, void **obj)
 
ULONG WINAPI StdProxy_AddRef (IRpcProxyBuffer *iface)
 
HRESULT WINAPI StdProxy_Connect (IRpcProxyBuffer *iface, IRpcChannelBuffer *channel)
 
void WINAPI StdProxy_Disconnect (IRpcProxyBuffer *iface)
 
HRESULT CStdStubBuffer_Construct (REFIID riid, LPUNKNOWN pUnkServer, PCInterfaceName name, CInterfaceStubVtbl *vtbl, LPPSFACTORYBUFFER pPSFactory, LPRPCSTUBBUFFER *ppStub)
 
HRESULT CStdStubBuffer_Delegating_Construct (REFIID riid, LPUNKNOWN pUnkServer, PCInterfaceName name, CInterfaceStubVtbl *vtbl, REFIID delegating_iid, LPPSFACTORYBUFFER pPSFactory, LPRPCSTUBBUFFER *ppStub)
 
const MIDL_SERVER_INFOCStdStubBuffer_GetServerInfo (IRpcStubBuffer *iface)
 
BOOL fill_delegated_proxy_table (IUnknownVtbl *vtbl, DWORD num)
 
HRESULT create_proxy (REFIID iid, IUnknown *pUnkOuter, IRpcProxyBuffer **pproxy, void **ppv)
 
HRESULT create_stub (REFIID iid, IUnknown *pUnk, IRpcStubBuffer **ppstub)
 
BOOL fill_stubless_table (IUnknownVtbl *vtbl, DWORD num)
 
const IUnknownVtbl * get_delegating_vtbl (DWORD num_methods)
 

Variables

const IRpcStubBufferVtbl CStdStubBuffer_Vtbl
 
const IRpcStubBufferVtbl CStdStubBuffer_Delegating_Vtbl
 
const struct delegating_vtbl delegating_vtbl
 

Macro Definition Documentation

◆ NB_THUNK_ENTRIES

#define NB_THUNK_ENTRIES   1024

Definition at line 74 of file cpsf.h.

Function Documentation

◆ create_proxy()

HRESULT create_proxy ( REFIID  iid,
IUnknown pUnkOuter,
IRpcProxyBuffer **  pproxy,
void **  ppv 
)

Definition at line 408 of file ndr_ole.c.

409{
410 CLSID clsid;
411 IPSFactoryBuffer *psfac;
412 HRESULT r;
413
414 r = CoGetPSClsid(iid, &clsid);
415 if(FAILED(r)) return r;
416
417 r = CoGetClassObject(&clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IPSFactoryBuffer, (void **)&psfac);
418 if(FAILED(r)) return r;
419
420 r = IPSFactoryBuffer_CreateProxy(psfac, pUnkOuter, iid, pproxy, ppv);
421
422 IPSFactoryBuffer_Release(psfac);
423 return r;
424}
#define NULL
Definition: types.h:112
HRESULT WINAPI CoGetPSClsid(REFIID riid, CLSID *pclsid)
Definition: compobj.c:2690
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3103
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define FAILED(hr)
Definition: intsafe.h:51
const CLSID * clsid
Definition: msctf.cpp:50

Referenced by StdProxy_Construct(), and typelib_proxy_init().

◆ create_stub()

HRESULT create_stub ( REFIID  iid,
IUnknown pUnk,
IRpcStubBuffer **  ppstub 
)

Definition at line 430 of file ndr_ole.c.

431{
432 CLSID clsid;
433 IPSFactoryBuffer *psfac;
434 HRESULT r;
435
436 r = CoGetPSClsid(iid, &clsid);
437 if(FAILED(r)) return r;
438
439 r = CoGetClassObject(&clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IPSFactoryBuffer, (void **)&psfac);
440 if(FAILED(r)) return r;
441
442 r = IPSFactoryBuffer_CreateStub(psfac, iid, pUnk, ppstub);
443
444 IPSFactoryBuffer_Release(psfac);
445 return r;
446}
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30

Referenced by CStdStubBuffer_Delegating_Construct(), test_Connect(), test_CreateStub(), test_delegating_Invoke(), test_Disconnect(), test_Release(), and typelib_stub_init().

◆ CStdStubBuffer_Construct()

HRESULT CStdStubBuffer_Construct ( REFIID  riid,
LPUNKNOWN  pUnkServer,
PCInterfaceName  name,
CInterfaceStubVtbl vtbl,
LPPSFACTORYBUFFER  pPSFactory,
LPRPCSTUBBUFFER ppStub 
)

Definition at line 66 of file cstub.c.

72{
74 IUnknown *pvServer;
75 HRESULT r;
76 TRACE("(%p,%p,%p,%p) %s\n", pUnkServer, vtbl, pPSFactory, ppStub, name);
77 TRACE("iid=%s\n", debugstr_guid(vtbl->header.piid));
78 TRACE("vtbl=%p\n", &vtbl->Vtbl);
79
80 if (!IsEqualGUID(vtbl->header.piid, riid)) {
81 ERR("IID mismatch during stub creation\n");
82 return RPC_E_UNEXPECTED;
83 }
84
85 r = IUnknown_QueryInterface(pUnkServer, riid, (void**)&pvServer);
86 if(FAILED(r))
87 return r;
88
89 This = calloc(1, sizeof(CStdStubBuffer));
90 if (!This) {
91 IUnknown_Release(pvServer);
92 return E_OUTOFMEMORY;
93 }
94
95 This->lpVtbl = &vtbl->Vtbl;
96 This->RefCount = 1;
97 This->pvServerObject = pvServer;
98 This->pPSFactory = pPSFactory;
99 *ppStub = (LPRPCSTUBBUFFER)This;
100
101 IPSFactoryBuffer_AddRef(pPSFactory);
102 return S_OK;
103}
#define ERR(fmt,...)
Definition: precomp.h:57
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
interface IRpcStubBuffer * LPRPCSTUBBUFFER
Definition: objfwd.h:41
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
Definition: name.c:39
const IID * piid
Definition: rpcproxy.h:91
CInterfaceStubHeader header
Definition: rpcproxy.h:99
IRpcStubBufferVtbl Vtbl
Definition: rpcproxy.h:100
#define RPC_E_UNEXPECTED
Definition: winerror.h:3612

Referenced by CStdPSFactory_CreateStub().

◆ CStdStubBuffer_Delegating_Construct()

HRESULT CStdStubBuffer_Delegating_Construct ( REFIID  riid,
LPUNKNOWN  pUnkServer,
PCInterfaceName  name,
CInterfaceStubVtbl vtbl,
REFIID  delegating_iid,
LPPSFACTORYBUFFER  pPSFactory,
LPRPCSTUBBUFFER ppStub 
)

Definition at line 134 of file cstub.c.

141{
143 IUnknown *pvServer;
144 HRESULT r;
145
146 TRACE("(%p,%p,%p,%p) %s\n", pUnkServer, vtbl, pPSFactory, ppStub, name);
147 TRACE("iid=%s delegating to %s\n", debugstr_guid(vtbl->header.piid), debugstr_guid(delegating_iid));
148 TRACE("vtbl=%p\n", &vtbl->Vtbl);
149
150 if (!IsEqualGUID(vtbl->header.piid, riid))
151 {
152 ERR("IID mismatch during stub creation\n");
153 return RPC_E_UNEXPECTED;
154 }
155
156 r = IUnknown_QueryInterface(pUnkServer, riid, (void**)&pvServer);
157 if(FAILED(r)) return r;
158
159 This = calloc(1, sizeof(*This));
160 if (!This)
161 {
162 IUnknown_Release(pvServer);
163 return E_OUTOFMEMORY;
164 }
165
166 This->base_obj.lpVtbl = get_delegating_vtbl( vtbl->header.DispatchTableCount );
167 r = create_stub(delegating_iid, &This->base_obj, &This->base_stub);
168 if(FAILED(r))
169 {
170 free(This);
171 IUnknown_Release(pvServer);
172 return r;
173 }
174
175 This->stub_buffer.lpVtbl = &vtbl->Vtbl;
176 This->stub_buffer.RefCount = 1;
177 This->stub_buffer.pvServerObject = pvServer;
178 This->stub_buffer.pPSFactory = pPSFactory;
179 *ppStub = (LPRPCSTUBBUFFER)&This->stub_buffer;
180
181 IPSFactoryBuffer_AddRef(pPSFactory);
182 return S_OK;
183}
HRESULT create_stub(REFIID iid, IUnknown *pUnk, IRpcStubBuffer **ppstub)
Definition: ndr_ole.c:430
#define free
Definition: debug_ros.c:5
const IUnknownVtbl * get_delegating_vtbl(DWORD num)
Definition: cstub.c:124

Referenced by CStdPSFactory_CreateStub().

◆ CStdStubBuffer_GetServerInfo()

const MIDL_SERVER_INFO * CStdStubBuffer_GetServerInfo ( IRpcStubBuffer iface)

Definition at line 411 of file cstub.c.

412{
414
416}
static CStdStubBuffer * impl_from_IRpcStubBuffer(IRpcStubBuffer *iface)
Definition: cstub.c:49
static const CInterfaceStubHeader * get_stub_header(const CStdStubBuffer *stub)
Definition: cstub.c:59
Definition: stubgen.c:11
const MIDL_SERVER_INFO * pServerInfo
Definition: rpcproxy.h:92

Referenced by NdrStubCall2().

◆ fill_delegated_proxy_table()

BOOL fill_delegated_proxy_table ( IUnknownVtbl *  vtbl,
DWORD  num 
)

Definition at line 106 of file cstub.c.

107{
108 const void **entry = (const void **)(vtbl + 1);
109 DWORD i;
110
111 if (num > NB_THUNK_ENTRIES)
112 {
113 FIXME( "%lu methods not supported\n", num );
114 return FALSE;
115 }
116 vtbl->QueryInterface = IUnknown_QueryInterface_Proxy;
118 vtbl->Release = IUnknown_Release_Proxy;
119 for (i = 0; i < num - 3; i++)
121 return TRUE;
122}
#define FIXME(fmt,...)
Definition: precomp.h:53
ULONG WINAPI IUnknown_AddRef_Proxy(LPUNKNOWN iface)
Definition: cproxy.c:249
ULONG WINAPI IUnknown_Release_Proxy(LPUNKNOWN iface)
Definition: cproxy.c:256
HRESULT WINAPI IUnknown_QueryInterface_Proxy(LPUNKNOWN iface, REFIID riid, LPVOID *ppvObj)
Definition: cproxy.c:240
#define NB_THUNK_ENTRIES
Definition: cpsf.h:74
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint num
Definition: glext.h:9618
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
ULONG AddRef()
uint32_t entry
Definition: isohybrid.c:63
const void * methods[NB_THUNK_ENTRIES - 3]
Definition: cpsf.h:79

Referenced by CreateProxyFromTypeInfo(), and init_psfactory().

◆ fill_stubless_table()

BOOL fill_stubless_table ( IUnknownVtbl *  vtbl,
DWORD  num 
)

Definition at line 56 of file cproxy.c.

57{
58 size_t entry_size = (char *)ObjectStublessClient4 - (char *)ObjectStublessClient3;
59 const void **entry = (const void **)(vtbl + 1);
60 DWORD i;
61
62 if (num >= NB_THUNK_ENTRIES)
63 {
64 FIXME( "%lu methods not supported\n", num );
65 return FALSE;
66 }
67 for (i = 0; i < num - 3; i++, entry++)
68 if (*entry == (void *)-1) *entry = (char *)ObjectStublessClient3 + i * entry_size;
69
70 return TRUE;
71}
void ObjectStublessClient3(void)
void ObjectStublessClient4(void)

Referenced by StdProxy_Construct(), and typelib_proxy_init().

◆ get_delegating_vtbl()

const IUnknownVtbl * get_delegating_vtbl ( DWORD  num_methods)

Definition at line 124 of file cstub.c.

125{
126 if (num > NB_THUNK_ENTRIES)
127 {
128 FIXME( "%lu methods not supported\n", num );
129 return NULL;
130 }
131 return &delegating_vtbl.vtbl;
132}
IUnknownVtbl vtbl
Definition: cpsf.h:78

Referenced by CStdStubBuffer_Delegating_Construct(), and typelib_stub_init().

◆ StdProxy_AddRef()

ULONG WINAPI StdProxy_AddRef ( IRpcProxyBuffer iface)

Definition at line 158 of file cproxy.c.

159{
161 TRACE("(%p)->AddRef()\n",This);
162
163 return InterlockedIncrement(&This->RefCount);
164}
#define InterlockedIncrement
Definition: armddk.h:53
static StdProxyImpl * impl_from_IRpcProxyBuffer(IRpcProxyBuffer *iface)
Definition: cproxy.c:43

◆ StdProxy_Connect()

HRESULT WINAPI StdProxy_Connect ( IRpcProxyBuffer iface,
IRpcChannelBuffer channel 
)

Definition at line 188 of file cproxy.c.

189{
191 TRACE("(%p)->Connect(%p)\n",This,pChannel);
192
193 This->pChannel = pChannel;
194 IRpcChannelBuffer_AddRef(pChannel);
195 if (This->base_proxy) IRpcProxyBuffer_Connect( This->base_proxy, pChannel );
196 return S_OK;
197}

◆ StdProxy_Construct()

HRESULT StdProxy_Construct ( REFIID  riid,
LPUNKNOWN  pUnkOuter,
const ProxyFileInfo ProxyInfo,
int  Index,
LPPSFACTORYBUFFER  pPSFactory,
LPRPCPROXYBUFFER ppProxy,
LPVOID ppvObj 
)

Definition at line 73 of file cproxy.c.

80{
83 CInterfaceProxyVtbl *vtbl = ProxyInfo->pProxyVtblList[Index];
84
85 TRACE("(%p,%p,%p,%p,%p) %s\n", pUnkOuter, vtbl, pPSFactory, ppProxy, ppvObj, name);
86
87 /* TableVersion = 2 means it is the stubless version of CInterfaceProxyVtbl */
88 if (ProxyInfo->TableVersion > 1) {
90 vtbl = (CInterfaceProxyVtbl *)((const void **)vtbl + 1);
91 TRACE("stubless vtbl %p: count=%ld\n", vtbl->Vtbl, count );
92 fill_stubless_table( (IUnknownVtbl *)vtbl->Vtbl, count );
93 }
94
95 if (!IsEqualGUID(vtbl->header.piid, riid)) {
96 ERR("IID mismatch during proxy creation\n");
97 return RPC_E_UNEXPECTED;
98 }
99
100 This = calloc(1, sizeof(StdProxyImpl));
101 if (!This) return E_OUTOFMEMORY;
102
103 if (!pUnkOuter) pUnkOuter = (IUnknown *)&This->IRpcProxyBuffer_iface;
104 This->IRpcProxyBuffer_iface.lpVtbl = &StdProxy_Vtbl;
105 This->PVtbl = vtbl->Vtbl;
106 /* one reference for the proxy */
107 This->RefCount = 1;
108 This->piid = vtbl->header.piid;
109 This->base_object = NULL;
110 This->base_proxy = NULL;
111 This->pUnkOuter = pUnkOuter;
112 This->name = name;
113 This->pPSFactory = pPSFactory;
114 This->pChannel = NULL;
115
116 if(ProxyInfo->pDelegatedIIDs && ProxyInfo->pDelegatedIIDs[Index])
117 {
119 &This->base_proxy, (void **)&This->base_object );
120 if (FAILED(r))
121 {
122 free( This );
123 return r;
124 }
125 }
126
127 *ppProxy = &This->IRpcProxyBuffer_iface;
128 *ppvObj = &This->PVtbl;
129 IUnknown_AddRef((IUnknown *)*ppvObj);
130 IPSFactoryBuffer_AddRef(pPSFactory);
131
132 TRACE( "iid=%s this %p proxy %p obj %p vtbl %p base proxy %p base obj %p\n",
133 debugstr_guid(riid), This, *ppProxy, *ppvObj, This->PVtbl, This->base_proxy, This->base_object );
134 return S_OK;
135}
BOOL fill_stubless_table(IUnknownVtbl *vtbl, DWORD num)
Definition: cproxy.c:56
static const IRpcProxyBufferVtbl StdProxy_Vtbl
Definition: cproxy.c:41
HRESULT create_proxy(REFIID iid, IUnknown *pUnkOuter, IRpcProxyBuffer **pproxy, void **ppv)
Definition: ndr_ole.c:408
GLuint GLuint GLsizei count
Definition: gl.h:1545
const char * PCInterfaceName
Definition: rpcproxy.h:41
CInterfaceProxyHeader header
Definition: rpcproxy.h:79
unsigned short TableVersion
Definition: rpcproxy.h:53
const IID ** pDelegatedIIDs
Definition: rpcproxy.h:50
const PCInterfaceStubVtblList * pStubVtblList
Definition: rpcproxy.h:48
const PCInterfaceProxyVtblList * pProxyVtblList
Definition: rpcproxy.h:47
const PCInterfaceName * pNamesArray
Definition: rpcproxy.h:49
uint32_t ULONG
Definition: typedefs.h:59
_In_ WDFCOLLECTION _In_ ULONG Index

Referenced by CStdPSFactory_CreateProxy().

◆ StdProxy_Disconnect()

void WINAPI StdProxy_Disconnect ( IRpcProxyBuffer iface)

Definition at line 199 of file cproxy.c.

200{
202 TRACE("(%p)->Disconnect()\n",This);
203
204 if (This->base_proxy) IRpcProxyBuffer_Disconnect( This->base_proxy );
205
206 IRpcChannelBuffer_Release(This->pChannel);
207 This->pChannel = NULL;
208}

◆ StdProxy_QueryInterface()

HRESULT WINAPI StdProxy_QueryInterface ( IRpcProxyBuffer iface,
REFIID  iid,
void **  obj 
)

Definition at line 137 of file cproxy.c.

138{
140 TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(riid),obj);
141
143 IsEqualGUID(This->piid,riid)) {
144 *obj = &This->PVtbl;
145 InterlockedIncrement(&This->RefCount);
146 return S_OK;
147 }
148
149 if (IsEqualGUID(&IID_IRpcProxyBuffer,riid)) {
150 *obj = &This->IRpcProxyBuffer_iface;
151 InterlockedIncrement(&This->RefCount);
152 return S_OK;
153 }
154
155 return E_NOINTERFACE;
156}
const GUID IID_IUnknown
#define E_NOINTERFACE
Definition: winerror.h:3479

Variable Documentation

◆ CStdStubBuffer_Delegating_Vtbl

const IRpcStubBufferVtbl CStdStubBuffer_Delegating_Vtbl
extern

Definition at line 397 of file cstub.c.

Referenced by CreateStubFromTypeInfo(), and init_psfactory().

◆ CStdStubBuffer_Vtbl

const IRpcStubBufferVtbl CStdStubBuffer_Vtbl
extern

Definition at line 348 of file cstub.c.

Referenced by CreateStubFromTypeInfo(), and init_psfactory().

◆ delegating_vtbl

Definition at line 315 of file thunks.c.