Re-install OpenSSL 0.9.8k
[msysgit.git] / include / rpcproxy.h
blob606526de373ccb54dfe45324978d9235901ca6e0
1 /*
2 -DREGISTER_PROXY_DLL Generates DllMain, DllRegisterServer, and DllUnregisterServer
3 -DPROXY_CLSID=clsid Specifies a class ID to be used by the proxy DLL.
4 -DPROXY_CLSID_IS={..} Specifies the class ID to be used by the proxy DLL.
5 -DNT35_STRICT No new features
6 */
7 #ifndef _RPCPROXY_H
8 #define _RPCPROXY_H
9 #if defined __cplusplus && !defined CINTERFACE
10 #warning "rpcproxy type definitions require CINTERFACE"
11 #else
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 #include <rpc.h>
16 #include <rpcndr.h>
17 #include <string.h>
19 #define CStdStubBuffer_METHODS CStdStubBuffer_QueryInterface,CStdStubBuffer_AddRef,\
20 CStdStubBuffer_Release,CStdStubBuffer_Connect,CStdStubBuffer_Disconnect,CStdStubBuffer_Invoke,\
21 CStdStubBuffer_IsIIDSupported,CStdStubBuffer_CountRefs,CStdStubBuffer_DebugServerQueryInterface,\
22 CStdStubBuffer_DebugServerRelease
23 #define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID,name##_ProxyVtblList[index]->header.piid,16)
24 #define IID_BS_LOOKUP_SETUP int result, low=-1;
25 #define IID_BS_LOOKUP_INITIAL_TEST(name,sz,split) if ((result = name##_CHECK_IID(split))>0) { low=sz-split;} else if (!result) { low = split; goto found_label; }
26 #define IID_BS_LOOKUP_NEXT_TEST(name,split) if ((result = name##_CHECK_IID(low+split))>=0) { low=low+split; if (!result) goto found_label; }
27 #define IID_BS_LOOKUP_RETURN_RESULT(name,sz,index) low+=1; if ((low>=sz )||(result=name##_CHECK_IID(low))) goto not_found_label; found_label: (index)=low; return 1; not_found_label: return 0;
28 #define REGISTER_PROXY_DLL_ROUTINES(pProxyFileList, pClsID) \
29 HINSTANCE hProxyDll = 0; \
30 BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) \
31 { \
32 if(fdwReason == DLL_PROCESS_ATTACH) hProxyDll = hinstDLL; \
33 return TRUE; \
34 } \
35 HRESULT STDAPICALLTYPE DllRegisterServer(void) \
37 return NdrDllRegisterProxy(hProxyDll, pProxyFileList, pClsID); \
39 HRESULT STDAPICALLTYPE DllUnregisterServer(void)\
41 return NdrDllUnregisterProxy(hProxyDll, pProxyFileList, pClsID);\
43 #ifdef PROXY_CLSID
44 #define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID;
45 #else
46 #ifdef PROXY_CLSID_IS
47 #define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
48 #define PROXY_CLSID CLSID_PSFactoryBuffer
49 #else
50 #define CLSID_PSFACTORYBUFFER
51 #endif
52 #endif
53 #ifndef PROXY_CLSID
54 #define GET_DLL_CLSID (aProxyFileList[0]->pStubVtblList[0] != 0 ? aProxyFileList[0]->pStubVtblList[0]->header.piid : 0)
55 #else
56 #define GET_DLL_CLSID &PROXY_CLSID
57 #endif
58 #define EXTERN_PROXY_FILE(name) EXTERN_C const ProxyFileInfo name##_ProxyFileInfo;
59 #define PROXYFILE_LIST_START const ProxyFileInfo * aProxyFileList[] = {
60 #define REFERENCE_PROXY_FILE(name) & name##_ProxyFileInfo
61 #define PROXYFILE_LIST_END 0 };
62 #define DLLDATA_GETPROXYDLLINFO(pPFList,pClsid) \
63 void RPC_ENTRY GetProxyDllInfo( const ProxyFileInfo*** pInfo, const CLSID ** pId ) \
64 { *pInfo = pPFList; *pId = pClsid; };
65 #define DLLGETCLASSOBJECTROUTINE(pPFlist, pClsid,pFactory) HRESULT STDAPICALLTYPE DllGetClassObject(REFCLSID rclsid,REFIID riid,void **ppv) \
66 { return NdrDllGetClassObject(rclsid,riid,ppv,pPFlist,pClsid,pFactory ); }
67 #define DLLCANUNLOADNOW(pFactory) HRESULT STDAPICALLTYPE DllCanUnloadNow(void) \
68 { return NdrDllCanUnloadNow( pFactory ); }
69 #define DLLDUMMYPURECALL void __cdecl _purecall(void) { }
70 #define CSTDSTUBBUFFERRELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *This) \
71 { return NdrCStdStubBuffer_Release(This,(IPSFactoryBuffer *)pFactory); }
72 #ifdef PROXY_DELEGATION
73 #define CSTDSTUBBUFFER2RELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) \
74 { return NdrCStdStubBuffer2_Release(This,(IPSFactoryBuffer *)pFactory); }
75 #else
76 #define CSTDSTUBBUFFER2RELEASE(pFactory)
77 #endif
79 #ifdef REGISTER_PROXY_DLL
80 #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID ) REGISTER_PROXY_DLL_ROUTINES(pProxyFileList,pClsID)
81 #else
82 #define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID)
83 #endif
84 #define DLLDATA_ROUTINES(pProxyFileList,pClsID) \
85 CLSID_PSFACTORYBUFFER \
86 CStdPSFactoryBuffer gPFactory = {0,0,0,0}; \
87 DLLDATA_GETPROXYDLLINFO(pProxyFileList,pClsID) \
88 DLLGETCLASSOBJECTROUTINE(pProxyFileList,pClsID,&gPFactory) \
89 DLLCANUNLOADNOW(&gPFactory) \
90 CSTDSTUBBUFFERRELEASE(&gPFactory) \
91 CSTDSTUBBUFFER2RELEASE(&gPFactory) \
92 DLLDUMMYPURECALL \
93 DLLREGISTRY_ROUTINES(pProxyFileList, pClsID)
95 #define DLLDATA_STANDARD_ROUTINES DLLDATA_ROUTINES( (const ProxyFileInfo**) pProxyFileList, &CLSID_PSFactoryBuffer)
97 struct tagCInterfaceStubVtbl;
98 struct tagCInterfaceProxyVtbl;
99 typedef struct tagCInterfaceStubVtbl *PCInterfaceStubVtblList;
100 typedef struct tagCInterfaceProxyVtbl *PCInterfaceProxyVtblList;
101 typedef const char *PCInterfaceName;
102 typedef int __stdcall IIDLookupRtn(const IID*,int*);
103 typedef IIDLookupRtn *PIIDLookup;
104 typedef struct tagProxyFileInfo {
105 const PCInterfaceProxyVtblList *pProxyVtblList;
106 const PCInterfaceStubVtblList *pStubVtblList;
107 const PCInterfaceName * pNamesArray;
108 const IID ** pDelegatedIIDs;
109 const PIIDLookup pIIDLookupRtn;
110 unsigned short TableSize;
111 unsigned short TableVersion;
112 unsigned long Filler1;
113 unsigned long Filler2;
114 unsigned long Filler3;
115 unsigned long Filler4;
116 }ProxyFileInfo;
117 typedef ProxyFileInfo ExtendedProxyFileInfo;
119 typedef struct tagCInterfaceProxyHeader {
120 #ifdef USE_STUBLESS_PROXY
121 const void *pStublessProxyInfo;
122 #endif
123 const IID *piid;
124 } CInterfaceProxyHeader;
125 typedef struct tagCInterfaceProxyVtbl {
126 CInterfaceProxyHeader header;
127 #if defined(__WATCOMC__)
128 void *Vtbl[1];
129 #else
130 #ifdef __GNUC__
131 __extension__
132 #endif
133 void *Vtbl[0];
134 #endif
135 } CInterfaceProxyVtbl;
136 typedef void (__RPC_STUB *PRPC_STUB_FUNCTION)(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,DWORD*);
137 typedef struct tagCInterfaceStubHeader {
138 const IID *piid;
139 const MIDL_SERVER_INFO *pServerInfo;
140 unsigned long DispatchTableCount;
141 const PRPC_STUB_FUNCTION *pDispatchTable;
142 } CInterfaceStubHeader;
143 typedef struct tagCInterfaceStubVtbl {
144 CInterfaceStubHeader header;
145 IRpcStubBufferVtbl Vtbl;
146 } CInterfaceStubVtbl;
147 typedef struct tagCStdStubBuffer {
148 const struct IRpcStubBufferVtbl * lpVtbl;
149 long RefCount;
150 struct IUnknown *pvServerObject;
151 } CStdStubBuffer;
152 typedef struct tagCStdPSFactoryBuffer {
153 const IPSFactoryBufferVtbl *lpVtbl;
154 long RefCount;
155 const ProxyFileInfo ** pProxyFileList;
156 long Filler1;
157 } CStdPSFactoryBuffer;
158 void RPC_ENTRY NdrProxyInitialize(void*,PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,unsigned int);
159 void RPC_ENTRY NdrProxyGetBuffer(void*,PMIDL_STUB_MESSAGE);
160 void RPC_ENTRY NdrProxySendReceive(void*,MIDL_STUB_MESSAGE*);
161 void RPC_ENTRY NdrProxyFreeBuffer(void*,MIDL_STUB_MESSAGE*);
162 HRESULT RPC_ENTRY NdrProxyErrorHandler(DWORD);
163 void RPC_ENTRY NdrStubInitialize(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,IRpcChannelBuffer*);
164 void __RPC_STUB NdrStubForwardingFunction(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,DWORD*);
165 void RPC_ENTRY NdrStubGetBuffer(IRpcStubBuffer*,IRpcChannelBuffer*,PMIDL_STUB_MESSAGE);
166 HRESULT RPC_ENTRY NdrStubErrorHandler(DWORD);
167 HRESULT STDMETHODCALLTYPE CStdStubBuffer_QueryInterface(IRpcStubBuffer*,REFIID,void**);
168 ULONG STDMETHODCALLTYPE CStdStubBuffer_AddRef(IRpcStubBuffer*);
169 ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer*);
170 ULONG STDMETHODCALLTYPE NdrCStdStubBuffer_Release(IRpcStubBuffer*,IPSFactoryBuffer*);
171 HRESULT STDMETHODCALLTYPE CStdStubBuffer_Connect(IRpcStubBuffer*,IUnknown*);
172 void STDMETHODCALLTYPE CStdStubBuffer_Disconnect(IRpcStubBuffer*);
173 HRESULT STDMETHODCALLTYPE CStdStubBuffer_Invoke(IRpcStubBuffer*,RPCOLEMESSAGE*,IRpcChannelBuffer*);
174 IRpcStubBuffer* STDMETHODCALLTYPE CStdStubBuffer_IsIIDSupported(IRpcStubBuffer*,REFIID);
175 ULONG STDMETHODCALLTYPE CStdStubBuffer_CountRefs(IRpcStubBuffer*);
176 HRESULT STDMETHODCALLTYPE CStdStubBuffer_DebugServerQueryInterface(IRpcStubBuffer*,void**);
177 void STDMETHODCALLTYPE CStdStubBuffer_DebugServerRelease(IRpcStubBuffer*,void*);
178 HRESULT RPC_ENTRY NdrDllGetClassObject(REFCLSID,REFIID,void**,const ProxyFileInfo**,const CLSID*,CStdPSFactoryBuffer*);
179 HRESULT RPC_ENTRY NdrDllCanUnloadNow(CStdPSFactoryBuffer*);
180 #ifndef NT35_STRICT
181 HRESULT RPC_ENTRY NdrDllRegisterProxy(HMODULE,const ProxyFileInfo**,const CLSID*);
182 HRESULT RPC_ENTRY NdrDllUnregisterProxy(HMODULE,const ProxyFileInfo**,const CLSID*);
183 #define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction
184 ULONG STDMETHODCALLTYPE
185 CStdStubBuffer2_Release(IRpcStubBuffer*);
186 ULONG STDMETHODCALLTYPE
187 NdrCStdStubBuffer2_Release(IRpcStubBuffer*,IPSFactoryBuffer*);
188 #define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
189 #endif
191 #ifdef __cplusplus
193 #endif
194 #endif /* defined __cplusplus && !defined CINTERFACE */
195 #endif /* ndef _RPCPROXY_H */