ntcontext.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ntcontext.h - NT context record header */
  2. /* Copyright 1998-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01c,13sep01,hbh  Removed BYTE type (SPR 32165)
  7. 01b,21jan98,jmb  Added modhist, converted comments to C style.
  8. 01a,12jun98,cym  created.
  9. */
  10. #ifndef __INCntcontexth
  11. #define __INCntcontexth
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. typedef void * HANDLE;
  16. typedef unsigned short int WORD;
  17. typedef unsigned long DWORD;
  18. #define CREATE_SUSPENDED 0x4L
  19. /*
  20.  *  Define the size of the 80387 save area, which is in the context frame.
  21.  */
  22. #define SIZE_OF_80387_REGISTERS      80
  23. /*
  24.  * The following flags control the contents of the CONTEXT structure.
  25.  */
  26. #if !defined(RC_INVOKED)
  27. #define CONTEXT_i386    0x00010000    /* this assumes that i386 and */
  28. #define CONTEXT_i486    0x00010000    /* i486 have identical context records */
  29. /* end_wx86 */
  30. #define CONTEXT_CONTROL         (CONTEXT_i386 | 0x00000001L) /* SS:SP, CS:IP, FLAGS, BP */
  31. #define CONTEXT_INTEGER         (CONTEXT_i386 | 0x00000002L) /* AX, BX, CX, DX, SI, DI */
  32. #define CONTEXT_SEGMENTS        (CONTEXT_i386 | 0x00000004L) /* DS, ES, FS, GS */
  33. #define CONTEXT_FLOATING_POINT  (CONTEXT_i386 | 0x00000008L) /* 387 state */
  34. #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x00000010L) /* DB 0-3,6,7 */
  35. #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER |
  36.                       CONTEXT_SEGMENTS)
  37. /* begin_wx86 */
  38. #endif
  39. typedef struct _FLOATING_SAVE_AREA {
  40.     DWORD   ControlWord;
  41.     DWORD   StatusWord;
  42.     DWORD   TagWord;
  43.     DWORD   ErrorOffset;
  44.     DWORD   ErrorSelector;
  45.     DWORD   DataOffset;
  46.     DWORD   DataSelector;
  47.     char    RegisterArea[SIZE_OF_80387_REGISTERS];
  48.     DWORD   Cr0NpxState;
  49. } FLOATING_SAVE_AREA;
  50. typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
  51. /*
  52.  * Context Frame
  53.  *
  54.  *  This frame has a several purposes: 1) it is used as an argument to
  55.  *  NtContinue, 2) is is used to constuct a call frame for APC delivery,
  56.  *  and 3) it is used in the user level thread creation routines.
  57.  *
  58.  *  The layout of the record conforms to a standard call frame.
  59.  */
  60. typedef struct _CONTEXT {
  61.     /*
  62.      * The flags values within this flag control the contents of
  63.      * a CONTEXT record.
  64.      *
  65.      * If the context record is used as an input parameter, then
  66.      * for each portion of the context record controlled by a flag
  67.      * whose value is set, it is assumed that that portion of the
  68.      * context record contains valid context. If the context record
  69.      * is being used to modify a threads context, then only that
  70.      * portion of the threads context will be modified.
  71.      *
  72.      * If the context record is used as an IN OUT parameter to capture
  73.      * the context of a thread, then only those portions of the thread's
  74.      * context corresponding to set flags will be returned.
  75.      *
  76.      * The context record is never used as an OUT only parameter.
  77.      */
  78.     DWORD ContextFlags;
  79.     /*
  80.      * This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
  81.      * set in ContextFlags.  Note that CONTEXT_DEBUG_REGISTERS is NOT
  82.      * included in CONTEXT_FULL.
  83.      */
  84.     DWORD   Dr0;
  85.     DWORD   Dr1;
  86.     DWORD   Dr2;
  87.     DWORD   Dr3;
  88.     DWORD   Dr6;
  89.     DWORD   Dr7;
  90.     /*
  91.      * This section is specified/returned if the
  92.      * ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
  93.      */
  94.     FLOATING_SAVE_AREA FloatSave;
  95.     /*
  96.      * This section is specified/returned if the
  97.      * ContextFlags word contians the flag CONTEXT_SEGMENTS.
  98.      */
  99.     DWORD   SegGs;
  100.     DWORD   SegFs;
  101.     DWORD   SegEs;
  102.     DWORD   SegDs;
  103.     /*
  104.      * This section is specified/returned if the
  105.      * ContextFlags word contians the flag CONTEXT_INTEGER.
  106.      */
  107.     DWORD   Edi;
  108.     DWORD   Esi;
  109.     DWORD   Ebx;
  110.     DWORD   Edx;
  111.     DWORD   Ecx;
  112.     DWORD   Eax;
  113.     /*
  114.      * This section is specified/returned if the
  115.      * ContextFlags word contians the flag CONTEXT_CONTROL.
  116.      */
  117.     DWORD   Ebp;
  118.     DWORD   Eip;
  119.     DWORD   SegCs;              /* MUST BE SANITIZED */
  120.     DWORD   EFlags;             /* MUST BE SANITIZED */
  121.     DWORD   Esp;
  122.     DWORD   SegSs;
  123. } CONTEXT;
  124. typedef CONTEXT *PCONTEXT;
  125. #ifdef __cplusplus
  126. }
  127. #endif
  128. #endif /* __INCntcontexth */