Windows2000/private/windbg64/langapi/include/nowin.h
2020-09-30 17:12:32 +02:00

252 lines
6.6 KiB
C

/***
*nowin.h -
*
* Copyright (c) 1996, Microsoft Corporation. All rights reserved.
*
*Purpose:
* Declare misc. types, macros, etc. for non-Windows platforms that would
* normally be declared in windows.h
*
*Revision History:
* 04-25-96 PNT Module Created.
*
****/
#if !defined(_NOWIN_INCLUDED)
#define _NOWIN_INCLUDED
typedef unsigned int UINT;
typedef long LONG;
typedef unsigned long ULONG;
typedef ULONG *PULONG;
typedef unsigned short USHORT;
typedef USHORT *PUSHORT;
typedef char CHAR;
typedef CHAR *PCHAR;
typedef unsigned char UCHAR;
typedef UCHAR *PUCHAR;
typedef char *PSZ;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BOOLEAN;
typedef BOOLEAN *PBOOLEAN;
typedef void VOID;
typedef VOID *PVOID;
#define FALSE 0
#define TRUE 1
#define IN
#define OUT
#define OPTIONAL
#define FAR
#define WINAPI
typedef int (FAR WINAPI *FARPROC)();
typedef ULONG NTSTATUS;
#ifndef NOMINMAX
#ifndef max
#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
#endif /* NOMINMAX */
// Determine if an argument is present by testing the value of the pointer
// to the argument value.
#define ARGUMENT_PRESENT(ArgumentPointer) (\
(CHAR *)(ArgumentPointer) != (CHAR *)(NULL) )
// Exception record definition.
#define EXCEPTION_MAXIMUM_PARAMETERS 15 // maximum number of exception parameters
typedef struct _EXCEPTION_RECORD {
/*lint -e18 */ // Don't complain about different definitions
LONG ExceptionCode;
/*lint +e18 */ // Resume checking for different definitions
ULONG ExceptionFlags;
struct _EXCEPTION_RECORD *ExceptionRecord;
PVOID ExceptionAddress;
ULONG NumberParameters;
ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD;
typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
#if defined(_M_MPPC)
// Context Frame
// N.B. This frame must be exactly a multiple of 16 bytes in length.
// This frame has a several purposes: 1) it is used as an argument to
// NtContinue, 2) it is used to constuct a call frame for APC delivery,
// 3) it is used to construct a call frame for exception dispatching
// in user mode, and 4) it is used in the user level thread creation
// routines.
// Requires at least 8-byte alignment (double)
typedef struct _CONTEXT {
// This section is specified/returned if the ContextFlags word contains
// the flag CONTEXT_FLOATING_POINT.
double Fpr0; // Floating registers 0..31
double Fpr1;
double Fpr2;
double Fpr3;
double Fpr4;
double Fpr5;
double Fpr6;
double Fpr7;
double Fpr8;
double Fpr9;
double Fpr10;
double Fpr11;
double Fpr12;
double Fpr13;
double Fpr14;
double Fpr15;
double Fpr16;
double Fpr17;
double Fpr18;
double Fpr19;
double Fpr20;
double Fpr21;
double Fpr22;
double Fpr23;
double Fpr24;
double Fpr25;
double Fpr26;
double Fpr27;
double Fpr28;
double Fpr29;
double Fpr30;
double Fpr31;
double Fpscr; // Floating point status/control reg
// This section is specified/returned if the ContextFlags word contains
// the flag CONTEXT_INTEGER.
ULONG Gpr0; // General registers 0..31
ULONG Gpr1;
ULONG Gpr2;
ULONG Gpr3;
ULONG Gpr4;
ULONG Gpr5;
ULONG Gpr6;
ULONG Gpr7;
ULONG Gpr8;
ULONG Gpr9;
ULONG Gpr10;
ULONG Gpr11;
ULONG Gpr12;
ULONG Gpr13;
ULONG Gpr14;
ULONG Gpr15;
ULONG Gpr16;
ULONG Gpr17;
ULONG Gpr18;
ULONG Gpr19;
ULONG Gpr20;
ULONG Gpr21;
ULONG Gpr22;
ULONG Gpr23;
ULONG Gpr24;
ULONG Gpr25;
ULONG Gpr26;
ULONG Gpr27;
ULONG Gpr28;
ULONG Gpr29;
ULONG Gpr30;
ULONG Gpr31;
ULONG Cr; // Condition register
ULONG Xer; // Fixed point exception register
// This section is specified/returned if the ContextFlags word contains
// the flag CONTEXT_CONTROL.
ULONG Msr; // Machine status register
ULONG Iar; // Instruction address register
ULONG Lr; // Link register
ULONG Ctr; // Count register
// The flags values within this flag control the contents of
// a CONTEXT record.
// If the context record is used as an input parameter, then
// for each portion of the context record controlled by a flag
// whose value is set, it is assumed that that portion of the
// context record contains valid context. If the context record
// is being used to modify a thread's context, then only that
// portion of the threads context will be modified.
// If the context record is used as an IN OUT parameter to capture
// the context of a thread, then only those portions of the thread's
// context corresponding to set flags will be returned.
// The context record is never used as an OUT only parameter.
ULONG ContextFlags;
ULONG Fill[3]; // Pad out to multiple of 16 bytes
// This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
// set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT
// included in CONTEXT_FULL.
ULONG Dr0; // Breakpoint Register 1
ULONG Dr1; // Breakpoint Register 2
ULONG Dr2; // Breakpoint Register 3
ULONG Dr3; // Breakpoint Register 4
ULONG Dr4; // Breakpoint Register 5
ULONG Dr5; // Breakpoint Register 6
ULONG Dr6; // Debug Status Register
ULONG Dr7; // Debug Control Register
} CONTEXT, *PCONTEXT;
// Nonvolatile context pointer record.
typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
PULONG FloatingContext[32];
PULONG FpscrContext;
PULONG IntegerContext[32];
PULONG CrContext;
PULONG XerContext;
PULONG MsrContext;
PULONG IarContext;
PULONG LrContext;
PULONG CtrContext;
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
#endif
#endif