WindowsXP-SP1/com/rpc/midl/inc/baduse.hxx
2020-09-30 16:53:49 +02:00

190 lines
4.8 KiB
C++

/*****************************************************************************/
/** Microsoft LAN Manager **/
/** Copyright(c) Microsoft Corp., 1987-1999 **/
/*****************************************************************************/
/*****************************************************************************
File : usectxt.hxx
Title : use context information manager.
History :
24-Aug-1991 VibhasC Created
*****************************************************************************/
#ifndef __BADUSE_HXX__
#define __BADUSE_HXX__
/**
** enumeration of all reasons why a construct could be bad.
**/
enum _badconstruct
{
BC_NONE
,BC_DERIVES_FROM_VOID
,BC_DERIVES_FROM_PTR_TO_VOID
,BC_DERIVES_FROM_INT
,BC_DERIVES_FROM_PTR_TO_INT
,BC_DERIVES_FROM_HANDLE_T
,BC_DERIVES_FROM_ELIPSIS
,BC_DERIVES_FROM_CONF
,BC_DERIVES_FROM_VARY
,BC_DERIVES_FROM_UNSIZED_ARRAY
,BC_DERIVES_FROM_FUNC
,BC_DERIVES_FROM_CONF_STRUCT
,BC_DERIVES_FROM_VARY_STRUCT
,BC_DERIVES_FROM_CDECL
,BC_DERIVES_FROM_E_STAT_T
,BC_MAY_DERIVE_ARRAY_OF_UNIONS
,BC_DERIVES_FROM_IGNORE
,BC_DERIVES_FROM_RECURSIVE_REF
,BC_DERIVES_FROM_UNNAMED_FIELD
,BC_DERIVES_FROM_CONF_UNION
,BC_DERIVES_FROM_UNSIZED_STRING
,BC_REF_PTR_BAD_RT
,BC_DERIVES_FROM_RECURSIVE_UNION
,BC_BAD_RT_NE_UNION
,BC_DERIVES_FROM_CONF_PTR
,BC_DERIVES_FROM_VARY_PTR
,BC_CV_PTR_STRUCT_BAD_IN_XMIT_AS
};
/**
** enumeration of all reasons why a construct could be non-rpcable and should
** be checked at use time.
**/
enum _nonrpcable
{
NR_NONE
,NR_DERIVES_FROM_INT
,NR_DERIVES_FROM_PTR_TO_INT
,NR_DERIVES_FROM_VOID
,NR_DERIVES_FROM_PTR_TO_VOID
,NR_DERIVES_FROM_CONST
,NR_DERIVES_FROM_PTR_TO_CONST
,NR_DERIVES_FROM_FUNC
,NR_DERIVES_FROM_PTR_TO_FUNC
,NR_DERIVES_FROM_UNSIZED_STRING
,NR_DERIVES_FROM_P_TO_U_STRING
,NR_DERIVES_FROM_PTR_TO_CONF
,NR_DERIVES_FROM_BIT_FIELDS
,NR_DERIVES_FROM_NON_RPC_UNION
,NR_DERIVES_FROM_CONF_STRUCT
,NR_DERIVES_FROM_P_TO_C_STRUCT
,NR_DERIVES_FROM_TRANSMIT_AS
,NR_DERIVES_FROM_NE_UNIQUE_PTR
,NR_DERIVES_FROM_NE_FULL_PTR
,NR_DERIVES_FROM_CDECL
,NR_BASIC_TYPE_HANDLE_T
,NR_PRIMITIVE_HANDLE
,NR_PTR_TO_PRIMITIVE_HANDLE
,NR_GENERIC_HANDLE
,NR_PTR_TO_GENERIC_HANDLE
,NR_CTXT_HDL
,NR_PTR_TO_CTXT_HDL
,NR_PTR_TO_PTR_TO_CTXT_HDL
,NR_DERIVES_FROM_WCHAR_T
};
#define TRULY_NON_RPCABLE( p ) \
( \
p->NonRPCAbleBecause( NR_DERIVES_FROM_INT ) || \
p->NonRPCAbleBecause( NR_DERIVES_FROM_PTR_TO_INT ) || \
p->NonRPCAbleBecause( NR_DERIVES_FROM_VOID ) || \
p->NonRPCAbleBecause( NR_DERIVES_FROM_PTR_TO_VOID ) || \
p->NonRPCAbleBecause( NR_DERIVES_FROM_FUNC ) || \
p->NonRPCAbleBecause( NR_DERIVES_FROM_PTR_TO_FUNC ) || \
p->NonRPCAbleBecause( NR_DERIVES_FROM_BIT_FIELDS ) || \
p->NonRPCAbleBecause( NR_DERIVES_FROM_NON_RPC_UNION ) \
)
/**
** The basic bad use information structures
**/
#define SIZE_BAD_CON_REASON_ARRAY (1)
#define SIZE_NON_RPC_REASON_ARRAY (1)
#define SIZE_USE_CONTEXT_ARRAY (1)
typedef unsigned long BAD_CONSTRUCT;
typedef unsigned long NON_RPCABLE;
typedef unsigned long USE_CONTEXT;
typedef BAD_CONSTRUCT BadConstructReason[SIZE_BAD_CON_REASON_ARRAY];
typedef NON_RPCABLE NonRPCAbleReason[SIZE_NON_RPC_REASON_ARRAY];
typedef USE_CONTEXT UseContextInfo[SIZE_USE_CONTEXT_ARRAY];
/**
** The use information block class
**/
class BadUseInfo
{
private:
BadConstructReason AllBadConstructReasons;
NonRPCAbleReason AllNonRPCAbleReasons;
UseContextInfo UseContext;
short NoOfArmsWithCaseLabels;
friend
void CopyAllBadConstructReasons( class BadUseInfo *,
class BadUseInfo * );
friend
void CopyAllNonRPCAbleReasons( class BadUseInfo *,
class BadUseInfo * );
friend
void CopyAllBadUseReasons( class BadUseInfo *,
class BadUseInfo * );
friend
void CopyNoOfArmsWithCaseLabels( class BadUseInfo *,
class BadUseInfo * );
public:
BadUseInfo();
void InitBadUseInfo();
BOOL BadConstructBecause( BAD_CONSTRUCT );
BOOL NonRPCAbleBecause( NON_RPCABLE );
void SetBadConstructBecause( BAD_CONSTRUCT );
void ResetBadConstructBecause( BAD_CONSTRUCT );
void SetNonRPCAbleBecause( NON_RPCABLE );
void ResetNonRPCAbleBecause( NON_RPCABLE );
BOOL AnyReasonForBadConstruct();
BOOL AnyReasonForNonRPCAble();
short GetNoOfArmsWithCaseLabels()
{
return NoOfArmsWithCaseLabels;
}
void InitNoOfArmsWithCaseLabels()
{
NoOfArmsWithCaseLabels = 0;
}
void IncrementNoOfArmsWithCaseLabels()
{
NoOfArmsWithCaseLabels++;
}
BOOL HasAnyHandleSpecification();
void ResetAllHdlSpecifications();
};
#endif // __BADUSE_HXX__