From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- public/sdk/inc/rpcproxy.h | 586 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 586 insertions(+) create mode 100644 public/sdk/inc/rpcproxy.h (limited to 'public/sdk/inc/rpcproxy.h') 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 +#include +#include +#include + +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__ -- cgit v1.2.3