ReactOS 0.4.16-dev-1946-g52006dd
cstub.c
Go to the documentation of this file.
1/*
2 * COM stub (CStdStubBuffer) implementation
3 *
4 * Copyright 2001 Ove Kåven, TransGaming Technologies
5 * Copyright 2009 Alexandre Julliard
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include <stdarg.h>
23
24#define COBJMACROS
25
26#include "windef.h"
27#include "winbase.h"
28#include "winerror.h"
29#include "excpt.h"
30
31#include "objbase.h"
32#include "rpcproxy.h"
33
34#include "wine/debug.h"
35#include "wine/asm.h"
36#include "wine/exception.h"
37
38#include "cpsf.h"
39
41
43{
47}
48
50{
51 return CONTAINING_RECORD(&iface->lpVtbl, CStdStubBuffer, lpVtbl);
52}
53
55{
57}
58
60{
61 const CInterfaceStubVtbl *vtbl = CONTAINING_RECORD(stub->lpVtbl, CInterfaceStubVtbl, Vtbl);
62
63 return &vtbl->header;
64}
65
67 LPUNKNOWN pUnkServer,
70 LPPSFACTORYBUFFER pPSFactory,
71 LPRPCSTUBBUFFER *ppStub)
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}
104
105
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}
123
124const IUnknownVtbl *get_delegating_vtbl(DWORD num)
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}
133
135 LPUNKNOWN pUnkServer,
137 CInterfaceStubVtbl *vtbl,
138 REFIID delegating_iid,
139 LPPSFACTORYBUFFER pPSFactory,
140 LPRPCSTUBBUFFER *ppStub)
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}
184
186 REFIID riid,
187 LPVOID *obj)
188{
190 TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(riid),obj);
191
193 IsEqualIID(&IID_IRpcStubBuffer, riid))
194 {
195 IRpcStubBuffer_AddRef(iface);
196 *obj = iface;
197 return S_OK;
198 }
199 *obj = NULL;
200 return E_NOINTERFACE;
201}
202
204{
206 TRACE("(%p)->AddRef()\n",This);
207 return InterlockedIncrement(&This->RefCount);
208}
209
211 LPPSFACTORYBUFFER pPSF)
212{
214 ULONG refs;
215
216 TRACE("(%p)->Release()\n",This);
217
218 refs = InterlockedDecrement(&This->RefCount);
219 if (!refs)
220 {
221 /* test_Release shows that native doesn't call Disconnect here.
222 We'll leave it in for the time being. */
223 IRpcStubBuffer_Disconnect(iface);
224
225 IPSFactoryBuffer_Release(pPSF);
226 free(This);
227 }
228 return refs;
229}
230
232 LPPSFACTORYBUFFER pPSF)
233{
235 ULONG refs;
236
237 TRACE("(%p)->Release()\n", This);
238
239 refs = InterlockedDecrement(&This->stub_buffer.RefCount);
240 if (!refs)
241 {
242 /* Just like NdrCStdStubBuffer_Release, we shouldn't call
243 Disconnect here */
244 IRpcStubBuffer_Disconnect((IRpcStubBuffer *)&This->stub_buffer);
245
246 IRpcStubBuffer_Release(This->base_stub);
247 IPSFactoryBuffer_Release(pPSF);
248 free(This);
249 }
250
251 return refs;
252}
253
255 LPUNKNOWN lpUnkServer)
256{
258 HRESULT r;
259 IUnknown *new = NULL;
260
261 TRACE("(%p)->Connect(%p)\n",This,lpUnkServer);
262
263 r = IUnknown_QueryInterface(lpUnkServer, get_stub_header(This)->piid, (void**)&new);
264 new = InterlockedExchangePointer((void**)&This->pvServerObject, new);
265 if(new)
266 IUnknown_Release(new);
267 return r;
268}
269
271{
273 IUnknown *old;
274 TRACE("(%p)->Disconnect()\n",This);
275
276 old = InterlockedExchangePointer((void**)&This->pvServerObject, NULL);
277
278 if(old)
279 IUnknown_Release(old);
280}
281
283 PRPCOLEMESSAGE pMsg,
284 LPRPCCHANNELBUFFER pChannel)
285{
288 DWORD dwPhase = STUB_UNMARSHAL;
289 HRESULT hr = S_OK;
290
291 TRACE("(%p)->Invoke(%p,%p)\n",This,pMsg,pChannel);
292
293 __TRY
294 {
295 if (header->pDispatchTable)
296 header->pDispatchTable[pMsg->iMethod](iface, pChannel, (PRPC_MESSAGE)pMsg, &dwPhase);
297 else /* pure interpreted */
298 NdrStubCall2(iface, pChannel, (PRPC_MESSAGE)pMsg, &dwPhase);
299 }
301 {
302 DWORD dwExceptionCode = GetExceptionCode();
303 WARN("a stub call failed with exception 0x%08lx (%ld)\n", dwExceptionCode, dwExceptionCode);
304 if (FAILED(dwExceptionCode))
305 hr = dwExceptionCode;
306 else
307 hr = HRESULT_FROM_WIN32(dwExceptionCode);
308 }
310
311 return hr;
312}
313
315 REFIID riid)
316{
318
319 TRACE("(%p)->IsIIDSupported(%s)\n", stub, debugstr_guid(riid));
320
322 return iface;
323 return NULL;
324}
325
327{
329 TRACE("(%p)->CountRefs()\n",This);
330 return This->RefCount;
331}
332
334 LPVOID *ppv)
335{
337 TRACE("(%p)->DebugServerQueryInterface(%p)\n",This,ppv);
338 return S_OK;
339}
340
342 LPVOID pv)
343{
345 TRACE("(%p)->DebugServerRelease(%p)\n",This,pv);
346}
347
348const IRpcStubBufferVtbl CStdStubBuffer_Vtbl =
349{
352 NULL,
360};
361
363 LPUNKNOWN lpUnkServer)
364{
366 HRESULT r;
367 TRACE("(%p)->Connect(%p)\n", This, lpUnkServer);
368
369 r = CStdStubBuffer_Connect(iface, lpUnkServer);
370 if(SUCCEEDED(r))
371 r = IRpcStubBuffer_Connect(This->base_stub, (IUnknown*)&This->base_obj);
372
373 return r;
374}
375
377{
379 TRACE("(%p)->Disconnect()\n", This);
380
381 IRpcStubBuffer_Disconnect(This->base_stub);
383}
384
386{
388 ULONG ret;
389 TRACE("(%p)->CountRefs()\n", This);
390
392 ret += IRpcStubBuffer_CountRefs(This->base_stub);
393
394 return ret;
395}
396
397const IRpcStubBufferVtbl CStdStubBuffer_Delegating_Vtbl =
398{
401 NULL,
409};
410
412{
414
416}
417
418/************************************************************************
419 * NdrStubForwardingFunction [RPCRT4.@]
420 */
422 PRPC_MESSAGE pMsg, DWORD *pdwStubPhase )
423{
424 /* Note pMsg is passed intact since RPCOLEMESSAGE is basically a RPC_MESSAGE. */
425
427 HRESULT r = IRpcStubBuffer_Invoke(This->base_stub, (RPCOLEMESSAGE*)pMsg, pChannel);
429 return;
430}
431
432/***********************************************************************
433 * NdrStubInitialize [RPCRT4.@]
434 */
436 PMIDL_STUB_MESSAGE pStubMsg,
437 PMIDL_STUB_DESC pStubDescriptor,
438 LPRPCCHANNELBUFFER pRpcChannelBuffer)
439{
440 TRACE("(%p,%p,%p,%p)\n", pRpcMsg, pStubMsg, pStubDescriptor, pRpcChannelBuffer);
441 NdrServerInitializeNew(pRpcMsg, pStubMsg, pStubDescriptor);
442 pStubMsg->pRpcChannelBuffer = pRpcChannelBuffer;
443 IRpcChannelBuffer_GetDestCtx(pStubMsg->pRpcChannelBuffer,
444 &pStubMsg->dwDestContext,
445 &pStubMsg->pvDestContext);
446}
447
448/***********************************************************************
449 * NdrStubGetBuffer [RPCRT4.@]
450 */
452 LPRPCCHANNELBUFFER pRpcChannelBuffer,
453 PMIDL_STUB_MESSAGE pStubMsg)
454{
456 HRESULT hr;
457
458 TRACE("(%p, %p, %p)\n", This, pRpcChannelBuffer, pStubMsg);
459
460 pStubMsg->RpcMsg->BufferLength = pStubMsg->BufferLength;
461 hr = IRpcChannelBuffer_GetBuffer(pRpcChannelBuffer,
462 (RPCOLEMESSAGE *)pStubMsg->RpcMsg, get_stub_header(This)->piid);
463 if (FAILED(hr))
464 {
466 return;
467 }
468
469 pStubMsg->Buffer = pStubMsg->RpcMsg->Buffer;
470}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
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
HRESULT create_stub(REFIID iid, IUnknown *pUnk, IRpcStubBuffer **ppstub)
Definition: ndr_ole.c:430
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
static LPVOID LPUNKNOWN
Definition: dinput.c:53
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define __TRY
Definition: compat.h:80
#define __ENDTRY
Definition: compat.h:82
static CStdStubBuffer * impl_from_IRpcStubBuffer(IRpcStubBuffer *iface)
Definition: cstub.c:49
static void WINAPI CStdStubBuffer_Delegating_Disconnect(LPRPCSTUBBUFFER iface)
Definition: cstub.c:376
const MIDL_SERVER_INFO * CStdStubBuffer_GetServerInfo(IRpcStubBuffer *iface)
Definition: cstub.c:411
ULONG WINAPI CStdStubBuffer_CountRefs(LPRPCSTUBBUFFER iface)
Definition: cstub.c:326
void WINAPI CStdStubBuffer_DebugServerRelease(LPRPCSTUBBUFFER iface, LPVOID pv)
Definition: cstub.c:341
HRESULT WINAPI CStdStubBuffer_QueryInterface(LPRPCSTUBBUFFER iface, REFIID riid, LPVOID *obj)
Definition: cstub.c:185
HRESULT CStdStubBuffer_Construct(REFIID riid, LPUNKNOWN pUnkServer, PCInterfaceName name, CInterfaceStubVtbl *vtbl, LPPSFACTORYBUFFER pPSFactory, LPRPCSTUBBUFFER *ppStub)
Definition: cstub.c:66
const IRpcStubBufferVtbl CStdStubBuffer_Delegating_Vtbl
Definition: cstub.c:397
ULONG WINAPI CStdStubBuffer_AddRef(LPRPCSTUBBUFFER iface)
Definition: cstub.c:203
BOOL fill_delegated_proxy_table(IUnknownVtbl *vtbl, DWORD num)
Definition: cstub.c:106
HRESULT CStdStubBuffer_Delegating_Construct(REFIID riid, LPUNKNOWN pUnkServer, PCInterfaceName name, CInterfaceStubVtbl *vtbl, REFIID delegating_iid, LPPSFACTORYBUFFER pPSFactory, LPRPCSTUBBUFFER *ppStub)
Definition: cstub.c:134
void WINAPI NdrStubGetBuffer(LPRPCSTUBBUFFER iface, LPRPCCHANNELBUFFER pRpcChannelBuffer, PMIDL_STUB_MESSAGE pStubMsg)
Definition: cstub.c:451
void __RPC_STUB NdrStubForwardingFunction(IRpcStubBuffer *iface, IRpcChannelBuffer *pChannel, PRPC_MESSAGE pMsg, DWORD *pdwStubPhase)
Definition: cstub.c:421
const IUnknownVtbl * get_delegating_vtbl(DWORD num)
Definition: cstub.c:124
void WINAPI NdrStubInitialize(PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDescriptor, LPRPCCHANNELBUFFER pRpcChannelBuffer)
Definition: cstub.c:435
void WINAPI CStdStubBuffer_Disconnect(LPRPCSTUBBUFFER iface)
Definition: cstub.c:270
static ULONG WINAPI CStdStubBuffer_Delegating_CountRefs(LPRPCSTUBBUFFER iface)
Definition: cstub.c:385
static HRESULT WINAPI CStdStubBuffer_Delegating_Connect(LPRPCSTUBBUFFER iface, LPUNKNOWN lpUnkServer)
Definition: cstub.c:362
LPRPCSTUBBUFFER WINAPI CStdStubBuffer_IsIIDSupported(LPRPCSTUBBUFFER iface, REFIID riid)
Definition: cstub.c:314
const IRpcStubBufferVtbl CStdStubBuffer_Vtbl
Definition: cstub.c:348
static const CInterfaceStubHeader * get_stub_header(const CStdStubBuffer *stub)
Definition: cstub.c:59
HRESULT WINAPI CStdStubBuffer_Invoke(LPRPCSTUBBUFFER iface, PRPCOLEMESSAGE pMsg, LPRPCCHANNELBUFFER pChannel)
Definition: cstub.c:282
static LONG WINAPI stub_filter(EXCEPTION_POINTERS *eptr)
Definition: cstub.c:42
static cstdstubbuffer_delegating_t * impl_from_delegating(IRpcStubBuffer *iface)
Definition: cstub.c:54
ULONG WINAPI NdrCStdStubBuffer2_Release(LPRPCSTUBBUFFER iface, LPPSFACTORYBUFFER pPSF)
Definition: cstub.c:231
HRESULT WINAPI CStdStubBuffer_DebugServerQueryInterface(LPRPCSTUBBUFFER iface, LPVOID *ppv)
Definition: cstub.c:333
ULONG WINAPI NdrCStdStubBuffer_Release(LPRPCSTUBBUFFER iface, LPPSFACTORYBUFFER pPSF)
Definition: cstub.c:210
HRESULT WINAPI CStdStubBuffer_Connect(LPRPCSTUBBUFFER iface, LPUNKNOWN lpUnkServer)
Definition: cstub.c:254
return ret
Definition: mutex.c:146
#define InterlockedExchangePointer(Target, Value)
Definition: dshow.h:45
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
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
#define GetExceptionCode
Definition: excpt.h:83
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
#define EXCEPTION_CONTINUE_SEARCH
Definition: excpt.h:91
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_guid
Definition: kernel32.h:35
unsigned char *WINAPI NdrServerInitializeNew(PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc)
LONG WINAPI NdrStubCall2(struct IRpcStubBuffer *pThis, struct IRpcChannelBuffer *pChannel, PRPC_MESSAGE pRpcMsg, DWORD *pdwStubPhase)
interface IRpcStubBuffer * LPRPCSTUBBUFFER
Definition: objfwd.h:41
interface IRpcChannelBuffer * LPRPCCHANNELBUFFER
Definition: objfwd.h:39
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
struct _RPC_MESSAGE * PRPC_MESSAGE
@ STUB_UNMARSHAL
Definition: rpcndr.h:484
const char * PCInterfaceName
Definition: rpcproxy.h:41
void DECLSPEC_NORETURN WINAPI RpcRaiseException(RPC_STATUS exception)
Definition: rpcrt4_main.c:213
#define __RPC_STUB
Definition: rpc.h:62
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
PEXCEPTION_RECORD ExceptionRecord
Definition: rtltypes.h:200
DWORD ExceptionFlags
Definition: compat.h:209
void * pvDestContext
Definition: rpcndr.h:233
struct IRpcChannelBuffer * pRpcChannelBuffer
Definition: rpcndr.h:236
unsigned char * Buffer
Definition: rpcndr.h:186
ULONG BufferLength
Definition: rpcndr.h:190
DWORD dwDestContext
Definition: rpcndr.h:232
PRPC_MESSAGE RpcMsg
Definition: rpcndr.h:185
unsigned int BufferLength
Definition: rpcdcep.h:41
void * Buffer
Definition: rpcdcep.h:40
Definition: stubgen.c:11
IUnknownVtbl vtbl
Definition: cpsf.h:78
const void * methods[NB_THUNK_ENTRIES - 3]
Definition: cpsf.h:79
Definition: name.c:39
const MIDL_SERVER_INFO * pServerInfo
Definition: rpcproxy.h:92
const IID * piid
Definition: rpcproxy.h:91
CInterfaceStubHeader header
Definition: rpcproxy.h:99
IRpcStubBufferVtbl Vtbl
Definition: rpcproxy.h:100
#define EXCEPTION_NONCONTINUABLE
Definition: stubs.h:23
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define WINAPI
Definition: msvc.h:6
#define __EXCEPT(func)
Definition: exception.h:62
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOINTERFACE
Definition: winerror.h:3479
#define RPC_E_UNEXPECTED
Definition: winerror.h:3612