home *** CD-ROM | disk | FTP | other *** search
- /*++
-
- 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__
-