summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/rpcproxy.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/sdk/inc/rpcproxy.h')
-rw-r--r--public/sdk/inc/rpcproxy.h586
1 files changed, 586 insertions, 0 deletions
diff --git a/public/sdk/inc/rpcproxy.h b/public/sdk/inc/rpcproxy.h
new file mode 100644
index 000000000..a10429632
--- /dev/null
+++ b/public/sdk/inc/rpcproxy.h
@@ -0,0 +1,586 @@
+/*++
+
+Copyright (c) 1992-1996 Microsoft Corporation
+
+Module Name:
+
+ rpcproxy.h
+
+Abstract:
+
+ Definitions for rpc proxy stubs.
+
+Compiler switches:
+
+ -DREGISTER_PROXY_DLL
+ Generates DllMain, DllRegisterServer, and DllUnregisterServer functions
+ for automatically registering a proxy DLL.
+
+ -DPROXY_CLSID=clsid
+ Specifies a class ID to be used by the proxy DLL.
+
+ -DPROXY_CLSID_IS={0x6f11fe5c,0x2fc5,0x101b,{0x9e,0x45,0x00,0x00,0x0b,0x65,0xc7,0xef}}
+ Specifies the value of the class ID to be used by the proxy DLL.
+
+ -DNT35_STRICT
+ Specifies that the target platform is Windows NT 3.5. This switch disables
+ the new functions added after the Windows NT 3.5 release.
+
+--*/
+
+#ifndef __RPCPROXY_H__
+#define __RPCPROXY_H__
+#define __midl_proxy
+
+#ifndef INC_OLE2
+#define INC_OLE2
+#endif
+
+#if defined(WIN32) || defined(_MPPC_)
+
+//We need to define REFIID, REFCLSID, REFGUID, & REFFMTID here so that the
+//proxy code won't get the const GUID *const definition.
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+typedef struct _GUID
+{
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[8];
+} GUID;
+#endif /* GUID_DEFINED */
+
+#if !defined( __IID_DEFINED__ )
+ #define __IID_DEFINED__
+
+ typedef GUID IID;
+ typedef IID *LPIID;
+ #define IID_NULL GUID_NULL
+ #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
+ typedef GUID CLSID;
+ typedef CLSID *LPCLSID;
+ #define CLSID_NULL GUID_NULL
+ #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
+ typedef GUID FMTID;
+ typedef FMTID *LPFMTID;
+ #define FMTID_NULL GUID_NULL
+ #define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
+
+ #ifndef _REFGUID_DEFINED
+ #define _REFGUID_DEFINED
+ typedef const GUID *REFGUID;
+ #endif // !_REFGUID_DEFINED
+
+ #ifndef _REFIID_DEFINED
+ #define _REFIID_DEFINED
+ typedef const IID *REFIID;
+ #endif // !_REFIID_DEFINED
+
+ #ifndef _REFCLSID_DEFINED
+ #define _REFCLSID_DEFINED
+ typedef const CLSID *REFCLSID;
+ #endif // !_REFCLSID_DEFINED
+
+ #ifndef _REFFMTID_DEFINED
+ #define _REFFMTID_DEFINED
+ typedef const FMTID *REFFMTID;
+ #endif // !_REFFMTID_DEFINED
+
+#endif // !__IID_DEFINED__
+
+// forward declarations
+struct tagCInterfaceStubVtbl;
+struct tagCInterfaceProxyVtbl;
+
+typedef struct tagCInterfaceStubVtbl * PCInterfaceStubVtblList;
+typedef struct tagCInterfaceProxyVtbl * PCInterfaceProxyVtblList;
+typedef const char * PCInterfaceName;
+typedef int __stdcall IIDLookupRtn( const IID * pIID, int * pIndex );
+typedef IIDLookupRtn * PIIDLookup;
+
+// pointers to arrays of CInterfaceProxyVtbl's and CInterfaceStubVtbls
+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;
+
+// extended info with list of interface names
+typedef ProxyFileInfo ExtendedProxyFileInfo;
+
+#include <rpc.h>
+#include <rpcndr.h>
+#include <string.h>
+#include <memory.h>
+
+typedef struct tagCInterfaceProxyHeader
+{
+ //
+ // New fields should be added here, at the beginning of the structure.
+ //
+#ifdef USE_STUBLESS_PROXY
+ const void * pStublessProxyInfo;
+#endif
+ const IID * piid;
+} CInterfaceProxyHeader;
+
+// Macro used for ANSI compatible stubs.
+
+#if defined(_MPPC_)
+#define CINTERFACE_PROXY_VTABLE( n ) \
+struct \
+{ \
+ CInterfaceProxyHeader header; \
+ void * pDummyEntryForPowerMac; \
+ void *Vtbl[ n ]; \
+}
+#else
+#define CINTERFACE_PROXY_VTABLE( n ) \
+struct \
+{ \
+ CInterfaceProxyHeader header; \
+ void *Vtbl[ n ]; \
+}
+#endif
+
+#pragma warning( disable:4200 )
+typedef struct tagCInterfaceProxyVtbl
+{
+ CInterfaceProxyHeader header;
+#if defined(_MPPC_)
+ void * pDummyEntryForPowerMac;
+#endif
+#if defined( _MSC_VER )
+ void *Vtbl[];
+#else
+ void *Vtbl[1];
+#endif
+} CInterfaceProxyVtbl;
+#pragma warning( default:4200 )
+
+typedef
+void
+(__RPC_STUB __RPC_FAR * PRPC_STUB_FUNCTION) (
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer * _pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD __RPC_FAR *pdwStubPhase);
+
+typedef struct tagCInterfaceStubHeader
+{
+ //New fields should be added here, at the beginning of the structure.
+ 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; //Points to Vtbl field in CInterfaceStubVtbl.
+ long RefCount;
+ struct IUnknown * pvServerObject;
+} CStdStubBuffer;
+
+typedef struct tagCStdPSFactoryBuffer
+{
+ const IPSFactoryBufferVtbl *lpVtbl;
+ long RefCount;
+ const ProxyFileInfo ** pProxyFileList;
+ long Filler1; //Reserved for future use.
+} CStdPSFactoryBuffer;
+
+void RPC_ENTRY
+NdrProxyInitialize(
+ void * This,
+ PRPC_MESSAGE pRpcMsg,
+ PMIDL_STUB_MESSAGE pStubMsg,
+ PMIDL_STUB_DESC pStubDescriptor,
+ unsigned int ProcNum );
+
+void RPC_ENTRY
+NdrProxyGetBuffer(
+ void * This,
+ PMIDL_STUB_MESSAGE pStubMsg);
+
+void RPC_ENTRY
+NdrProxySendReceive(
+ void *This,
+ MIDL_STUB_MESSAGE *pStubMsg);
+
+void RPC_ENTRY
+NdrProxyFreeBuffer(
+ void *This,
+ MIDL_STUB_MESSAGE *pStubMsg);
+
+HRESULT RPC_ENTRY
+NdrProxyErrorHandler(
+ DWORD dwExceptionCode);
+
+void RPC_ENTRY
+NdrStubInitialize(
+ PRPC_MESSAGE pRpcMsg,
+ PMIDL_STUB_MESSAGE pStubMsg,
+ PMIDL_STUB_DESC pStubDescriptor,
+ IRpcChannelBuffer * pRpcChannelBuffer);
+
+void __RPC_STUB NdrStubForwardingFunction(
+ IN IRpcStubBuffer * This,
+ IN IRpcChannelBuffer * pChannel,
+ IN PRPC_MESSAGE pmsg,
+ OUT DWORD __RPC_FAR * pdwStubPhase);
+
+void RPC_ENTRY
+NdrStubGetBuffer(
+ IRpcStubBuffer * This,
+ IRpcChannelBuffer * pRpcChannelBuffer,
+ PMIDL_STUB_MESSAGE pStubMsg);
+
+HRESULT RPC_ENTRY
+NdrStubErrorHandler(
+ DWORD dwExceptionCode);
+
+HRESULT STDMETHODCALLTYPE
+CStdStubBuffer_QueryInterface(
+ IRpcStubBuffer *This,
+ REFIID riid,
+ void **ppvObject);
+
+ULONG STDMETHODCALLTYPE
+CStdStubBuffer_AddRef(
+ IRpcStubBuffer *This);
+
+ULONG STDMETHODCALLTYPE
+CStdStubBuffer_Release(
+ IRpcStubBuffer *This);
+
+ULONG STDMETHODCALLTYPE
+NdrCStdStubBuffer_Release(
+ IRpcStubBuffer *This,
+ IPSFactoryBuffer * pPSF);
+
+HRESULT STDMETHODCALLTYPE
+CStdStubBuffer_Connect(
+ IRpcStubBuffer *This,
+ IUnknown *pUnkServer);
+
+void STDMETHODCALLTYPE
+CStdStubBuffer_Disconnect(
+ IRpcStubBuffer *This);
+
+HRESULT STDMETHODCALLTYPE
+CStdStubBuffer_Invoke(
+ IRpcStubBuffer *This,
+ RPCOLEMESSAGE *pRpcMsg,
+ IRpcChannelBuffer *pRpcChannelBuffer);
+
+IRpcStubBuffer * STDMETHODCALLTYPE
+CStdStubBuffer_IsIIDSupported(
+ IRpcStubBuffer *This,
+ REFIID riid);
+
+ULONG STDMETHODCALLTYPE
+CStdStubBuffer_CountRefs(
+ IRpcStubBuffer *This);
+
+HRESULT STDMETHODCALLTYPE
+CStdStubBuffer_DebugServerQueryInterface(
+ IRpcStubBuffer *This,
+ void **ppv);
+
+void STDMETHODCALLTYPE
+CStdStubBuffer_DebugServerRelease(
+ IRpcStubBuffer *This,
+ void *pv);
+
+#if defined(_MPPC_)
+#define CStdStubBuffer_METHODS \
+ 0, /* a PowerMac dummy */ \
+ CStdStubBuffer_QueryInterface,\
+ CStdStubBuffer_AddRef, \
+ CStdStubBuffer_Release, \
+ CStdStubBuffer_Connect, \
+ CStdStubBuffer_Disconnect, \
+ CStdStubBuffer_Invoke, \
+ CStdStubBuffer_IsIIDSupported, \
+ CStdStubBuffer_CountRefs, \
+ CStdStubBuffer_DebugServerQueryInterface, \
+ CStdStubBuffer_DebugServerRelease
+#else
+#define CStdStubBuffer_METHODS \
+ CStdStubBuffer_QueryInterface,\
+ CStdStubBuffer_AddRef, \
+ CStdStubBuffer_Release, \
+ CStdStubBuffer_Connect, \
+ CStdStubBuffer_Disconnect, \
+ CStdStubBuffer_Invoke, \
+ CStdStubBuffer_IsIIDSupported, \
+ CStdStubBuffer_CountRefs, \
+ CStdStubBuffer_DebugServerQueryInterface, \
+ CStdStubBuffer_DebugServerRelease
+#endif
+
+//+-------------------------------------------------------------------------
+//
+// Macro definitions for the proxy file
+//
+//--------------------------------------------------------------------------
+
+#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 = 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;
+
+//+-------------------------------------------------------------------------
+//
+// Macro and routine definitions for the dlldata file
+//
+//--------------------------------------------------------------------------
+
+/****************************************************************************
+ * Proxy Dll APIs
+ ****************************************************************************/
+
+HRESULT RPC_ENTRY
+NdrDllGetClassObject (
+ IN REFCLSID rclsid,
+ IN REFIID riid,
+ OUT void ** ppv,
+ IN const ProxyFileInfo ** pProxyFileList,
+ IN const CLSID * pclsid,
+ IN CStdPSFactoryBuffer * pPSFactoryBuffer);
+
+HRESULT RPC_ENTRY
+NdrDllCanUnloadNow(
+ IN CStdPSFactoryBuffer * pPSFactoryBuffer);
+
+/*************************************************************************
+The following new functions were added after the Windows NT 3.5 release.
+Programs intended to run on Windows NT 3.5 should define NT35_STRICT to
+ensure that no new functions are used.
+*************************************************************************/
+#ifndef NT35_STRICT
+
+HRESULT RPC_ENTRY NdrDllRegisterProxy(
+ IN HMODULE hDll,
+ IN const ProxyFileInfo ** pProxyFileList,
+ IN const CLSID * pclsid);
+
+HRESULT RPC_ENTRY NdrDllUnregisterProxy(
+ IN HMODULE hDll,
+ IN const ProxyFileInfo ** pProxyFileList,
+ IN const CLSID * pclsid);
+
+
+#define REGISTER_PROXY_DLL_ROUTINES(pProxyFileList, pClsID) \
+ \
+ HINSTANCE hProxyDll = 0; \
+ \
+ /*DllMain saves the DLL module handle for later use by DllRegisterServer */ \
+ BOOL WINAPI DllMain( \
+ HINSTANCE hinstDLL, \
+ DWORD fdwReason, \
+ LPVOID lpvReserved) \
+ { \
+ if(fdwReason == DLL_PROCESS_ATTACH) \
+ hProxyDll = hinstDLL; \
+ return TRUE; \
+ } \
+ \
+ /* DllRegisterServer registers the interfaces contained in the proxy DLL. */ \
+ HRESULT STDAPICALLTYPE DllRegisterServer() \
+ { \
+ return NdrDllRegisterProxy(hProxyDll, pProxyFileList, pClsID); \
+ } \
+ \
+ /* DllUnregisterServer unregisters the interfaces contained in the proxy DLL. */ \
+ HRESULT STDAPICALLTYPE DllUnregisterServer() \
+ { \
+ return NdrDllUnregisterProxy(hProxyDll, pProxyFileList, pClsID); \
+ }
+
+//Delegation support.
+#define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction
+
+ULONG STDMETHODCALLTYPE
+CStdStubBuffer2_Release(IRpcStubBuffer *This);
+
+ULONG STDMETHODCALLTYPE
+NdrCStdStubBuffer2_Release(IRpcStubBuffer *This,IPSFactoryBuffer * pPSF);
+
+#define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
+
+#endif //NT35_STRICT
+/*************************************************************************
+End of new functions.
+*************************************************************************/
+
+// PROXY_CLSID has precedence over PROXY_CLSID_IS
+
+#ifdef PROXY_CLSID
+
+#define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID;
+
+#else // PROXY_CLSID
+
+#ifdef PROXY_CLSID_IS
+#define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
+#define PROXY_CLSID CLSID_PSFactoryBuffer
+#else // PROXY_CLSID_IS
+#define CLSID_PSFACTORYBUFFER
+#endif //PROXY_CLSID_IS
+
+#endif //PROXY_CLSID
+
+// if the user specified an override for the class id, it is
+// PROXY_CLSID at this point
+
+#ifndef PROXY_CLSID
+#define GET_DLL_CLSID \
+ ( aProxyFileList[0]->pStubVtblList[0] != 0 ? \
+ aProxyFileList[0]->pStubVtblList[0]->header.piid : 0)
+#else //PROXY_CLSID
+#define GET_DLL_CLSID &PROXY_CLSID
+#endif //PROXY_CLSID
+
+
+
+
+#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 };
+
+// return pointers to the class information
+
+#define DLLDATA_GETPROXYDLLINFO(pPFList,pClsid) \
+ void RPC_ENTRY GetProxyDllInfo( const ProxyFileInfo*** pInfo, const CLSID ** pId ) \
+ { \
+ *pInfo = pPFList; \
+ *pId = pClsid; \
+ };
+
+// ole entry points:
+#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() \
+ { \
+ 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 //PROXY_DELEGATION
+
+
+#ifdef REGISTER_PROXY_DLL
+#define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID ) REGISTER_PROXY_DLL_ROUTINES(pProxyFileList,pClsID )
+#else
+#define DLLREGISTRY_ROUTINES(pProxyFileList,pClsID )
+#endif //REGISTER_PROXY_DLL
+
+
+// the dll entry points that must be defined
+#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) \
+ \
+
+ // more code goes here...
+
+
+#define DLLDATA_STANDARD_ROUTINES \
+ DLLDATA_ROUTINES( (const ProxyFileInfo**) pProxyFileList, &CLSID_PSFactoryBuffer ) \
+
+#else // !defined(__RPC_DOS__) && !defined(__RPC_WIN16__)
+
+//+-------------------------------------------------------------------------
+//
+// 16-bit definitions (all empty)
+//
+//--------------------------------------------------------------------------
+
+#endif // WIN32 or _MPPC_
+
+#endif // __RPCPROXY_H__