hlink: Add hlguids.h (based on a patch by Aric Stewart).
[wine] / include / thread.h
1 /*
2  * Thread definitions
3  *
4  * Copyright 1996 Alexandre Julliard
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20
21 #ifndef __WINE_THREAD_H
22 #define __WINE_THREAD_H
23
24 #include <stdarg.h>
25 #include <windef.h>
26 #include <winbase.h>
27 #include <winreg.h>
28 #define WINE_NO_TEB
29 #include <winternl.h>
30
31 #ifndef WINE_TEB_DEFINED
32 #define WINE_TEB_DEFINED
33 typedef struct _TEB
34 {
35     NT_TIB       Tib;            /* 12-  00 Thread information block */
36     PVOID        EnvironmentPointer; /* 12-  1c EnvironmentPointer (win95: tib flags + win16 mutex count) */
37     CLIENT_ID    ClientId;       /* -2-  20 Process and thread id (win95: debug context) */
38     PVOID        ActiveRpcHandle;              /* 028 */
39     PVOID        ThreadLocalStoragePointer;    /* 02c Pointer to TLS array */
40     PEB         *Peb;                          /* 030 owning process PEB */
41     DWORD        LastErrorValue;               /* 034 Last error code */
42     ULONG        CountOfOwnedCriticalSections; /* 038 */
43     PVOID        CsrClientThread;              /* 03c */
44     PVOID        Win32ThreadInfo;              /* 040 */
45     ULONG        Win32ClientInfo[0x1f];        /* 044 */
46     PVOID        WOW32Reserved;                /* 0c0 */
47     ULONG        CurrentLocale;                /* 0c4 */
48     ULONG        FpSoftwareStatusRegister;     /* 0c8 */
49     PVOID        SystemReserved1[54];          /* 0cc */
50     PVOID        Spare1;                       /* 1a4 */
51     LONG         ExceptionCode;                /* 1a8 */
52     BYTE         SpareBytes1[40];              /* 1ac */
53     PVOID        SystemReserved2[10];          /* 1d4 */
54
55     /* The following are Wine-specific fields (NT: GdiTebBatch) */
56     DWORD        num_async_io;        /* 1fc number of pending async I/O in the server */
57     ULONG_PTR    dpmi_vif;            /* 200 protected mode virtual interrupt flag */
58     DWORD        vm86_pending;        /* 204 data for vm86 mode */
59     /* here is plenty space for wine specific fields (don't forget to change pad6!!) */
60     DWORD        pad6[309];           /* 208 */
61
62     ULONG        gdiRgn;                     /* 6dc */
63     ULONG        gdiPen;                     /* 6e0 */
64     ULONG        gdiBrush;                   /* 6e4 */
65     CLIENT_ID    RealClientId;               /* 6e8 */
66     HANDLE       GdiCachedProcessHandle;     /* 6f0 */
67     ULONG        GdiClientPID;               /* 6f4 */
68     ULONG        GdiClientTID;               /* 6f8 */
69     PVOID        GdiThreadLocaleInfo;        /* 6fc */
70     PVOID        UserReserved[5];            /* 700 */
71     PVOID        glDispachTable[280];        /* 714 */
72     ULONG        glReserved1[26];            /* b74 */
73     PVOID        glReserved2;                /* bdc */
74     PVOID        glSectionInfo;              /* be0 */
75     PVOID        glSection;                  /* be4 */
76     PVOID        glTable;                    /* be8 */
77     PVOID        glCurrentRC;                /* bec */
78     PVOID        glContext;                  /* bf0 */
79     ULONG        LastStatusValue;            /* bf4 */
80     UNICODE_STRING StaticUnicodeString;      /* bf8 */
81     WCHAR        StaticUnicodeBuffer[261];   /* c00 */
82     PVOID        DeallocationStack;          /* e0c */
83     PVOID        TlsSlots[64];               /* e10 */
84     LIST_ENTRY   TlsLinks;                   /* f10 */
85     PVOID        Vdm;                        /* f18 */
86     PVOID        ReservedForNtRpc;           /* f1c */
87     PVOID        DbgSsReserved[2];           /* f20 */
88     ULONG        HardErrorDisabled;          /* f28 */
89     PVOID        Instrumentation[16];        /* f2c */
90     PVOID        WinSockData;                /* f6c */
91     ULONG        GdiBatchCount;              /* f70 */
92     ULONG        Spare2;                     /* f74 */
93     ULONG        Spare3;                     /* f78 */
94     ULONG        Spare4;                     /* f7c */
95     PVOID        ReservedForOle;             /* f80 */
96     ULONG        WaitingOnLoaderLock;        /* f84 */
97     PVOID        Reserved5[3];               /* f88 */
98     PVOID       *TlsExpansionSlots;          /* f94 */
99 } TEB;
100 #endif /* WINE_TEB_DEFINED */
101
102
103 /* The thread information for 16-bit threads */
104 /* NtCurrentTeb()->SubSystemTib points to this */
105 typedef struct
106 {
107     void           *unknown;    /* 00 unknown */
108     UNICODE_STRING *exe_name;   /* 04 exe module name */
109
110     /* the following fields do not exist under Windows */
111     UNICODE_STRING  exe_str;    /* exe name string pointed to by exe_name */
112     CURDIR          curdir;     /* current directory */
113     WCHAR           curdir_buffer[MAX_PATH];
114 } WIN16_SUBSYSTEM_TIB;
115
116 #endif  /* __WINE_THREAD_H */