windows-nt/Source/XPSP1/NT/com/rpc/ndr20/asyncndr.h

152 lines
3.9 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 1996 - 2000 Microsoft Corporation
Module Name :
asyncndr.h
Abstract :
This file contains the ndr async related definitions.
Author :
Ryszard K. Kott (ryszardk) Nov 1996
Revision History :
---------------------------------------------------------------------*/
#ifndef __ASYNCNDR_H__
#define __ASYNCNDR_H__
#define RPC_ASYNC_CURRENT_VERSION RPC_ASYNC_VERSION_1_0
#define RPC_ASYNC_SIGNATURE 0x43595341 /* ASNC */
#define NDR_ASYNC_SIGNATURE 0x63797341 /* Asnc */
#define RPC_FREED_ASYNC_SIGNATURE 0x45454541 /* AEEE */
#define NDR_FREED_ASYNC_SIGNATURE 0x65656561 /* aeee */
#define RPC_ASYNC_HANDLE PRPC_ASYNC_STATE
#define NDR_ASYNC_VERSION sizeof( NDR_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 Unused : 10;
} NDR_ASYNC_CALL_FLAGS;
typedef struct _NDR_ASYNC_MESSAGE
{
long Version;
long Signature;
RPC_ASYNC_HANDLE AsyncHandle; // raw and CAsyncMgr *
NDR_ASYNC_CALL_FLAGS Flags;
unsigned short StubPhase;
unsigned long ErrorCode;
RPC_MESSAGE RpcMsg;
MIDL_STUB_MESSAGE StubMsg;
NDR_SCONTEXT CtxtHndl[MAX_CONTEXT_HNDL_NUMBER];
ulong * pdwStubPhase;
// Note: the correlation cache needs to be sizeof(pointer) aligned
NDR_PROC_CONTEXT ProcContext;
// guard at the end of the message
unsigned char AsyncGuard[NDR_ASYNC_GUARD_SIZE];
} NDR_ASYNC_MESSAGE, *PNDR_ASYNC_MESSAGE;
#define AsyncAlloca( msg, size ) \
NdrpAlloca( &msg->ProcContext.AllocateContext, size )
RPC_STATUS
NdrpCompleteAsyncCall (
IN PRPC_ASYNC_STATE AsyncHandle,
IN PNDR_ASYNC_MESSAGE pAsyncMsg,
IN void * pReply
);
RPC_STATUS
NdrpCompleteAsyncClientCall(
RPC_ASYNC_HANDLE AsyncHandle,
IN PNDR_ASYNC_MESSAGE pAsyncMsg,
void * pReturnValue
);
RPC_STATUS
NdrpCompleteAsyncServerCall(
RPC_ASYNC_HANDLE AsyncHandle,
IN PNDR_ASYNC_MESSAGE pAsyncMsg,
void * pReturnValue
);
RPC_STATUS
NdrpAsyncAbortCall(
PRPC_ASYNC_STATE AsyncHandle,
PNDR_ASYNC_MESSAGE pAsyncMsg,
unsigned long ExceptionCode,
BOOL bFreeParams
);
RPC_STATUS
NdrpInitializeAsyncMsg(
void * StartofStack,
PNDR_ASYNC_MESSAGE pAsyncMsg );
void
NdrpFreeAsyncMsg(
PNDR_ASYNC_MESSAGE pAsyncMsg );
void
NdrpFreeAsyncHandleAndMessage(
PRPC_ASYNC_STATE AsyncHandle);
void
NdrAsyncSend(
PMIDL_STUB_MESSAGE pStubMsg,
BOOL fPartial );
void
NdrLastAsyncReceive(
PMIDL_STUB_MESSAGE pStubMsg );
RPC_STATUS
NdrValidateBothAndLockAsyncHandle(
RPC_ASYNC_HANDLE AsyncHandle );
RPC_STATUS
NdrpValidateAndLockAsyncHandle(
RPC_ASYNC_HANDLE AsyncHandle );
RPC_STATUS
NdrUnlockHandle(
RPC_ASYNC_HANDLE AsyncHandle );
RPC_STATUS
NdrpValidateAsyncMsg(
PNDR_ASYNC_MESSAGE pAsyncMsg );
void
NdrpRegisterAsyncHandle(
PMIDL_STUB_MESSAGE pStubMsg,
void * AsyncHandle );
#endif // __ASYNCNDR_H__