WindowsXP-SP1/com/rpc/runtime/mtrt/sysinc.h
2020-09-30 16:53:49 +02:00

511 lines
12 KiB
C

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1991 - 1999
//
// File: sysinc.h
//
//--------------------------------------------------------------------------
/* --------------------------------------------------------------------
File : sysinc.h
Description :
This file includes all of the system include files necessary for a
specific version of the runtime. In addition, it defines some system
dependent debugging options.
***** If you are adding are changing something for a specific *****
***** system you MUST 1) make the change for all the defined *****
***** systems and 2) add a comment if needed in the template for *****
***** future systems. *****
History :
mikemon 08-01-91 Created.
mikemon 10-31-91 Moved system dependent stuff from util.hxx to
here.
mariogo 10-19-94 Order conquered chaos and the world rejoiced
-------------------------------------------------------------------- */
#ifndef __SYSINC_H__
#define __SYSINC_H__
// Some system indepentent macros
#ifndef DEBUGRPC
#define INTERNAL_FUNCTION static
#define INTERNAL_VARIABLE static
#else
#define INTERNAL_FUNCTION
#define INTERNAL_VARIABLE
#endif // ! DEBUGRPC
// The following functions are can be implemented as macros
// or functions for system type.
// extern void *
// RpcpFarAllocate (
// IN unsigned int Length
// );
// extern void
// RpcpFarFree (
// IN void * Object
// );
// extern int
// RpcpStringCompare (
// IN RPC_CHAR * FirstString,
// IN RPC_CHAR * SecondString
// );
// extern int
// RpcpStringNCompare (
// IN RPC_CHAR * FirstString,
// IN RPC_CHAR * SecondString,
// IN unsigned int Length
// );
// extern RPC_CHAR *
// RpcpStringCopy (
// OUT RPC_CHAR * Destination,
// IN RPC_CHAR * Source
// );
// extern RPC_CHAR *
// RpcpStringCat (
// OUT RPC_CHAR * Destination,
// IN CONST RPC_CHAR * Source
// );
// extern int
// RpcpStringLength (
// IN RPC_CHAR * WideCharString
// );
// extern void
// RpcpMemoryMove (
// OUT void * Destination,
// IN void * Source,
// IN unsigned int Length
// );
// extern void *
// RpcpMemoryCopy (
// OUT void * Destination,
// IN void * Source,
// IN unsigned int Length
// );
// extern void *
// RpcpMemorySet (
// OUT void * Buffer,
// IN unsigned char Value,
// IN unsigned int Length
// );
// extern char *
// RpcpItoa(
// IN int Value,
// OUT char *Buffer,
// IN int Radix);
// extern int
// RpcpStringPrintfA(
// OUT char *Buffer,
// IN char *Format,
// ...);
// extern void
// PrintToDebugger(
// IN char *Format,
// ...);
// extern void
// RpcpBreakPoint(
// );
#ifdef __cplusplus
extern "C" {
#endif
extern void GlobalMutexRequestExternal(void);
extern void GlobalMutexClearExternal(void);
#ifdef __cplusplus
} // extern "C"
#endif
#include<nt.h>
#include<ntrtl.h>
#include<nturtl.h>
#include<stdio.h>
#include<string.h>
#include<memory.h>
#include<malloc.h>
#include<stdlib.h>
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include<windows.h>
#ifdef __cplusplus
extern "C" {
#endif
#if DBG
#define DEBUGRPC
#endif
#if DBG
#undef ASSERT
#define ASSERT( exp ) \
if (!(exp)) { RtlAssert( #exp, __FILE__, __LINE__, NULL ); DebugBreak(); }
#endif
#define NO_RETURN { ASSERT(0); }
#define ASSUME(exp) ASSERT(exp)
#define FORCE_INLINE inline
#ifndef FORCE_VTABLES
#define NO_VTABLE __declspec(novtable)
#else
#define NO_VTABLE
#endif
#define RPC_DELAYED_INITIALIZATION 1
// flag to preallocate the events on some critical sections
#ifndef PREALLOCATE_EVENT_MASK
#define PREALLOCATE_EVENT_MASK 0x80000000 // Defined only in dll\resource.c
#endif // PREALLOCATE_EVENT_MASK
#define RPC_CHAR WCHAR
#define RPC_SCHAR RPC_CHAR
#define RPC_CONST_CHAR(character) ((RPC_CHAR) L##character)
#define RPC_CONST_STRING(string) ((const RPC_CHAR *) L##string)
#define RPC_CONST_SSTRING(string) RPC_CONST_STRING(string)
#define RPC_STRING_LITERAL(string) ((RPC_CHAR *) L##string)
#define RPC_T(string) (L##string)
#define UNUSED(_x_) ((void)(_x_))
#define MAX_DLLNAME_LENGTH 256
#if DBG
#define ASSERT_VALID(c) ((c)->AssertValid())
#define ASSERT_VALID1(c, p1) ((c)->AssertValid(p1))
#else
#define ASSERT_VALID
#define ASSERT_VALID1
#endif
#define LOCALE_US (MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT))
#define RpcpFarAllocate(Length) \
((void *) new char[Length])
#define RpcpFarFree(Object) \
(delete Object)
#define RpcpStringSCompare(FirstString, SecondString) \
lstrcmp((const wchar_t *) FirstString, (const wchar_t *) SecondString)
#define RpcpStringCompare(FirstString, SecondString) \
_wcsicmp((const wchar_t *) FirstString, (const wchar_t *) SecondString)
#define RpcpStringNCompare(FirstString, SecondString, Length) \
_wcsnicmp((const wchar_t*) FirstString, (const wchar_t *) SecondString, \
(size_t) Length)
// always compares ASCII
#define RpcpStringCompareA(FirstString, SecondString) \
_stricmp((const char *) FirstString, (const char *) SecondString)
#define RpcpStringNCompareA(FirstString, SecondString, Size) \
_strnicmp((const char *) FirstString, (const char *) SecondString, Size)
#define RpcpStringCompareInt(FirstString, SecondString) \
(CompareStringW(LOCALE_US, NORM_IGNORECASE, \
(const wchar_t *) FirstString, -1, (const wchar_t *) SecondString, -1) != CSTR_EQUAL)
#define RpcpStringCompareIntA(FirstString, SecondString) \
(CompareStringA(LOCALE_US, NORM_IGNORECASE, \
FirstString, -1, SecondString, -1) != CSTR_EQUAL)
#define RpcpStringCopy(Destination, Source) \
wcscpy((wchar_t *) Destination, (const wchar_t *) Source)
#define RpcpStringNCopy(DestinationString, SourceString, Length) \
wcsncpy((wchar_t *) DestinationString, (wchar_t *) SourceString, Length)
#define RpcpStringCat(Destination, Source) \
wcscat((wchar_t *) Destination, (const wchar_t *) Source)
#define RpcpStringLength(String) \
wcslen((const wchar_t *) String)
#define RpcpStrStr(String1, String2) \
wcsstr((const wchar_t *) String1, (const wchar_t *) String2)
#define RpcpStringLengthA(String) \
strlen(String)
#define RpcpStringToLower(String) \
_wcslwr(String)
#define RpcpMemoryCompare(FirstBuffer, SecondBuffer, Length) \
memcmp(FirstBuffer, SecondBuffer, Length)
#define RpcpMemoryCopy(Destination, Source, Length) \
RtlCopyMemory(Destination, Source, Length)
#define RpcpMemoryMove(Destination, Source, Length) \
RtlMoveMemory(Destination, Source, Length)
#define RpcpMemorySet(Buffer, Value, Length) \
RtlFillMemory(Buffer, Length, Value)
#if defined(TYPE_ALIGNMENT)
#undef TYPE_ALIGNMENT
#endif
#define TYPE_ALIGNMENT(x) __alignof(x)
void
RpcpRaiseException (
IN long exception
);
RPC_CHAR * __cdecl RpcpStringReverse (RPC_CHAR *string);
void * I_RpcBCacheAllocate (IN unsigned int size);
void I_RpcBCacheFree (IN void * obj);
void I_RpcDoCellUnitTest(IN OUT void *p);
// some test hook definitions
typedef enum tagSystemFunction001Commands
{
sf001cHttpSetInChannelTarget,
sf001cHttpSetOutChannelTarget
} SystemFunction001Commands;
#ifdef STATS
void I_RpcGetStats(DWORD *pdwStat1, DWORD *pdwStat2, DWORD *pdwStat3, DWORD *pdwStat4);
#endif
#define RpcpItoa(Value, Buffer, Radix) \
_itoa(Value, Buffer, Radix)
#define RpcpItow(Value, Buffer, Radix) \
_itow(Value, Buffer, Radix)
#define RpcpCharacter(Buffer, Character) \
wcschr(Buffer, Character)
#define RpcpStringPrintfA sprintf
#define RpcpStringConcatenate(FirstString, SecondString) \
wcscat(FirstString, (const wchar_t *) SecondString)
LONG
I_RpcSetNDRSlot(
IN void *NewSlot
);
void *
I_RpcGetNDRSlot(
void
);
long
NDRCCopyContextHandle (
IN void *SourceBinding,
OUT void **DestinationBinding
);
#if defined(_M_IA64) || defined(_M_AMD64)
#define CONTEXT_HANDLE_BEFORE_MARSHAL_MARKER ((PVOID)0xbaadbeefbaadbeef)
#define CONTEXT_HANDLE_AFTER_MARSHAL_MARKER ((PVOID)0xdeaddeaddeaddead)
#else
#define CONTEXT_HANDLE_BEFORE_MARSHAL_MARKER ((PVOID)0xbaadbeef)
#define CONTEXT_HANDLE_AFTER_MARSHAL_MARKER ((PVOID)0xdeaddead)
#endif
#define ANSI_strtol strtol
#define PrintToConsole printf /* Use only in test applications */
#if defined(_M_IA64) || defined(_M_AMD64)
// uncomment this to disable locator support for IA64 or amd64
//#define NO_LOCATOR_CODE
//#define APPLETALK_ON
//#define NETBIOS_ON
//#define NCADG_MQ_ON
//#define SPX_ON
//#define IPX_ON
#else
#define APPLETALK_ON
//#define NETBIOS_ON
//#define NCADG_MQ_ON
#define SPX_ON
//#define IPX_ON
#endif
#if !defined(SPX_ON) && !defined(IPX_ON)
#define SPX_IPX_OFF
#endif
#ifdef DEBUGRPC
#define PrintToDebugger DbgPrint
#define RpcpBreakPoint() DebugBreak()
// ASSERT defined by system
extern BOOL ValidateError(
IN unsigned int Status,
IN unsigned int Count,
IN const int ErrorList[]);
#define VALIDATE(_myValueToValidate) \
{ int _myTempValueToValidate = (_myValueToValidate); \
static const int _myValidateArray[] =
#define END_VALIDATE ; \
if (ValidateError(_myTempValueToValidate,\
sizeof(_myValidateArray)/sizeof(int), \
_myValidateArray) == 0) ASSERT(0);}
#else
// PrintToDebugger defined only on debug builds...
#define RpcpBreakPoint()
/* Does nothing on retail systems */
#define VALIDATE(_myValueToValidate) { int _bogusarray[] =
#define END_VALIDATE ; }
#endif
// List Operations
//
#define RpcpInitializeListHead(ListHead) InitializeListHead(ListHead)
#define RpcpIsListEmpty(ListHead) IsListEmpty(ListHead)
PLIST_ENTRY
RpcpfRemoveHeadList(
PLIST_ENTRY ListHead
);
#define RpcpRemoveHeadList(ListHead) RemoveHeadList(ListHead)
PLIST_ENTRY
RpcpfRemoveTailList(
PLIST_ENTRY ListHead
);
#define RpcpRemoveTailList(ListHead) RemoveTailList(ListHead)
VOID
RpcpfRemoveEntryList(
PLIST_ENTRY Entry
);
#define RpcpRemoveEntryList(Entry) RemoveEntryList(Entry)
VOID
RpcpfInsertTailList(
PLIST_ENTRY ListHead,
PLIST_ENTRY Entry
);
#define RpcpInsertTailList(ListHead,Entry) InsertTailList(ListHead,Entry)
VOID
RpcpfInsertHeadList(
PLIST_ENTRY ListHead,
PLIST_ENTRY Entry
);
#define RpcpInsertHeadList(ListHead,Entry) InsertHeadList(ListHead,Entry)
#ifdef __cplusplus
}
#endif
//
// Don't read this part. These are needed to support macros
// used in the past. Please use the supported versions above.
//
#define PAPI __RPC_FAR
// Some old C++ compiler the runtime once used didn't allocate
// the this pointer before calling the constructor. If you
// have such a compiler now, I'm very sorry for you.
#define ALLOCATE_THIS(class)
#define ALLOCATE_THIS_PLUS(class, amt, errptr, errcode)
#ifdef __cplusplus
#define START_C_EXTERN extern "C" {
#define END_C_EXTERN }
#else
#define START_C_EXTERN
#define END_C_EXTERN
#endif
// These must always evaluate "con" even on retail systems.
#ifdef DEBUGRPC
#define EVAL_AND_ASSERT(con) ASSERT(con)
#else
#define EVAL_AND_ASSERT(con) (con)
#endif
#define RequestGlobalMutex GlobalMutexRequest
#define ClearGlobalMutex GlobalMutexClear
#define RpcItoa RpcpItoa
// Double check basic stuff.
#if !defined(TRUE) || \
!defined(FALSE) || \
!defined(ASSERT) || \
!defined(VALIDATE) || \
!defined(IN) || \
!defined(OUT) || \
!defined(CONST) || \
!defined(UNALIGNED) || \
!defined(UNUSED)
#error "Some basic macro is not defined"
#endif
#endif /* __SYSINC_H__ */