Changeset 4657 for trunk/include/win/thread.h
- Timestamp:
- Nov 21, 2000, 12:34:31 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/win/thread.h
r3808 r4657 1 /* $Id: thread.h,v 1.1 7 2000-07-08 07:23:09 sandervl Exp $ */1 /* $Id: thread.h,v 1.18 2000-11-21 11:33:59 sandervl Exp $ */ 2 2 3 3 /* … … 15 15 #include "config.h" 16 16 #include "winbase.h" 17 #include "winuser.h" 18 #include <ntdef.h> 17 19 #endif 18 20 #include <ntdllsec.h> //PROCESSTHREAD_SECURITYINFO struct … … 24 26 25 27 struct _PDB; 26 27 /* Thread exception block */28 typedef struct _TEB29 {30 void *except; /* 00 Head of exception handling chain */31 void *stack_top; /* 04 Top of thread stack */32 void *stack_low; /* 08 Stack low-water mark */33 HTASK16 htask16; /* 0c Win16 task handle */34 WORD stack_sel; /* 0e 16-bit stack selector */35 DWORD selman_list; /* 10 Selector manager list */36 DWORD user_ptr; /* 14 User pointer */37 struct _TEB *self; /* 18 Pointer to this structure */38 WORD flags; /* 1c Flags */39 WORD mutex_count; /* 1e Win16 mutex count */40 DWORD debug_context; /* 20 Debug context */41 DWORD *ppriority; /* 24 Pointer to current priority */42 HQUEUE16 queue; /* 28 Message queue */43 WORD pad1; /* 2a */44 LPVOID *tls_ptr; /* 2c Pointer to TLS array */45 struct _PDB *process; /* 30 owning process (used by NT3.51 applets)*/46 } TEB;47 48 /* Thread exception flags */49 #define TEBF_WIN32 0x000150 #define TEBF_TRAP 0x000251 28 52 29 #ifndef OS2DEF_INCLUDED … … 64 41 #endif 65 42 66 /* Thread database */ 67 typedef struct _THDB 43 /* Thread exception block 44 45 flags in the comment: 46 1-- win95 field 47 d-- win95 debug version 48 -2- nt field 49 --3 wine special 50 --n wine unused 51 !-- or -!- likely or observed collision 52 more problems (collected from mailing list): 53 psapi.dll 0x10/0x30 (expects nt fields) 54 ie4 0x40 55 PESHiELD 0x23/0x30 (win95) 56 */ 57 58 #pragma pack(1) 59 /* Thread exception block */ 60 typedef struct _TEB 68 61 { 69 LONG header[2]; /* 00 Kernel object header */ 70 struct _PDB *process; /* 08 Process owning this thread */ 71 HANDLE event; /* 0c Thread event */ 72 TEB teb; /* 10 Thread exception block */ 73 DWORD flags; /* 44 Flags */ 74 DWORD exit_code; /* 48 Termination status */ 75 WORD teb_sel; /* 4c Selector to TEB */ 76 WORD emu_sel; /* 4e 80387 emulator selector */ 77 int thread_errno; /* 50 Per-thread errno (was: unknown) */ 78 void *wait_list; /* 54 Event waiting list */ 79 int thread_h_errno; /* 50 Per-thread h_errno (was: unknown) */ 80 void *ring0_thread; /* 5c Pointer to ring 0 thread */ 81 void *ptdbx; /* 60 Pointer to TDBX structure */ 82 void *stack_base; /* 64 Base of the stack */ 83 void *exit_stack; /* 68 Stack pointer on thread exit */ 84 void *emu_data; /* 6c Related to 80387 emulation */ 85 DWORD last_error; /* 70 Last error code */ 86 void *debugger_CB; /* 74 Debugger context block */ 87 DWORD debug_thread; /* 78 Thread debugging this one (?) */ 88 void *pcontext; /* 7c Thread register context */ 89 DWORD cur_stack; /* 80 Current stack (was: unknown) */ 90 DWORD unknown3[2]; /* 84 Unknown */ 91 WORD current_ss; /* 8c Another 16-bit stack selector */ 92 WORD pad2; /* 8e */ 93 void *ss_table; /* 90 Pointer to info about 16-bit stack */ 94 WORD thunk_ss; /* 94 Yet another 16-bit stack selector */ 95 WORD pad3; /* 96 */ 62 /* start of NT_TIB */ 63 void *except; /* 12- 00 Head of exception handling chain */ 64 void *stack_top; /* 12- 04 Top of thread stack */ 65 void *stack_low; /* 12- 08 Stack low-water mark */ 66 HTASK16 htask16; /* 1-- 0c Win16 task handle */ 67 WORD stack_sel; /* 1-- 0e 16-bit stack selector */ 68 DWORD selman_list; /* 1-n 10 Selector manager list */ 69 DWORD user_ptr; /* 12n 14 User pointer */ 70 /* end of NT_TIB */ 71 struct _TEB *self; /* 12- 18 Pointer to this structure */ 72 WORD tibflags; /* 1!n 1c Flags (NT: EnvironmentPointer) */ 73 WORD mutex_count; /* 1-n 1e Win16 mutex count */ 74 void *pid; /* !2- 20 Process id (win95: debug context) */ 75 void *tid; /* -2- 24 Thread id */ 76 HQUEUE16 queue; /* 1!- 28 Message queue (NT: DWORD ActiveRpcHandle)*/ 77 WORD pad1; /* --n 2a */ 78 LPVOID *tls_ptr; /* 2c Pointer to TLS array */ 79 struct _PDB *process; /* 12- 30 owning process (win95: PDB; nt: NTPEB !!) */ 80 DWORD flags; /* 1-n 34 */ 81 DWORD exit_code; /* 1-- 38 Termination status */ 82 WORD teb_sel; /* 1-- 3c Selector to TEB */ 83 WORD emu_sel; /* 1-n 3e 80387 emulator selector */ 84 DWORD unknown1; /* --n 40 */ 85 DWORD unknown2; /* --n 44 */ 86 void (*startup)(void); /* --3 48 Thread startup routine */ 87 int thread_errno; /* --3 4c Per-thread errno (was: ring0_thread) */ 88 int thread_h_errno; /* --3 50 Per-thread h_errno (was: ptr to tdbx structure) */ 89 void *stack_base; /* 1-- 54 Base of the stack */ 90 void *signal_stack; /* --3 58 Signal stack (was: exit_stack) */ 91 void *emu_data; /* --n 5c Related to 80387 emulation */ 92 DWORD last_error; /* 1-- 60 Last error code */ 93 HANDLE debug_cb; /* 1-n 64 Debugger context block */ 94 DWORD debug_thread; /* 1-n 68 Thread debugging this one (?) */ 95 void *pcontext; /* 1-n 6c Thread register context */ 96 DWORD cur_stack; /* --3 70 Current stack (was: unknown) */ 97 DWORD ThunkConnect; /* 1-n 74 */ 98 DWORD NegStackBase; /* 1-n 78 */ 99 WORD current_ss; /* 1-n 7c Another 16-bit stack selector */ 100 WORD pad2; /* --n 7e */ 101 void *ss_table; /* --n 80 Pointer to info about 16-bit stack */ 102 WORD thunk_ss; /* --n 84 Yet another 16-bit stack selector */ 103 WORD pad3; /* --n 86 */ 104 DWORD pad4[15]; /* --n 88 */ 105 ULONG CurrentLocale; /* -2- C4 */ 106 DWORD pad5[48]; /* --n C8 */ 107 DWORD delta_priority; /* 1-n 188 Priority delta */ 108 DWORD unknown4[7]; /* d-n 18c Unknown */ 109 void *create_data; /* d-n 1a8 Pointer to creation structure */ 110 DWORD suspend_count; /* d-n 1ac SuspendThread() counter */ 111 void *entry_point; /* --3 1b0 Thread entry point (was: unknown) */ 112 void *entry_arg; /* --3 1b4 Entry point arg (was: unknown) */ 113 DWORD unknown5[4]; /* --n 1b8 Unknown */ 114 DWORD sys_count[4]; /* --3 1c8 Syslevel mutex entry counters */ 115 struct tagSYSLEVEL *sys_mutex[4]; /* --3 1d8 Syslevel mutex pointers */ 116 DWORD unknown6[5]; /* --n 1e8 Unknown */ 117 118 union { 96 119 #ifdef __WIN32OS2__ 97 LPVOID tls_array[TLS_MINIMUM_AVAILABLE]; /* 98 Thread local storage */ 120 struct { 121 struct _TEB *next; 122 DWORD OrgTIBSel; // Original OS/2 TIB selector (always the same, but let's not assume too much for future compatibility) 123 ULONG hmq; // Thread message queue 124 ULONG hab; // Thread Anchor block 125 ULONG hooks[WH_NB_HOOKS]; //list of hooks for this thread queue 126 ULONG threadId; // Thread ID 127 ULONG hThread; // thread handle 128 ULONG exceptFrame; // address of os/2 exception handler frame 129 ULONG newWindow; // Pointer to window object of window that was just created 130 void* pWsockData; // Winsock data pointer (NULL if unused) 131 DWORD lParam; // MessageExtraInfo 132 WINDOWPOS wp; // Used by message translation for WM_WINDOWPOSCHANGED 133 ULONG nrOfMsgs; // Usually 1; some PM messages can generated more than 1 win32 msg 134 BOOL fTranslated; // WM_CHAR already translated or not 135 ULONG msgstate; // odd -> dispatchmessage called, even -> not called 136 QMSG os2msg; // original os2 msg (received with Get- or PeekMessage) 137 MSG winmsg; // temporary storage for translated os2 msg (used in DispatchMessage) 138 MSG msg; // Used by message translation to store translated PM message (sent to win32 window proc in pmwindow.cpp) 139 MSG msgWCHAR; // Used to store extra WM_CHAR message generated by TranslateMessage 140 DWORD pidDebuggee; // process id of debuggee 141 DWORD logfile; // last FILE ptr used for logging (for exception handling in vfprintf) 142 PROCESSTHREAD_SECURITYINFO threadinfo; //used to store security info for thread tokens 143 DWORD lcid; // thread lcid 144 } odin; 145 #endif 146 /* the following are nt specific fields */ 147 DWORD pad6[633]; /* --n 214 */ 148 } o; 149 UNICODE_STRING StaticUnicodeString; /* -2- bf8 used by advapi32 */ 150 USHORT StaticUnicodeBuffer[261]; /* -2- c00 used by advapi32 */ 151 DWORD pad7; /* --n e0c */ 152 #ifdef __WIN32OS2__ 153 LPVOID tls_array[TLS_MINIMUM_AVAILABLE]; /* -2- e10 Thread local storage */ 98 154 #else 99 LPVOID tls_array[64]; /* 98Thread local storage */155 LPVOID tls_array[64]; /* -2- e10 Thread local storage */ 100 156 #endif 101 DWORD delta_priority; /* 198 Priority delta */ 102 DWORD unknown4[7]; /* 19c Unknown */ 103 void *create_data; /* 1b8 Pointer to creation structure */ 104 DWORD suspend_count; /* 1bc SuspendThread() counter */ 105 void *entry_point; /* 1c0 Thread entry point (was: unknown) */ 106 void *entry_arg; /* 1c4 Entry point arg (was: unknown) */ 107 DWORD unknown5[4]; /* 1c8 Unknown */ 108 DWORD sys_count[4]; /* 1d8 Syslevel mutex entry counters */ 109 CRITICAL_SECTION *sys_mutex[4];/* 1e8 Syslevel mutex pointers */ 110 DWORD unknown6[2]; /* 1f8 Unknown */ 111 /* The following are Wine-specific fields */ 112 int socket; /* Socket for server communication */ 113 unsigned int seq; /* Server sequence number */ 114 void *server_tid; /* Server id for this thread */ 115 void (*startup)(void); /* Thread startup routine */ 116 struct _THDB *next; /* Global thread list */ 117 #ifdef __WIN32OS2__ 118 DWORD OrgTIBSel; // Original OS/2 TIB selector (always the same, but let's not assume too much for future compatibility) 119 ULONG hmq; // Thread message queue 120 ULONG hab; // Thread Anchor block 121 ULONG hooks[WH_NB_HOOKS]; //list of hooks for this thread queue 122 ULONG threadId; // Thread ID 123 ULONG hThread; // thread handle 124 ULONG exceptFrame; // address of os/2 exception handler frame 125 ULONG newWindow; // Pointer to window object of window that was just created 126 void* pWsockData; // Winsock data pointer (NULL if unused) 127 DWORD lParam; // MessageExtraInfo 128 WINDOWPOS wp; // Used by message translation for WM_WINDOWPOSCHANGED 129 ULONG nrOfMsgs; // Usually 1; some PM messages can generated more than 1 win32 msg 130 BOOL fTranslated; // WM_CHAR already translated or not 131 ULONG msgstate; // odd -> dispatchmessage called, even -> not called 132 QMSG os2msg; // original os2 msg (received with Get- or PeekMessage) 133 MSG winmsg; // temporary storage for translated os2 msg (used in DispatchMessage) 134 MSG msg; // Used by message translation to store translated PM message (sent to win32 window proc in pmwindow.cpp) 135 MSG msgWCHAR; // Used to store extra WM_CHAR message generated by TranslateMessage 136 DWORD pidDebuggee; // process id of debuggee 137 DWORD logfile; // last FILE ptr used for logging (for exception handling in vfprintf) 138 PROCESSTHREAD_SECURITYINFO threadinfo; //used to store security info for thread tokens 139 DWORD lcid; // thread lcid 140 #endif 141 } THDB; 157 DWORD pad8[3]; /* --n f10 */ 158 PVOID ReservedForNtRpc; /* -2- f1c used by rpcrt4 */ 159 DWORD pad9[24]; /* --n f20 */ 160 PVOID ErrorInfo; /* -2- f80 used by ole32 (IErrorInfo*) */ 161 } TEB; 162 #pragma pack() 163 164 /* Thread exception flags */ 165 #define TEBF_WIN32 0x0001 166 #define TEBF_TRAP 0x0002 167 142 168 143 169 /* The pseudo handle value returned by GetCurrentThread */ 144 170 #define CURRENT_THREAD_PSEUDOHANDLE 0xfffffffe 145 171 146 #ifdef __i386__147 /* On the i386, the current thread is in the %fs register */148 # define SET_CUR_THREAD(thdb) SET_FS((thdb)->teb_sel)149 #else150 extern THDB *pCurrentThread;151 # define SET_CUR_THREAD(thdb) (pCurrentThread = (thdb))152 #endif /* __i386__ */153 154 155 /* scheduler/thread.c */156 extern THDB *THREAD_CreateInitialThread( struct _PDB *pdb, int server_fd );157 extern THDB *THREAD_Create( struct _PDB *pdb, DWORD flags,158 DWORD stack_size, BOOL alloc_stack16,159 LPSECURITY_ATTRIBUTES sa, int *server_handle );160 extern THDB *THREAD_Current(void);161 extern BOOL THREAD_IsWin16( THDB *thdb );162 extern THDB *THREAD_IdToTHDB( DWORD id );163 164 /* scheduler/sysdeps.c */165 extern int SYSDEPS_SpawnThread( THDB *thread );166 extern void SYSDEPS_ExitThread(void);167 extern TEB * WINAPI NtCurrentTeb(void);168 169 172 #endif /* __WINE_THREAD_H */
Note:
See TracChangeset
for help on using the changeset viewer.