windows-nt/Source/XPSP1/NT/com/rpc/ndr20/asyncu.h
2020-09-26 16:20:57 +08:00

238 lines
6 KiB
C

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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__