/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Copyright (c) 1996 - 1999 Microsoft Corporation Module Name : asyncu.h Abstract : This file contains the ndr async uuid implementation. Author : Ryszard K. Kott (ryszardk) Oct 1997 Revision History : ---------------------------------------------------------------------*/ #ifndef __ASYNCU_H__ #define __ASYNCU_H__ #define NDR_ASYNC_PROXY_SIGNATURE 0x78507341 /* AsPx */ #define NDR_ASYNC_STUB_SIGNATURE 0x74537341 /* AsSt */ #define NDR_DCOM_ASYNC_SIGNATURE 0x734d7341 /* AsMs */ #define NDR_FREED_ASYNC_SIGNATURE 0x65656561 /* aeee */ #define NDR_FREED_DCOM_SIGNATURE 0x65656564 /* deee */ #define NDR_DCOM_ASYNC_VERSION sizeof( NDR_DCOM_ASYNC_MESSAGE ) #define NDR_ASYNC_GUARD_SIZE (0x10) #define NDR_ASYNC_PREP_PHASE 1 #define NDR_ASYNC_SET_PHASE 2 #define NDR_ASYNC_CALL_PHASE 3 #define NDR_ASYNC_ERROR_PHASE 4 typedef struct _Flags { unsigned short ValidCallPending : 1; unsigned short ErrorPending : 1; unsigned short BadStubData : 1; unsigned short RuntimeCleanedUp : 1; unsigned short ClientHandleCreated : 1; unsigned short HandlelessObjCall : 1; unsigned short ClientDcomPipeCall : 1; unsigned short Unused : 9; } NDR_ASYNC_CALL_FLAGS; typedef struct _NDR_DCOM_ASYNC_MESSAGE { long Version; long Signature; SYNTAX_TYPE SyntaxType; long nBeginParams; void * BeginParams; long nFinishParams; void * FinishParams; uchar * BeginStack; uchar * FinishStack; ulong BeginStackSize; ulong FinishStackSize; NDR_ASYNC_CALL_FLAGS Flags; void * pThis; CStdAsyncProxyBuffer * pAsyncPB; CStdAsyncStubBuffer * pAsyncSB; ulong * pdwStubPhase; unsigned short StubPhase; unsigned long ErrorCode; RPC_MESSAGE RpcMsg; MIDL_STUB_MESSAGE StubMsg; NDR_PROC_CONTEXT ProcContext; uchar * pArg; // Note: the correlation cache needs to be sizeof(pointer) aligned unsigned _int64 AppStack; // stack continues on } NDR_DCOM_ASYNC_MESSAGE, *PNDR_DCOM_ASYNC_MESSAGE; #define AsyncAlloca( msg, size ) \ NdrpAlloca( &msg->ProcContext.AllocateContext, size ) HRESULT NdrpSetupBeginClientCall( CStdAsyncProxyBuffer * pAsyncPB, void * StartofStack, unsigned short StackSize, REFIID riid ); HRESULT NdrpSetupFinishClientCall( CStdAsyncProxyBuffer * pAsyncPB, void * StartofStack, unsigned short StackSize, REFIID riid, unsigned long AsyncProcNum ); HRESULT NdrpSetupBeginStubCall( CStdAsyncStubBuffer * pAsyncSB, unsigned short StackSize, REFIID riid ); HRESULT NdrpSetupFinishStubCall( CStdAsyncStubBuffer * pAsyncSB, unsigned short StackSize, REFIID riid ); HRESULT NdrpBeginDcomAsyncStubCall( struct IRpcStubBuffer * pThis, struct IRpcChannelBuffer * pChannel, PRPC_MESSAGE pRpcMsg, ulong * pdwStubPhase ); ULONG STDMETHODCALLTYPE NdrpAsyncProxyAddRef( CStdAsyncProxyBuffer * pAsyncPB ); ULONG STDMETHODCALLTYPE NdrpAsyncProxyRelease( CStdAsyncProxyBuffer * pAsyncPB ); HRESULT NdrpAsyncProxyLock( CStdAsyncProxyBuffer * pAsyncPB ); void NdrpAsyncProxyUnlock( CStdAsyncProxyBuffer * pAsyncPB ); HRESULT NdrpAsyncProxyCleanup( CStdAsyncProxyBuffer * pAsyncPB ); HRESULT NdrpSetupBeginServerCall( CStdAsyncStubBuffer * pAsyncPB, void * StartofStack, unsigned short StackSize, REFIID riid ); void NdrpCloneInOutArgs( NDR_DCOM_ASYNC_MESSAGE * pAsyncMsg, PPARAM_DESCRIPTION FinishParams, int FinishParamCount ); void NdrpFreeDcomAsyncMsg( PNDR_DCOM_ASYNC_MESSAGE pAsyncMsg ); HRESULT NdrpAsyncStubSignal( CStdAsyncStubBuffer * pAsyncSB ); HRESULT NdrpAsyncStubAddRef( CStdAsyncStubBuffer * pAsyncSB ); ULONG STDMETHODCALLTYPE NdrpAsyncStubRelease( CStdAsyncStubBuffer * pAsyncSB ); HRESULT NdrpAsyncStubLock( CStdAsyncStubBuffer * pAsyncSB ); void NdrpAsyncStubUnlock( CStdAsyncStubBuffer * pAsyncSB ); HRESULT NdrpAsyncStubCleanup( CStdAsyncStubBuffer * pAsyncSB ); BOOL NdrpDcomAsyncSend( PMIDL_STUB_MESSAGE pStubMsg, ISynchronize * pSynchronize ); BOOL NdrpDcomAsyncClientSend( PMIDL_STUB_MESSAGE pStubMsg, IUnknown * punkOuter ); void NdrDcomAsyncReceive( PMIDL_STUB_MESSAGE pStubMsg ); HRESULT NdrpValidateDcomAsyncMsg( PNDR_DCOM_ASYNC_MESSAGE pAsyncMsg ); HRESULT NdrpValidateDcomAsyncMsg( PNDR_DCOM_ASYNC_MESSAGE pAsyncMsg ); HRESULT NdrpCompleteDcomAsyncStubCall( CStdAsyncStubBuffer * pAsyncSB ); HRESULT NdrpValidateAsyncStubCall( CStdAsyncStubBuffer * pAsyncSB ); void NdrpCloneInOnlyCorrArgs( NDR_DCOM_ASYNC_MESSAGE * pAsyncMsg, PFORMAT_STRING pTypeFormat ); HRESULT NdrpValidateAsyncProxyCall( CStdAsyncProxyBuffer * pAsyncPB ); #define NdrHrFromWin32Error( exc ) NdrStubErrorHandler( exc ) #endif // __ASYNCU_H__