19#ifndef __RPCPROXY_H_VERSION__
20#define __RPCPROXY_H_VERSION__ (477)
23#ifndef __WINE_RPCPROXY_H
24#define __WINE_RPCPROXY_H
64#ifdef USE_STUBLESS_PROXY
65 const void *pStublessProxyInfo;
70#define CINTERFACE_PROXY_VTABLE(n) \
73 CInterfaceProxyHeader header; \
121#define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction
123#define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
140#define CStdStubBuffer_METHODS \
141 CStdStubBuffer_QueryInterface, \
142 CStdStubBuffer_AddRef, \
143 CStdStubBuffer_Release, \
144 CStdStubBuffer_Connect, \
145 CStdStubBuffer_Disconnect, \
146 CStdStubBuffer_Invoke, \
147 CStdStubBuffer_IsIIDSupported, \
148 CStdStubBuffer_CountRefs, \
149 CStdStubBuffer_DebugServerQueryInterface, \
150 CStdStubBuffer_DebugServerRelease
170 ULONG RequestedBufferSize );
189#ifdef USE_NEW_WINE_REGISTER_RESOURCES
190#define __wine_register_resources __wine_register_resources_new
191#define __wine_unregister_resources __wine_unregister_resources_new
199#define CSTDSTUBBUFFERRELEASE(pFactory) \
200ULONG WINAPI CStdStubBuffer_Release(IRpcStubBuffer *This) \
201 { return NdrCStdStubBuffer_Release(This, (IPSFactoryBuffer *)pFactory); }
203#ifdef PROXY_DELEGATION
204#define CSTDSTUBBUFFER2RELEASE(pFactory) \
205ULONG WINAPI CStdStubBuffer2_Release(IRpcStubBuffer *This) \
206 { return NdrCStdStubBuffer2_Release(This, (IPSFactoryBuffer *)pFactory); }
208#define CSTDSTUBBUFFER2RELEASE(pFactory)
211#define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID, name##_ProxyVtblList[index]->header.piid, sizeof(IID))
219#define IID_BS_LOOKUP_SETUP \
221#define IID_BS_LOOKUP_INITIAL_TEST(name, sz, split)
222#define IID_BS_LOOKUP_NEXT_TEST(name, split)
223#define IID_BS_LOOKUP_RETURN_RESULT(name, sz, index) \
224 for (c=0; c<sz; c++) if (!name##_CHECK_IID(c)) { (index)=c; return 1; } \
228#define EXTERN_PROXY_FILE(proxy) \
229 EXTERN_C const ProxyFileInfo proxy##_ProxyFileInfo;
231#define PROXYFILE_LIST_START \
232 const ProxyFileInfo * aProxyFileList[] = \
235#define REFERENCE_PROXY_FILE(proxy) \
236 & proxy##_ProxyFileInfo
238#define PROXYFILE_LIST_END \
247# define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID;
249# ifdef PROXY_CLSID_IS
250# define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
251# define PROXY_CLSID CLSID_PSFactoryBuffer
253# define CLSID_PSFACTORYBUFFER
258# define GET_DLL_CLSID (aProxyFileList[0]->pStubVtblList[0] ? \
259 aProxyFileList[0]->pStubVtblList[0]->header.piid : NULL)
261# define GET_DLL_CLSID &PROXY_CLSID
265# define __rpc_macro_expand2(a, b) a##b
266# define __rpc_macro_expand(a, b) __rpc_macro_expand2(a, b)
267# define DLLREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllRegisterServer)
268# define DLLUNREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllUnregisterServer)
269# define DLLMAIN_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllMain)
270# define DLLGETCLASSOBJECT_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllGetClassObject)
271# define DLLCANUNLOADNOW_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllCanUnloadNow)
273# define DLLREGISTERSERVER_ENTRY DllRegisterServer
274# define DLLUNREGISTERSERVER_ENTRY DllUnregisterServer
275# define DLLMAIN_ENTRY DllMain
276# define DLLGETCLASSOBJECT_ENTRY DllGetClassObject
277# define DLLCANUNLOADNOW_ENTRY DllCanUnloadNow
280#ifdef WINE_REGISTER_DLL
281#ifdef USE_NEW_WINE_REGISTER_RESOURCES
282# define WINE_DO_REGISTER_DLL(pfl, clsid) return __wine_register_resources()
283# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return __wine_unregister_resources()
285# define WINE_DO_REGISTER_DLL(pfl, clsid) return __wine_register_resources( hProxyDll )
286# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return __wine_unregister_resources( hProxyDll )
289# define WINE_DO_REGISTER_DLL(pfl, clsid) return NdrDllRegisterProxy( hProxyDll, (pfl), (clsid) )
290# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return NdrDllUnregisterProxy( hProxyDll, (pfl), (clsid) )
294#define DLLDATA_GETPROXYDLLINFO(pfl, rclsid) \
295 void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \
296 const CLSID **ppClsid); \
297 void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \
298 const CLSID **ppClsid) \
300 *ppProxyFileInfo = (pfl); \
301 *ppClsid = (rclsid); \
304#define DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, factory) \
305 HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, void **ppv); \
306 HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, \
309 return NdrDllGetClassObject(rclsid, riid, ppv, (pfl), \
310 (factory_clsid), factory); \
313#define DLLCANUNLOADNOW(factory) \
314 HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void); \
315 HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void) \
317 return NdrDllCanUnloadNow((factory)); \
320#define REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid) \
321 HINSTANCE hProxyDll = NULL; \
323 BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved); \
324 BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, \
325 LPVOID lpvReserved) \
327 if (fdwReason == DLL_PROCESS_ATTACH) \
329 DisableThreadLibraryCalls(hinstDLL); \
330 hProxyDll = hinstDLL; \
335 HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void); \
336 HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void) \
338 WINE_DO_REGISTER_DLL( (pfl), (factory_clsid) ); \
341 HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void); \
342 HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void) \
344 WINE_DO_UNREGISTER_DLL( (pfl), (factory_clsid) ); \
347#if defined(REGISTER_PROXY_DLL) || defined(WINE_REGISTER_DLL)
348# define DLLREGISTRY_ROUTINES(pfl, factory_clsid) \
349 REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid)
351# define DLLREGISTRY_ROUTINES(pfl, factory_clsid)
354#define DLLDATA_ROUTINES(pfl, factory_clsid) \
355 CLSID_PSFACTORYBUFFER \
356 CStdPSFactoryBuffer gPFactory = { NULL, 0, NULL, 0 }; \
357 DLLDATA_GETPROXYDLLINFO(pfl, factory_clsid) \
358 DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, &gPFactory) \
359 DLLCANUNLOADNOW(&gPFactory) \
360 CSTDSTUBBUFFERRELEASE(&gPFactory) \
361 CSTDSTUBBUFFER2RELEASE(&gPFactory) \
362 DLLREGISTRY_ROUTINES(pfl, factory_clsid)
#define STDMETHODCALLTYPE
_Out_ PULONG _Out_ PULONG pIndex
HRESULT WINAPI CreateStubFromTypeInfo(ITypeInfo *typeinfo, REFIID iid, IUnknown *server, IRpcStubBuffer **stub_buffer)
HRESULT WINAPI CreateProxyFromTypeInfo(ITypeInfo *typeinfo, IUnknown *outer, REFIID iid, IRpcProxyBuffer **proxy_buffer, void **out)
interface IRpcStubBuffer * LPRPCSTUBBUFFER
interface IRpcProxyBuffer * LPRPCPROXYBUFFER
void __RPC_STUB NdrStubForwardingFunction(IRpcStubBuffer *This, IRpcChannelBuffer *pChannel, PRPC_MESSAGE pMsg, DWORD *pdwStubPhase)
struct tagCInterfaceProxyVtbl CInterfaceProxyVtbl
RPCRTAPI HRESULT WINAPI CStdStubBuffer_DebugServerQueryInterface(IRpcStubBuffer *This, void **ppv)
RPCRTAPI void RPC_ENTRY NdrStubInitializePartial(PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer, ULONG RequestedBufferSize)
IIDLookupRtn * PIIDLookup
int __stdcall IIDLookupRtn(const IID *pIID, int *pIndex)
RPCRTAPI IRpcStubBuffer *WINAPI CStdStubBuffer_IsIIDSupported(IRpcStubBuffer *This, REFIID riid)
RPCRTAPI HRESULT WINAPI CStdStubBuffer_Invoke(IRpcStubBuffer *This, RPCOLEMESSAGE *pRpcMsg, IRpcChannelBuffer *pRpcChannelBuffer)
struct tagCInterfaceStubVtbl CInterfaceStubVtbl
RPCRTAPI HRESULT RPC_ENTRY NdrDllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid, CStdPSFactoryBuffer *pPSFactoryBuffer)
struct tagCInterfaceStubHeader CInterfaceStubHeader
void(__RPC_STUB * PRPC_STUB_FUNCTION)(IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *pdwStubPhase)
RPCRTAPI ULONG WINAPI CStdStubBuffer_AddRef(IRpcStubBuffer *This)
RPCRTAPI HRESULT WINAPI CStdStubBuffer_QueryInterface(IRpcStubBuffer *This, REFIID riid, void **ppvObject)
HRESULT __cdecl __wine_unregister_resources(HMODULE module)
RPCRTAPI void RPC_ENTRY NdrStubInitialize(PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer)
ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This)
ProxyFileInfo ExtendedProxyFileInfo
HRESULT __cdecl __wine_register_resources(HMODULE module)
RPCRTAPI void RPC_ENTRY NdrProxyFreeBuffer(void *This, PMIDL_STUB_MESSAGE pStubMsg)
RPCRTAPI ULONG WINAPI NdrCStdStubBuffer2_Release(IRpcStubBuffer *This, IPSFactoryBuffer *pPSF)
RPCRTAPI ULONG WINAPI CStdStubBuffer_CountRefs(IRpcStubBuffer *This)
const char * PCInterfaceName
RPCRTAPI HRESULT RPC_ENTRY NdrStubErrorHandler(DWORD dwExceptionCode)
RPCRTAPI void WINAPI CStdStubBuffer_DebugServerRelease(IRpcStubBuffer *This, void *pv)
struct tagCStdStubBuffer CStdStubBuffer
RPCRTAPI void RPC_ENTRY NdrProxySendReceive(void *This, PMIDL_STUB_MESSAGE pStubMsg)
RPCRTAPI HRESULT RPC_ENTRY NdrDllRegisterProxy(HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid)
RPCRTAPI HRESULT RPC_ENTRY NdrDllUnregisterProxy(HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid)
RPCRTAPI void RPC_ENTRY NdrProxyGetBuffer(void *This, PMIDL_STUB_MESSAGE pStubMsg)
RPCRTAPI void RPC_ENTRY NdrStubGetBuffer(IRpcStubBuffer *This, IRpcChannelBuffer *pRpcChannelBuffer, PMIDL_STUB_MESSAGE pStubMsg)
RPCRTAPI HRESULT RPC_ENTRY NdrDllCanUnloadNow(CStdPSFactoryBuffer *pPSFactoryBuffer)
struct tagCInterfaceProxyVtbl * PCInterfaceProxyVtblList
struct tagCInterfaceProxyHeader CInterfaceProxyHeader
RPCRTAPI void WINAPI CStdStubBuffer_Disconnect(IRpcStubBuffer *This)
RPCRTAPI void RPC_ENTRY NdrProxyInitialize(void *This, PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDescriptor, unsigned int ProcNum)
struct tagProxyFileInfo ProxyFileInfo
struct tagCInterfaceStubVtbl * PCInterfaceStubVtblList
RPCRTAPI HRESULT RPC_ENTRY NdrProxyErrorHandler(DWORD dwExceptionCode)
RPCRTAPI ULONG WINAPI NdrCStdStubBuffer_Release(IRpcStubBuffer *This, IPSFactoryBuffer *pPSF)
RPCRTAPI HRESULT WINAPI CStdStubBuffer_Connect(IRpcStubBuffer *This, IUnknown *pUnkServer)
ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *This)
struct tagCStdPSFactoryBuffer CStdPSFactoryBuffer
CInterfaceProxyHeader header
CInterfaceStubHeader header
const ProxyFileInfo ** pProxyFileList
const IPSFactoryBufferVtbl * lpVtbl
const struct ICallFactoryVtbl * pCallFactoryVtbl
struct IUnknown * pvServerObject
const IRpcStubBufferVtbl * lpVtbl
struct IPSFactoryBuffer * pPSFactory
unsigned short TableVersion
const IID ** pDelegatedIIDs
const PCInterfaceStubVtblList * pStubVtblList
const IID ** pAsyncIIDLookup
const PIIDLookup pIIDLookupRtn
const PCInterfaceProxyVtblList * pProxyVtblList
const PCInterfaceName * pNamesArray