[SDK] Fix NT6 building issues and improve SDK NT6 headers.
[reactos.git] / sdk / include / ndk / peb_teb.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 peb_teb.h
8
9 Abstract:
10
11 Definition of PEB/PEB32/PEB64 and TEB/TEB32/TEB64
12
13 Author:
14
15 Timo Kreuzer (timo.kreuzer@reactos.org)
16
17 --*/
18
19 #include <rtltypes.h>
20
21 #define PASTE2(x,y) x##y
22 #define PASTE(x,y) PASTE2(x,y)
23
24 #ifdef EXPLICIT_32BIT
25 #define STRUCT(x) PASTE(x,32)
26 #define PTR(x) ULONG
27 #elif defined(EXPLICIT_64BIT)
28 #define STRUCT(x) PASTE(x,64)
29 #define PTR(x) ULONG64
30 #else
31 #define STRUCT(x) x
32 #define PTR(x) x
33 #endif
34
35 #if (defined(_WIN64) && !defined(EXPLICIT_32BIT)) || defined(EXPLICIT_64BIT)
36 #define _STRUCT64
37 #define _SELECT3264(x32, x64) (x64)
38 #define GDI_HANDLE_BUFFER_SIZE 60
39 #else
40 #undef _STRUCT64
41 #define _SELECT3264(x32, x64) (x32)
42 #define GDI_HANDLE_BUFFER_SIZE 34
43 #endif
44
45 #if defined(_NTDDK_INCLUDED_) || defined(_NTIFS_)
46 #define PPEB PPEB_RENAMED
47 #endif
48
49 typedef struct STRUCT(_PEB)
50 {
51 BOOLEAN InheritedAddressSpace;
52 BOOLEAN ReadImageFileExecOptions;
53 BOOLEAN BeingDebugged;
54 #if (NTDDI_VERSION >= NTDDI_WS03)
55 union
56 {
57 BOOLEAN BitField;
58 struct
59 {
60 BOOLEAN ImageUsesLargePages:1;
61 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
62 BOOLEAN IsProtectedProcess:1;
63 BOOLEAN IsLegacyProcess:1;
64 BOOLEAN IsImageDynamicallyRelocated:1;
65 BOOLEAN SkipPatchingUser32Forwarders:1;
66 BOOLEAN SpareBits:3;
67 #else
68 BOOLEAN SpareBits:7;
69 #endif
70 };
71 };
72 #else
73 BOOLEAN SpareBool;
74 #endif
75 PTR(HANDLE) Mutant;
76 PTR(PVOID) ImageBaseAddress;
77 PTR(PPEB_LDR_DATA) Ldr;
78 PTR(struct _RTL_USER_PROCESS_PARAMETERS*) ProcessParameters;
79 PTR(PVOID) SubSystemData;
80 PTR(PVOID) ProcessHeap;
81 PTR(struct _RTL_CRITICAL_SECTION*) FastPebLock;
82 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
83 PTR(PVOID) AltThunkSListPtr;
84 PTR(PVOID) IFEOKey;
85 union
86 {
87 ULONG CrossProcessFlags;
88 struct
89 {
90 ULONG ProcessInJob:1;
91 ULONG ProcessInitializing:1;
92 ULONG ProcessUsingVEH:1;
93 ULONG ProcessUsingVCH:1;
94 ULONG ReservedBits0:28;
95 };
96 };
97 union
98 {
99 PTR(PVOID) KernelCallbackTable;
100 PTR(PVOID) UserSharedInfoPtr;
101 };
102 #elif (NTDDI_VERSION >= NTDDI_WS03)
103 PTR(PVOID) AltThunkSListPtr;
104 PTR(PVOID) SparePtr2;
105 ULONG EnvironmentUpdateCount;
106 PTR(PVOID) KernelCallbackTable;
107 #else
108 PTR(PPEBLOCKROUTINE) FastPebLockRoutine;
109 PTR(PPEBLOCKROUTINE) FastPebUnlockRoutine;
110 ULONG EnvironmentUpdateCount;
111 PTR(PVOID) KernelCallbackTable;
112 #endif
113 ULONG SystemReserved[1];
114 ULONG SpareUlong; // AtlThunkSListPtr32
115 PTR(PPEB_FREE_BLOCK) FreeList;
116 ULONG TlsExpansionCounter;
117 PTR(PVOID) TlsBitmap;
118 ULONG TlsBitmapBits[2];
119 PTR(PVOID) ReadOnlySharedMemoryBase;
120 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
121 PTR(PVOID) HotpatchInformation;
122 #else
123 PTR(PVOID) ReadOnlySharedMemoryHeap;
124 #endif
125 PTR(PVOID*) ReadOnlyStaticServerData;
126 PTR(PVOID) AnsiCodePageData;
127 PTR(PVOID) OemCodePageData;
128 PTR(PVOID) UnicodeCaseTableData;
129 ULONG NumberOfProcessors;
130 ULONG NtGlobalFlag;
131 LARGE_INTEGER CriticalSectionTimeout;
132 PTR(ULONG_PTR) HeapSegmentReserve;
133 PTR(ULONG_PTR) HeapSegmentCommit;
134 PTR(ULONG_PTR) HeapDeCommitTotalFreeThreshold;
135 PTR(ULONG_PTR) HeapDeCommitFreeBlockThreshold;
136 ULONG NumberOfHeaps;
137 ULONG MaximumNumberOfHeaps;
138 PTR(PVOID*) ProcessHeaps;
139 PTR(PVOID) GdiSharedHandleTable;
140 PTR(PVOID) ProcessStarterHelper;
141 ULONG GdiDCAttributeList;
142 PTR(struct _RTL_CRITICAL_SECTION*) LoaderLock;
143 ULONG OSMajorVersion;
144 ULONG OSMinorVersion;
145 USHORT OSBuildNumber;
146 USHORT OSCSDVersion;
147 ULONG OSPlatformId;
148 ULONG ImageSubsystem;
149 ULONG ImageSubsystemMajorVersion;
150 ULONG ImageSubsystemMinorVersion;
151 PTR(ULONG_PTR) ImageProcessAffinityMask;
152 ULONG GdiHandleBuffer[GDI_HANDLE_BUFFER_SIZE];
153 PTR(PPOST_PROCESS_INIT_ROUTINE) PostProcessInitRoutine;
154 PTR(PVOID) TlsExpansionBitmap;
155 ULONG TlsExpansionBitmapBits[32];
156 ULONG SessionId;
157 #if (NTDDI_VERSION >= NTDDI_WINXP)
158 ULARGE_INTEGER AppCompatFlags;
159 ULARGE_INTEGER AppCompatFlagsUser;
160 PTR(PVOID) pShimData;
161 PTR(PVOID) AppCompatInfo;
162 STRUCT(UNICODE_STRING) CSDVersion;
163 PTR(struct _ACTIVATION_CONTEXT_DATA*) ActivationContextData;
164 PTR(struct _ASSEMBLY_STORAGE_MAP*) ProcessAssemblyStorageMap;
165 PTR(struct _ACTIVATION_CONTEXT_DATA*) SystemDefaultActivationContextData;
166 PTR(struct _ASSEMBLY_STORAGE_MAP*) SystemAssemblyStorageMap;
167 PTR(ULONG_PTR) MinimumStackCommit;
168 #endif
169 #if (NTDDI_VERSION >= NTDDI_WS03)
170 PTR(PVOID*) FlsCallback;
171 STRUCT(LIST_ENTRY) FlsListHead;
172 PTR(PVOID) FlsBitmap;
173 ULONG FlsBitmapBits[4]; // [FLS_MAXIMUM_AVAILABLE/(sizeof(ULONG)*8)];
174 ULONG FlsHighIndex;
175 #endif
176 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
177 PTR(PVOID) WerRegistrationData;
178 PTR(PVOID) WerShipAssertPtr;
179 #endif
180 } STRUCT(PEB), *STRUCT(PPEB);
181
182 #undef PPEB
183
184 #ifdef _STRUCT64
185 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Mutant) == 0x08);
186 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Ldr) == 0x18);
187 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FastPebLock) == 0x038);
188 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), TlsExpansionCounter) == 0x070);
189 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), NtGlobalFlag) == 0x0BC);
190 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), GdiSharedHandleTable) == 0x0F8);
191 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), LoaderLock) == 0x110);
192 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageSubsystem) == 0x128);
193 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageProcessAffinityMask) == 0x138);
194 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), PostProcessInitRoutine) == 0x230);
195 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), SessionId) == 0x2C0);
196 #if (NTDDI_VERSION >= NTDDI_WS03)
197 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FlsHighIndex) == 0x350);
198 #endif
199 #else
200 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Mutant) == 0x04);
201 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Ldr) == 0x0C);
202 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FastPebLock) == 0x01C);
203 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), TlsExpansionCounter) == 0x03C);
204 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), NtGlobalFlag) == 0x068);
205 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), GdiSharedHandleTable) == 0x094);
206 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), LoaderLock) == 0x0A0);
207 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageSubsystem) == 0x0B4);
208 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageProcessAffinityMask) == 0x0C0);
209 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), PostProcessInitRoutine) == 0x14C);
210 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), SessionId) == 0x1D4);
211 #if (NTDDI_VERSION >= NTDDI_WS03)
212 C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FlsHighIndex) == 0x22C);
213 #endif
214 #endif
215
216 #define GDI_BATCH_BUFFER_SIZE 0x136
217 //
218 // GDI Batch Descriptor
219 //
220 typedef struct STRUCT(_GDI_TEB_BATCH)
221 {
222 ULONG Offset;
223 PTR(HANDLE) HDC;
224 ULONG Buffer[GDI_BATCH_BUFFER_SIZE];
225 } STRUCT(GDI_TEB_BATCH), *STRUCT(PGDI_TEB_BATCH);
226
227 //
228 // Thread Environment Block (TEB)
229 //
230 typedef struct STRUCT(_TEB)
231 {
232 STRUCT(NT_TIB) NtTib;
233 PTR(PVOID) EnvironmentPointer;
234 STRUCT(CLIENT_ID) ClientId;
235 PTR(PVOID) ActiveRpcHandle;
236 PTR(PVOID) ThreadLocalStoragePointer;
237 PTR(STRUCT(PPEB)) ProcessEnvironmentBlock;
238 ULONG LastErrorValue;
239 ULONG CountOfOwnedCriticalSections;
240 PTR(PVOID) CsrClientThread;
241 PTR(PVOID) Win32ThreadInfo;
242 ULONG User32Reserved[26];
243 ULONG UserReserved[5];
244 PTR(PVOID) WOW32Reserved;
245 LCID CurrentLocale;
246 ULONG FpSoftwareStatusRegister;
247
248 #if (NTDDI_VERSION >= NTDDI_WIN10) // since 10.0.10240.16384
249 PTR(PVOID) ReservedForDebuggerInstrumentation[16];
250 PTR(PVOID) SystemReserved1[38];
251 #else
252 PTR(PVOID) SystemReserved1[54];
253 #endif
254 LONG ExceptionCode;
255 #ifdef _STRUCT64
256 UCHAR Padding0[4];
257 #endif
258
259 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
260 PTR(PACTIVATION_CONTEXT_STACK) ActivationContextStackPointer;
261 #else
262 STRUCT(ACTIVATION_CONTEXT_STACK) ActivationContextStack;
263 #endif
264
265 #if (NTDDI_VERSION >= NTDDI_WIN10) // since 10.0.9926.0
266 PTR(ULONG_PTR) InstrumentationCallbackSp;
267 PTR(ULONG_PTR) InstrumentationCallbackPreviousPc;
268 PTR(ULONG_PTR) InstrumentationCallbackPreviousSp;
269 #ifdef _STRUCT64
270 ULONG TxFsContext;
271 UCHAR InstrumentationCallbackDisabled;
272 UCHAR Padding1[3];
273 #else
274 UCHAR InstrumentationCallbackDisabled;
275 UCHAR SpareBytes[23];
276 ULONG TxFsContext;
277 #endif
278 #elif (NTDDI_VERSION >= NTDDI_WIN7)
279 UCHAR SpareBytes[_SELECT3264(36, 24)];
280 ULONG TxFsContext;
281 #elif (NTDDI_VERSION >= NTDDI_VISTA)
282 UCHAR SpareBytes1[_SELECT3264(36, 24)];
283 ULONG TxFsContext;
284 #elif (NTDDI_VERSION >= NTDDI_WS03SP1)
285 UCHAR SpareBytes1[_SELECT3264(40, 28)];
286 #else // only 32 bit version of 2k3 pre-SP1 exist
287 UCHAR SpareBytes1[_SELECT3264(24, -1)];
288 #endif
289
290 STRUCT(GDI_TEB_BATCH) GdiTebBatch;
291 STRUCT(CLIENT_ID) RealClientId;
292 PTR(PVOID) GdiCachedProcessHandle;
293 ULONG GdiClientPID;
294 ULONG GdiClientTID;
295 PTR(PVOID) GdiThreadLocalInfo;
296 PTR(SIZE_T) Win32ClientInfo[62];
297 PTR(PVOID) glDispatchTable[233];
298 PTR(SIZE_T) glReserved1[29];
299 PTR(PVOID) glReserved2;
300 PTR(PVOID) glSectionInfo;
301 PTR(PVOID) glSection;
302 PTR(PVOID) glTable;
303 PTR(PVOID) glCurrentRC;
304 PTR(PVOID) glContext;
305 ULONG LastStatusValue;
306 #ifdef _STRUCT64
307 UCHAR Padding2[4];
308 #endif
309 STRUCT(UNICODE_STRING) StaticUnicodeString;
310 WCHAR StaticUnicodeBuffer[261];
311 #ifdef _STRUCT64
312 UCHAR Padding3[6];
313 #endif
314 PTR(PVOID) DeallocationStack;
315 PTR(PVOID) TlsSlots[64];
316 STRUCT(LIST_ENTRY) TlsLinks;
317 PTR(PVOID) Vdm;
318 PTR(PVOID) ReservedForNtRpc;
319 PTR(PVOID) DbgSsReserved[2];
320 #if (NTDDI_VERSION >= NTDDI_WS03)
321 ULONG HardErrorMode;
322 #else
323 ULONG HardErrorsAreDisabled;
324 #endif
325 #ifdef _STRUCT64
326 UCHAR Padding4[4];
327 #endif
328 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
329 PTR(PVOID) Instrumentation[13 - sizeof(GUID)/sizeof(PTR(PVOID))];
330 GUID ActivityId;
331 PTR(PVOID) SubProcessTag;
332 #if (NTDDI_VERSION >= NTDDI_WIN8) // since ???
333 PTR(PVOID) PerflibData;
334 #else
335 PTR(PVOID) EtwLocalData;
336 #endif
337 PTR(PVOID) EtwTraceData;
338 #elif (NTDDI_VERSION >= NTDDI_WS03)
339 PTR(PVOID) Instrumentation[14];
340 PTR(PVOID) SubProcessTag;
341 PTR(PVOID) EtwTraceData;
342 #else
343 PTR(PVOID) Instrumentation[16];
344 #endif
345 PTR(PVOID) WinSockData;
346 ULONG GdiBatchCount;
347 #if (NTDDI_VERSION >= NTDDI_WIN7)
348 union
349 {
350 PROCESSOR_NUMBER CurrentIdealProcessor;
351 ULONG32 IdealProcessorValue;
352 struct
353 {
354 UCHAR ReservedPad0;
355 UCHAR ReservedPad1;
356 UCHAR ReservedPad2;
357 UCHAR IdealProcessor;
358 };
359 };
360 #elif (NTDDI_VERSION >= NTDDI_LONGHORN)
361 BOOLEAN SpareBool0;
362 BOOLEAN SpareBool1;
363 BOOLEAN SpareBool2;
364 UCHAR IdealProcessor;
365 #else
366 BOOLEAN InDbgPrint;
367 BOOLEAN FreeStackOnTermination;
368 BOOLEAN HasFiberData;
369 UCHAR IdealProcessor;
370 #endif
371 #if (NTDDI_VERSION >= NTDDI_WS03)
372 ULONG GuaranteedStackBytes;
373 #else
374 ULONG Spare3;
375 #endif
376 #ifdef _STRUCT64
377 UCHAR Padding5[4];
378 #endif
379 PTR(PVOID) ReservedForPerf;
380 PTR(PVOID) ReservedForOle;
381 ULONG WaitingOnLoaderLock;
382 #ifdef _STRUCT64
383 UCHAR Padding6[4];
384 #endif
385 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
386 PTR(PVOID) SavedPriorityState;
387 #if (NTDDI_VERSION >= NTDDI_WIN8)
388 PTR(ULONG_PTR) ReservedForCodeCoverage;
389 #else
390 PTR(ULONG_PTR) SoftPatchPtr1;
391 #endif
392 PTR(ULONG_PTR) ThreadPoolData;
393 #elif (NTDDI_VERSION >= NTDDI_WS03)
394 PTR(ULONG_PTR) SparePointer1;
395 PTR(ULONG_PTR) SoftPatchPtr1;
396 PTR(ULONG_PTR) SoftPatchPtr2;
397 #else
398 Wx86ThreadState Wx86Thread;
399 #endif
400 PTR(PVOID*) TlsExpansionSlots;
401 #ifdef _STRUCT64
402 PTR(PVOID) DeallocationBStore;
403 PTR(PVOID) BStoreLimit;
404 #endif
405 #if (NTDDI_VERSION >= NTDDI_WIN10)
406 ULONG MuiGeneration;
407 #else
408 ULONG ImpersonationLocale;
409 #endif
410 ULONG IsImpersonating;
411 PTR(PVOID) NlsCache;
412 PTR(PVOID) pShimData;
413 #if (NTDDI_VERSION >= NTDDI_WIN8)
414 USHORT HeapVirtualAffinity;
415 USHORT LowFragHeapDataSlot;
416 #else
417 ULONG HeapVirtualAffinity;
418 #endif
419 #ifdef _STRUCT64
420 UCHAR Padding7[4];
421 #endif
422 PTR(HANDLE) CurrentTransactionHandle;
423 PTR(PTEB_ACTIVE_FRAME) ActiveFrame;
424 #if (NTDDI_VERSION >= NTDDI_WS03)
425 PTR(PVOID) FlsData;
426 #endif
427
428 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
429 PTR(PVOID) PreferredLanguages;
430 PTR(PVOID) UserPrefLanguages;
431 PTR(PVOID) MergedPrefLanguages;
432 ULONG MuiImpersonation;
433 union
434 {
435 USHORT CrossTebFlags;
436 struct
437 {
438 USHORT SpareCrossTebBits:16;
439 };
440 };
441 union
442 {
443 USHORT SameTebFlags;
444 struct
445 {
446 USHORT DbgSafeThunkCall:1;
447 USHORT DbgInDebugPrint:1;
448 USHORT DbgHasFiberData:1;
449 USHORT DbgSkipThreadAttach:1;
450 USHORT DbgWerInShipAssertCode:1;
451 USHORT DbgIssuedInitialBp:1;
452 USHORT DbgClonedThread:1;
453 USHORT SpareSameTebBits:9;
454 };
455 };
456 PTR(PVOID) TxnScopeEnterCallback;
457 PTR(PVOID) TxnScopeExitCallback;
458 PTR(PVOID) TxnScopeContext;
459 ULONG LockCount;
460 #else
461 BOOLEAN SafeThunkCall;
462 BOOLEAN BooleanSpare[3];
463 #endif
464
465 #if (NTDDI_VERSION >= NTDDI_WIN10) // since 10.0.10041.0
466 LONG WowTebOffset;
467 #elif (NTDDI_VERSION >= NTDDI_WIN7)
468 ULONG SpareUlong0;
469 #elif (NTDDI_VERSION >= NTDDI_LONGHORN)
470 ULONG ProcessRundown;
471 #endif
472
473 #if (NTDDI_VERSION >= NTDDI_WIN7)
474 PTR(PVOID) ResourceRetValue;
475 #elif (NTDDI_VERSION >= NTDDI_LONGHORN)
476 ULONG64 LastSwitchTime;
477 ULONG64 TotalSwitchOutTime;
478 LARGE_INTEGER WaitReasonBitMap;
479 #endif
480
481 #if (NTDDI_VERSION >= NTDDI_WIN8)
482 PTR(PVOID) ReservedForWdf;
483 #endif
484
485 #if (NTDDI_VERSION >= NTDDI_WIN10)
486 ULONG64 ReservedForCrt;
487 GUID EffectiveContainerId;
488 #endif
489
490 } STRUCT(TEB), *STRUCT(PTEB);
491
492 #ifdef _STRUCT64
493 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), NtTib) == 0x000);
494 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), EnvironmentPointer) == 0x038);
495 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ExceptionCode) == 0x2C0);
496 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiTebBatch) == 0x2F0);
497 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), LastStatusValue) == 0x1250);
498 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), Vdm) == 0x1690);
499 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), HardErrorMode) == 0x16B0);
500 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiBatchCount) == 0x1740);
501 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), IdealProcessor) == 0x1747);
502 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), WaitingOnLoaderLock) == 0x1760);
503 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), TlsExpansionSlots) == 0x1780);
504 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), WaitingOnLoaderLock) == 0x1760);
505 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ActiveFrame) == 0x17C0);
506 #else
507 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), NtTib) == 0x000);
508 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), EnvironmentPointer) == 0x01C);
509 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ExceptionCode) == 0x1A4);
510 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiTebBatch) == 0x1D4);
511 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), RealClientId) == 0x6B4);
512 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), LastStatusValue) == 0xBF4);
513 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), Vdm) == 0xF18);
514 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiBatchCount) == 0xF70);
515 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), TlsExpansionSlots) == 0xF94);
516 C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ActiveFrame) == 0xFB0);
517 #endif
518
519 #undef _STRUCT64
520 #undef _SELECT3264
521 #undef PTR
522 #undef STRUCT
523 #undef PASTE
524 #undef PASTE2
525 #undef GDI_HANDLE_BUFFER_SIZE