Mainly just added some small #ifdef sections for a little portability.
[reactos.git] / reactos / include / napi / teb.h
1 /* TEB/PEB parameters */
2 #ifndef __INCLUDE_INTERNAL_TEB
3 #define __INCLUDE_INTERNAL_TEB
4
5 #include <napi/types.h>
6
7 #ifdef __USE_W32API
8 #include <ddk/ntapi.h>
9 #endif /* !__USE_W32API */
10
11 #ifndef __USE_W32API
12
13 typedef struct _CLIENT_ID
14 {
15 HANDLE UniqueProcess;
16 HANDLE UniqueThread;
17 } CLIENT_ID, *PCLIENT_ID;
18
19 typedef struct _RTL_USER_PROCESS_PARAMETERS {
20 ULONG AllocationSize;
21 ULONG Size;
22 ULONG Flags;
23 ULONG DebugFlags;
24 HANDLE hConsole;
25 ULONG ProcessGroup;
26 HANDLE hStdInput;
27 HANDLE hStdOutput;
28 HANDLE hStdError;
29 UNICODE_STRING CurrentDirectoryName;
30 HANDLE CurrentDirectoryHandle;
31 UNICODE_STRING DllPath;
32 UNICODE_STRING ImagePathName;
33 UNICODE_STRING CommandLine;
34 PWSTR Environment;
35 ULONG dwX;
36 ULONG dwY;
37 ULONG dwXSize;
38 ULONG dwYSize;
39 ULONG dwXCountChars;
40 ULONG dwYCountChars;
41 ULONG dwFillAttribute;
42 ULONG dwFlags;
43 ULONG wShowWindow;
44 UNICODE_STRING WindowTitle;
45 UNICODE_STRING DesktopInfo;
46 UNICODE_STRING ShellInfo;
47 UNICODE_STRING RuntimeInfo;
48 } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
49
50 typedef struct _NT_TIB {
51 struct _EXCEPTION_REGISTRATION_RECORD* ExceptionList; // 00h
52 PVOID StackBase; // 04h
53 PVOID StackLimit; // 08h
54 PVOID SubSystemTib; // 0Ch
55 union {
56 PVOID FiberData; // 10h
57 ULONG Version; // 10h
58 } Fib;
59 PVOID ArbitraryUserPointer; // 14h
60 struct _NT_TIB *Self; // 18h
61 } NT_TIB, *PNT_TIB;
62
63 #endif /* !__USE_W32API */
64
65 typedef struct _CURDIR
66 {
67 UNICODE_STRING DosPath;
68 PVOID Handle;
69 } CURDIR, *PCURDIR;
70
71 typedef struct RTL_DRIVE_LETTER_CURDIR
72 {
73 USHORT Flags;
74 USHORT Length;
75 ULONG TimeStamp;
76 UNICODE_STRING DosPath;
77 } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
78
79 typedef struct _PEB_FREE_BLOCK
80 {
81 struct _PEB_FREE_BLOCK* Next;
82 ULONG Size;
83 } PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;
84
85 /* RTL_USER_PROCESS_PARAMETERS.Flags */
86 #define PPF_NORMALIZED (1)
87
88 #define PEB_BASE (0x7FFDF000)
89
90 typedef struct _PEB_LDR_DATA
91 {
92 ULONG Length;
93 BOOLEAN Initialized;
94 PVOID SsHandle;
95 LIST_ENTRY InLoadOrderModuleList;
96 LIST_ENTRY InMemoryOrderModuleList;
97 LIST_ENTRY InInitializationOrderModuleList;
98 } PEB_LDR_DATA, *PPEB_LDR_DATA;
99
100 typedef VOID STDCALL_FUNC (*PPEBLOCKROUTINE)(PVOID);
101
102 typedef struct _PEB
103 {
104 UCHAR InheritedAddressSpace; // 00h
105 UCHAR ReadImageFileExecOptions; // 01h
106 UCHAR BeingDebugged; // 02h
107 UCHAR Spare; // 03h
108 PVOID Mutant; // 04h
109 PVOID ImageBaseAddress; // 08h
110 PPEB_LDR_DATA Ldr; // 0Ch
111 PRTL_USER_PROCESS_PARAMETERS ProcessParameters; // 10h
112 PVOID SubSystemData; // 14h
113 PVOID ProcessHeap; // 18h
114 PVOID FastPebLock; // 1Ch
115 PPEBLOCKROUTINE FastPebLockRoutine; // 20h
116 PPEBLOCKROUTINE FastPebUnlockRoutine; // 24h
117 ULONG EnvironmentUpdateCount; // 28h
118 PVOID* KernelCallbackTable; // 2Ch
119 PVOID EventLogSection; // 30h
120 PVOID EventLog; // 34h
121 PPEB_FREE_BLOCK FreeList; // 38h
122 ULONG TlsExpansionCounter; // 3Ch
123 PVOID TlsBitmap; // 40h
124 ULONG TlsBitmapBits[0x2]; // 44h
125 PVOID ReadOnlySharedMemoryBase; // 4Ch
126 PVOID ReadOnlySharedMemoryHeap; // 50h
127 PVOID* ReadOnlyStaticServerData; // 54h
128 PVOID AnsiCodePageData; // 58h
129 PVOID OemCodePageData; // 5Ch
130 PVOID UnicodeCaseTableData; // 60h
131 ULONG NumberOfProcessors; // 64h
132 ULONG NtGlobalFlag; // 68h
133 UCHAR Spare2[0x4]; // 6Ch
134 LARGE_INTEGER CriticalSectionTimeout; // 70h
135 ULONG HeapSegmentReserve; // 78h
136 ULONG HeapSegmentCommit; // 7Ch
137 ULONG HeapDeCommitTotalFreeThreshold; // 80h
138 ULONG HeapDeCommitFreeBlockThreshold; // 84h
139 ULONG NumberOfHeaps; // 88h
140 ULONG MaximumNumberOfHeaps; // 8Ch
141 PVOID** ProcessHeaps; // 90h
142 PVOID GdiSharedHandleTable; // 94h
143 PVOID ProcessStarterHelper; // 98h
144 PVOID GdiDCAttributeList; // 9Ch
145 PVOID LoaderLock; // A0h
146 ULONG OSMajorVersion; // A4h
147 ULONG OSMinorVersion; // A8h
148 ULONG OSBuildNumber; // ACh
149 ULONG OSPlatformId; // B0h
150 ULONG ImageSubSystem; // B4h
151 ULONG ImageSubSystemMajorVersion; // B8h
152 ULONG ImageSubSystemMinorVersion; // C0h
153 ULONG GdiHandleBuffer[0x22]; // C4h
154 } PEB;
155
156 #ifndef __USE_W32API
157
158 typedef PEB *PPEB;
159
160 #endif /* !__USE_W32API */
161
162 typedef struct _GDI_TEB_BATCH
163 {
164 ULONG Offset;
165 ULONG HDC;
166 ULONG Buffer[0x136];
167 } GDI_TEB_BATCH, *PGDI_TEB_BATCH;
168
169 typedef struct _TEB
170 {
171 NT_TIB Tib; // 00h
172 PVOID EnvironmentPointer; // 1Ch
173 CLIENT_ID Cid; // 20h
174 PVOID ActiveRpcInfo; // 28h
175 PVOID ThreadLocalStoragePointer; // 2Ch
176 PPEB Peb; // 30h
177 ULONG LastErrorValue; // 34h
178 ULONG CountOfOwnedCriticalSections; // 38h
179 PVOID CsrClientThread; // 3Ch
180 struct _W32THREAD* Win32ThreadInfo; // 40h
181 ULONG Win32ClientInfo[0x1F]; // 44h
182 PVOID WOW32Reserved; // C0h
183 ULONG CurrentLocale; // C4h
184 ULONG FpSoftwareStatusRegister; // C8h
185 PVOID SystemReserved1[0x36]; // CCh
186 PVOID Spare1; // 1A4h
187 LONG ExceptionCode; // 1A8h
188 ULONG SpareBytes1[0x28]; // 1ACh
189 PVOID SystemReserved2[0xA]; // 1D4h
190 // GDI_TEB_BATCH GdiTebBatch; // 1FCh
191 ULONG gdiRgn; // 6DCh
192 ULONG gdiPen; // 6E0h
193 ULONG gdiBrush; // 6E4h
194 CLIENT_ID RealClientId; // 6E8h
195 PVOID GdiCachedProcessHandle; // 6F0h
196 ULONG GdiClientPID; // 6F4h
197 ULONG GdiClientTID; // 6F8h
198 PVOID GdiThreadLocaleInfo; // 6FCh
199 PVOID UserReserved[5]; // 700h
200 PVOID glDispatchTable[0x118]; // 714h
201 ULONG glReserved1[0x1A]; // B74h
202 PVOID glReserved2; // BDCh
203 PVOID glSectionInfo; // BE0h
204 PVOID glSection; // BE4h
205 PVOID glTable; // BE8h
206 PVOID glCurrentRC; // BECh
207 PVOID glContext; // BF0h
208 NTSTATUS LastStatusValue; // BF4h
209 UNICODE_STRING StaticUnicodeString; // BF8h
210 WCHAR StaticUnicodeBuffer[0x105]; // C00h
211 PVOID DeallocationStack; // E0Ch
212 PVOID TlsSlots[0x40]; // E10h
213 LIST_ENTRY TlsLinks; // F10h
214 PVOID Vdm; // F18h
215 PVOID ReservedForNtRpc; // F1Ch
216 PVOID DbgSsReserved[0x2]; // F20h
217 ULONG HardErrorDisabled; // F28h
218 PVOID Instrumentation[0x10]; // F2Ch
219 PVOID WinSockData; // F6Ch
220 ULONG GdiBatchCount; // F70h
221 ULONG Spare2; // F74h
222 ULONG Spare3; // F78h
223 ULONG Spare4; // F7Ch
224 PVOID ReservedForOle; // F80h
225 ULONG WaitingOnLoaderLock; // F84h
226 PVOID WineDebugInfo; // Needed for WINE DLL's
227 } TEB, *PTEB;
228
229
230 #define NtCurrentPeb() (NtCurrentTeb()->Peb)
231
232 static inline PTEB NtCurrentTeb(VOID)
233 {
234 int x;
235
236 __asm__ __volatile__("movl %%fs:0x18, %0\n\t"
237 : "=r" (x) /* can't have two memory operands */
238 : /* no inputs */
239 );
240
241 return((PTEB)x);
242 }
243
244 #endif /* __INCLUDE_INTERNAL_TEB */