Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
entrypt.h
Abstract: The interface to the entry point module. Author:
16-Jun-1995 t-orig
Revision History:
--*/
#ifndef _ENTRYPT_H_
#define _ENTRYPT_H_
//
// Time to wait, in milliseconds, to sleep before retrying a memory
// allocation which failed due to lack of free pages.
//
#define CPU_WAIT_FOR_MEMORY_TIME 200
//
// Number of times to retry memory allocations
//
#define CPU_MAX_ALLOCATION_RETRIES 4
// Note: if BOTH is defined, than the code compiled will allow one to
// retrieve an entry point structure from either an intel or native
// address. If both is not defined, than an entry point structure
// can only be retrieved from an intel address. Defining both
// increases the cost (time and space) of most operation by a
// factor of 2.
//#define BOTH
// Set this to 1 if you suspect there is a heap corruption which is
// trashing the red-black trees. It creates a second red-black tree
// which mirrors the first, and walks both trees frequently to ensure
// they actually match. Since the checking mechanism uses NT asserts,
// this only works on a checked NT build using a checked CPU.
#define DBG_DUAL_TREES 0
//
// This timestamp is bumped whenever an entrypoint is added, split, or
// when all entrypoits are flushed. It an be used to determine if
// the entrypoints need to be re-searched afte switching from an Mrsw
// reader to an Mrsw Writer.
//
extern DWORD EntrypointTimestamp;
// The Entry Point Structure
typedef struct _entryPoint { PVOID intelStart; PVOID intelEnd; PVOID nativeStart; PVOID nativeEnd; USHORT FlagsNeeded; struct _entryPoint *SubEP; #ifdef CODEGEN_PROFILE
ULONG SequenceNumber; ULONG ExecutionCount; ULONG CreationTime; #endif
} ENTRYPOINT, *PENTRYPOINT;
// The colors
typedef enum {RED, BLACK} COL;
// The EPNODE structure
typedef struct _epNode { ENTRYPOINT ep;
struct _epNode *intelLeft; struct _epNode *intelRight; struct _epNode *intelParent; COL intelColor;
#ifdef BOTH
struct _epNode *nativeLeft; struct _epNode *nativeRight; struct _epNode *nativeParent; COL riscColor; #endif
#if DBG_DUAL_TREES
struct _epNode *dual; #endif
} EPNODE, *PEPNODE;
// Prototypes
INT initializeEntryPointModule( void );
PENTRYPOINT EPFromIntelAddr( PVOID intelAddr );
PENTRYPOINT GetNextEPFromIntelAddr( PVOID intelAddr );
VOID FlushEntrypoints( VOID );
#ifdef BOTH
PENTRYPOINT EPFromNativeAddr( PVOID nativeAddr ); #endif
INT insertEntryPoint( PEPNODE pNewEntryPoint );
INT removeEntryPoint( PEPNODE pEP );
PVOID EPAlloc( DWORD cb );
VOID EPFree( VOID );
INT initEPAlloc( VOID );
BOOLEAN IsIntelRangeInCache( PVOID Addr, DWORD Length );
#endif
|