cf62424b92
cguid.h, commctrl.h, commdlg.h, cpl.h, cplext.h, custcntl.h, dbt.h, dde.h, ddeml.h, dlgs.h, excpt.h, httpext.h, imagehlp.h, imm.h, initguid.h, intshcut.h, ipexport.h, iphlpapi.h, ipifcons.h, iprtrmib.h, iptypes.h, isguids.h, largeint.h, lm.h, lmaccess.h, lmalert.h, lmapibuf.h, lmat.h, lmaudit.h, lmbrowsr.h, lmchdev.h, lmconfig.h, lmcons.h, lmerr.h, lmerrlog.h, lmmsg.h, lmremutl.h, lmrepl.h, lmserver.h, lmshare.h, lmsname.h, lmstats.h, lmsvc.h, lmuse.h, lmuseflg.h, lmwksta.h, lzexpand.h, mapi.h, mciavi.h, mcx.h, mmsystem.h, mswsock.h, nb30.h, nddeapi.h, nspapi.h, ntdef.h, ntsecapi.h, ntsecpkg.h, oaidl.h, objbase.h, objfwd.h, objidl.h, odbcinst.h, ole.h, ole2.h, ole2ver.h, oleauto.h, olectl.h, olectlid.h, oledlg.h, oleidl.h, pbt.h, prsht.h, psapi.h, rapi.h, ras.h, raserror.h, rassapi.h, regstr.h, richedit.h, richole.h, rpc.h, rpcdce.h, rpcdce2.h, rpcdcep.h, rpcndr.h, rpcnsi.h, rpcnsip.h, rpcnterr.h, rpcproxy.h, schannel.h, schnlsp.h, scrnsave.h, security.h, setupapi.h, shellapi.h, shlguid.h, shlobj.h, sql.h, sqlext.h, sqltypes.h, sqlucode.h, sspi.h, subauth.h, tlhelp32.h, unknwn.h, userenv.h, w32api.h, winbase.h, wincon.h, wincrypt.h, windef.h, windows.h, windowsx.h, winerror.h, wingdi.h, wininet.h, winioctl.h, winnetwk.h, winnls.h, winnt.h, winperf.h, winreg.h, winresrc.h, winsock.h, winsock2.h, winspool.h, winsvc.h, winuser.h, winver.h, ws2tcpip.h, wsnetbs.h, wtypes.h, zmouse.h: Add #pragma GCC system_header if __GNUC__ >= 3. * include/mapi.h: Change header guard name to _MAPI_H for consistency.
201 lines
8.5 KiB
C
201 lines
8.5 KiB
C
/*
|
|
-DREGISTER_PROXY_DLL Generates DllMain, DllRegisterServer, and DllUnregisterServer
|
|
-DPROXY_CLSID=clsid Specifies a class ID to be used by the proxy DLL.
|
|
-DPROXY_CLSID_IS={..} Specifies the class ID to be used by the proxy DLL.
|
|
-DNT35_STRICT No new features
|
|
*/
|
|
#ifndef _RPCPROXY_H
|
|
#define _RPCPROXY_H
|
|
#if __GNUC__ >=3
|
|
#pragma GCC system_header
|
|
#endif
|
|
|
|
#if defined __cplusplus && !defined CINTERFACE
|
|
#warning "rpcproxy type definitions require CINTERFACE"
|
|
#else
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#include <rpc.h>
|
|
#include <rpcndr.h>
|
|
#include <string.h>
|
|
|
|
#define CStdStubBuffer_METHODS CStdStubBuffer_QueryInterface,CStdStubBuffer_AddRef,\
|
|
CStdStubBuffer_Release,CStdStubBuffer_Connect,CStdStubBuffer_Disconnect,CStdStubBuffer_Invoke,\
|
|
CStdStubBuffer_IsIIDSupported,CStdStubBuffer_CountRefs,CStdStubBuffer_DebugServerQueryInterface,\
|
|
CStdStubBuffer_DebugServerRelease
|
|
#define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID,name##_ProxyVtblList[index]->header.piid,16)
|
|
#define IID_BS_LOOKUP_SETUP int result, low=-1;
|
|
#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; }
|
|
#define IID_BS_LOOKUP_NEXT_TEST(name,split) if ((result = name##_CHECK_IID(low+split))>=0) { low=low+split; if (!result) goto found_label; }
|
|
#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;
|
|
#define REGISTER_PROXY_DLL_ROUTINES(pProxyFileList, pClsID) \
|
|
HINSTANCE hProxyDll = 0; \
|
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) \
|
|
{ \
|
|
if(fdwReason == DLL_PROCESS_ATTACH) hProxyDll = hinstDLL; \
|
|
return TRUE; \
|
|
} \
|
|
HRESULT STDAPICALLTYPE DllRegisterServer(void) \
|
|
{\
|
|
return NdrDllRegisterProxy(hProxyDll, pProxyFileList, pClsID); \
|
|
}\
|
|
HRESULT STDAPICALLTYPE DllUnregisterServer(void)\
|
|
{\
|
|
return NdrDllUnregisterProxy(hProxyDll, pProxyFileList, pClsID);\
|
|
}
|
|
#ifdef PROXY_CLSID
|
|
#define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID;
|
|
#else
|
|
#ifdef PROXY_CLSID_IS
|
|
#define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
|
|
#define PROXY_CLSID CLSID_PSFactoryBuffer
|
|
#else
|
|
#define CLSID_PSFACTORYBUFFER
|
|
#endif
|
|
#endif
|
|
#ifndef PROXY_CLSID
|
|
#define GET_DLL_CLSID (aProxyFileList[0]->pStubVtblList[0] != 0 ? aProxyFileList[0]->pStubVtblList[0]->header.piid : 0)
|
|
#else
|
|
#define GET_DLL_CLSID &PROXY_CLSID
|
|
#endif
|
|
#define EXTERN_PROXY_FILE(name) EXTERN_C const ProxyFileInfo name##_ProxyFileInfo;
|
|
#define PROXYFILE_LIST_START const ProxyFileInfo * aProxyFileList[] = {
|
|
#define REFERENCE_PROXY_FILE(name) & name##_ProxyFileInfo
|
|
#define PROXYFILE_LIST_END 0 };
|
|
#define DLLDATA_GETPROXYDLLINFO(pPFList,pClsid) \
|
|
void RPC_ENTRY GetProxyDllInfo( const ProxyFileInfo*** pInfo, const CLSID ** pId ) \
|
|
{ *pInfo = pPFList; *pId = pClsid; };
|
|
#define DLLGETCLASSOBJECTROUTINE(pPFlist, pClsid,pFactory) HRESULT STDAPICALLTYPE DllGetClassObject(REFCLSID rclsid,REFIID riid,void **ppv) \
|
|
{ return NdrDllGetClassObject(rclsid,riid,ppv,pPFlist,pClsid,pFactory ); }
|
|
#define DLLCANUNLOADNOW(pFactory) HRESULT STDAPICALLTYPE DllCanUnloadNow(void) \
|
|
{ return NdrDllCanUnloadNow( pFactory ); }
|
|
#define DLLDUMMYPURECALL void __cdecl _purecall(void) { }
|
|
#define CSTDSTUBBUFFERRELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *This) \
|
|
{ return NdrCStdStubBuffer_Release(This,(IPSFactoryBuffer *)pFactory); }
|
|
#ifdef PROXY_DELEGATION
|
|
#define CSTDSTUBBUFFER2RELEASE(pFactory) ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) \
|
|
{ return NdrCStdStubBuffer2_Release(This,(IPSFactoryBuffer *)pFactory); }
|
|
#else
|
|
#define CSTDSTUBBUFFER2RELEASE(pFactory)
|
|
#endif
|
|
|
|
#ifdef REGISTER_PROXY_DLL
|
|
#define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID ) REGISTER_PROXY_DLL_ROUTINES(pProxyFileList,pClsID)
|
|
#else
|
|
#define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID)
|
|
#endif
|
|
#define DLLDATA_ROUTINES(pProxyFileList,pClsID) \
|
|
CLSID_PSFACTORYBUFFER \
|
|
CStdPSFactoryBuffer gPFactory = {0,0,0,0}; \
|
|
DLLDATA_GETPROXYDLLINFO(pProxyFileList,pClsID) \
|
|
DLLGETCLASSOBJECTROUTINE(pProxyFileList,pClsID,&gPFactory) \
|
|
DLLCANUNLOADNOW(&gPFactory) \
|
|
CSTDSTUBBUFFERRELEASE(&gPFactory) \
|
|
CSTDSTUBBUFFER2RELEASE(&gPFactory) \
|
|
DLLDUMMYPURECALL \
|
|
DLLREGISTRY_ROUTINES(pProxyFileList, pClsID)
|
|
|
|
#define DLLDATA_STANDARD_ROUTINES DLLDATA_ROUTINES( (const ProxyFileInfo**) pProxyFileList, &CLSID_PSFactoryBuffer)
|
|
|
|
struct tagCInterfaceStubVtbl;
|
|
struct tagCInterfaceProxyVtbl;
|
|
typedef struct tagCInterfaceStubVtbl *PCInterfaceStubVtblList;
|
|
typedef struct tagCInterfaceProxyVtbl *PCInterfaceProxyVtblList;
|
|
typedef const char *PCInterfaceName;
|
|
typedef int __stdcall IIDLookupRtn(const IID*,int*);
|
|
typedef IIDLookupRtn *PIIDLookup;
|
|
typedef struct tagProxyFileInfo {
|
|
const PCInterfaceProxyVtblList *pProxyVtblList;
|
|
const PCInterfaceStubVtblList *pStubVtblList;
|
|
const PCInterfaceName * pNamesArray;
|
|
const IID ** pDelegatedIIDs;
|
|
const PIIDLookup pIIDLookupRtn;
|
|
unsigned short TableSize;
|
|
unsigned short TableVersion;
|
|
unsigned long Filler1;
|
|
unsigned long Filler2;
|
|
unsigned long Filler3;
|
|
unsigned long Filler4;
|
|
}ProxyFileInfo;
|
|
typedef ProxyFileInfo ExtendedProxyFileInfo;
|
|
|
|
typedef struct tagCInterfaceProxyHeader {
|
|
#ifdef USE_STUBLESS_PROXY
|
|
const void *pStublessProxyInfo;
|
|
#endif
|
|
const IID *piid;
|
|
} CInterfaceProxyHeader;
|
|
typedef struct tagCInterfaceProxyVtbl {
|
|
CInterfaceProxyHeader header;
|
|
#if defined(__WATCOMC__)
|
|
void *Vtbl[1];
|
|
#else
|
|
#ifdef __GNUC__
|
|
__extension__
|
|
#endif
|
|
void *Vtbl[0];
|
|
#endif
|
|
} CInterfaceProxyVtbl;
|
|
typedef void (__RPC_STUB *PRPC_STUB_FUNCTION)(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,DWORD*);
|
|
typedef struct tagCInterfaceStubHeader {
|
|
const IID *piid;
|
|
const MIDL_SERVER_INFO *pServerInfo;
|
|
unsigned long DispatchTableCount;
|
|
const PRPC_STUB_FUNCTION *pDispatchTable;
|
|
} CInterfaceStubHeader;
|
|
typedef struct tagCInterfaceStubVtbl {
|
|
CInterfaceStubHeader header;
|
|
IRpcStubBufferVtbl Vtbl;
|
|
} CInterfaceStubVtbl;
|
|
typedef struct tagCStdStubBuffer {
|
|
const struct IRpcStubBufferVtbl * lpVtbl;
|
|
long RefCount;
|
|
struct IUnknown *pvServerObject;
|
|
} CStdStubBuffer;
|
|
typedef struct tagCStdPSFactoryBuffer {
|
|
const IPSFactoryBufferVtbl *lpVtbl;
|
|
long RefCount;
|
|
const ProxyFileInfo ** pProxyFileList;
|
|
long Filler1;
|
|
} CStdPSFactoryBuffer;
|
|
void RPC_ENTRY NdrProxyInitialize(void*,PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,unsigned int);
|
|
void RPC_ENTRY NdrProxyGetBuffer(void*,PMIDL_STUB_MESSAGE);
|
|
void RPC_ENTRY NdrProxySendReceive(void*,MIDL_STUB_MESSAGE*);
|
|
void RPC_ENTRY NdrProxyFreeBuffer(void*,MIDL_STUB_MESSAGE*);
|
|
HRESULT RPC_ENTRY NdrProxyErrorHandler(DWORD);
|
|
void RPC_ENTRY NdrStubInitialize(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,IRpcChannelBuffer*);
|
|
void __RPC_STUB NdrStubForwardingFunction(IRpcStubBuffer*,IRpcChannelBuffer*,PRPC_MESSAGE,DWORD*);
|
|
void RPC_ENTRY NdrStubGetBuffer(IRpcStubBuffer*,IRpcChannelBuffer*,PMIDL_STUB_MESSAGE);
|
|
HRESULT RPC_ENTRY NdrStubErrorHandler(DWORD);
|
|
HRESULT STDMETHODCALLTYPE CStdStubBuffer_QueryInterface(IRpcStubBuffer*,REFIID,void**);
|
|
ULONG STDMETHODCALLTYPE CStdStubBuffer_AddRef(IRpcStubBuffer*);
|
|
ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer*);
|
|
ULONG STDMETHODCALLTYPE NdrCStdStubBuffer_Release(IRpcStubBuffer*,IPSFactoryBuffer*);
|
|
HRESULT STDMETHODCALLTYPE CStdStubBuffer_Connect(IRpcStubBuffer*,IUnknown*);
|
|
void STDMETHODCALLTYPE CStdStubBuffer_Disconnect(IRpcStubBuffer*);
|
|
HRESULT STDMETHODCALLTYPE CStdStubBuffer_Invoke(IRpcStubBuffer*,RPCOLEMESSAGE*,IRpcChannelBuffer*);
|
|
IRpcStubBuffer* STDMETHODCALLTYPE CStdStubBuffer_IsIIDSupported(IRpcStubBuffer*,REFIID);
|
|
ULONG STDMETHODCALLTYPE CStdStubBuffer_CountRefs(IRpcStubBuffer*);
|
|
HRESULT STDMETHODCALLTYPE CStdStubBuffer_DebugServerQueryInterface(IRpcStubBuffer*,void**);
|
|
void STDMETHODCALLTYPE CStdStubBuffer_DebugServerRelease(IRpcStubBuffer*,void*);
|
|
HRESULT RPC_ENTRY NdrDllGetClassObject(REFCLSID,REFIID,void**,const ProxyFileInfo**,const CLSID*,CStdPSFactoryBuffer*);
|
|
HRESULT RPC_ENTRY NdrDllCanUnloadNow(CStdPSFactoryBuffer*);
|
|
#ifndef NT35_STRICT
|
|
HRESULT RPC_ENTRY NdrDllRegisterProxy(HMODULE,const ProxyFileInfo**,const CLSID*);
|
|
HRESULT RPC_ENTRY NdrDllUnregisterProxy(HMODULE,const ProxyFileInfo**,const CLSID*);
|
|
#define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction
|
|
ULONG STDMETHODCALLTYPE
|
|
CStdStubBuffer2_Release(IRpcStubBuffer*);
|
|
ULONG STDMETHODCALLTYPE
|
|
NdrCStdStubBuffer2_Release(IRpcStubBuffer*,IPSFactoryBuffer*);
|
|
#define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* defined __cplusplus && !defined CINTERFACE */
|
|
#endif /* ndef _RPCPROXY_H */
|
|
|