Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
0bf52b09
Commit
0bf52b09
authored
Jul 23, 2020
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Update the TEB and PEB structures for newer Windows versions.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
0e4d22bd
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
102 additions
and
50 deletions
+102
-50
kernel16_private.h
dlls/krnl386.exe16/kernel16_private.h
+2
-1
ntdll_misc.h
dlls/ntdll/ntdll_misc.h
+1
-0
signal_i386.c
dlls/ntdll/signal_i386.c
+4
-3
signal_arm.c
dlls/ntdll/unix/signal_arm.c
+2
-2
signal_arm64.c
dlls/ntdll/unix/signal_arm64.c
+8
-8
signal_i386.c
dlls/ntdll/unix/signal_i386.c
+9
-8
signal_x86_64.c
dlls/ntdll/unix/signal_x86_64.c
+7
-7
unix_private.h
dlls/ntdll/unix/unix_private.h
+1
-0
virtual.c
dlls/ntdll/unix/virtual.c
+2
-0
winternl.h
include/winternl.h
+66
-21
No files found.
dlls/krnl386.exe16/kernel16_private.h
View file @
0bf52b09
...
...
@@ -304,9 +304,10 @@ struct kernel_thread_data
WORD
htask16
;
/* Win16 task handle */
DWORD
sys_count
[
4
];
/* syslevel mutex entry counters */
struct
tagSYSLEVEL
*
sys_mutex
[
4
];
/* syslevel mutex pointers */
void
*
pad
[
45
];
/* change this if you add fields! */
};
C_ASSERT
(
sizeof
(
struct
kernel_thread_data
)
<=
sizeof
(((
TEB
*
)
0
)
->
SystemReserved1
)
);
static
inline
struct
kernel_thread_data
*
kernel_get_thread_data
(
void
)
{
return
(
struct
kernel_thread_data
*
)
NtCurrentTeb
()
->
SystemReserved1
;
...
...
dlls/ntdll/ntdll_misc.h
View file @
0bf52b09
...
...
@@ -113,6 +113,7 @@ extern enum loadorder get_load_order( const WCHAR *app_name, const UNICODE_STRIN
/* thread private data, stored in NtCurrentTeb()->GdiTebBatch */
struct
ntdll_thread_data
{
void
*
cpu_data
[
16
];
/* reserved for CPU-specific data */
struct
debug_info
*
debug_info
;
/* info for debugstr functions */
void
*
start_stack
;
/* stack for thread startup */
int
request_fd
;
/* fd for sending server requests */
...
...
dlls/ntdll/signal_i386.c
View file @
0bf52b09
...
...
@@ -78,12 +78,13 @@ struct x86_thread_data
/* the ntdll_thread_data structure follows here */
};
C_ASSERT
(
offsetof
(
TEB
,
SystemReserved2
)
+
offsetof
(
struct
x86_thread_data
,
gs
)
==
0x1d8
);
C_ASSERT
(
offsetof
(
TEB
,
SystemReserved2
)
+
offsetof
(
struct
x86_thread_data
,
exit_frame
)
==
0x1f4
);
C_ASSERT
(
sizeof
(
struct
x86_thread_data
)
<=
sizeof
(
((
struct
ntdll_thread_data
*
)
0
)
->
cpu_data
));
C_ASSERT
(
offsetof
(
TEB
,
GdiTebBatch
)
+
offsetof
(
struct
x86_thread_data
,
gs
)
==
0x1d8
);
C_ASSERT
(
offsetof
(
TEB
,
GdiTebBatch
)
+
offsetof
(
struct
x86_thread_data
,
exit_frame
)
==
0x1f4
);
static
inline
struct
x86_thread_data
*
x86_thread_data
(
void
)
{
return
(
struct
x86_thread_data
*
)
NtCurrentTeb
()
->
SystemReserved2
;
return
(
struct
x86_thread_data
*
)
ntdll_get_thread_data
()
->
cpu_data
;
}
struct
ldt_copy
*
__wine_ldt_copy
=
NULL
;
...
...
dlls/ntdll/unix/signal_arm.c
View file @
0bf52b09
...
...
@@ -880,7 +880,7 @@ __ASM_GLOBAL_FUNC( signal_start_thread,
"push {r4-r12,lr}
\n\t
"
/* store exit frame */
"ldr r4, [sp, #40]
\n\t
"
/* teb */
"str sp, [r4, #0x1d4]
\n\t
"
/* teb->
SystemReserved2
*/
"str sp, [r4, #0x1d4]
\n\t
"
/* teb->
GdiTebBatch
*/
/* switch to thread stack */
"ldr r4, [r4, #4]
\n\t
"
/* teb->Tib.StackBase */
"sub sp, r4, #0x1000
\n\t
"
...
...
@@ -899,7 +899,7 @@ __ASM_GLOBAL_FUNC( signal_start_thread,
extern
void
DECLSPEC_NORETURN
call_thread_exit_func
(
int
status
,
void
(
*
func
)(
int
),
TEB
*
teb
);
__ASM_GLOBAL_FUNC
(
call_thread_exit_func
,
".arm
\n\t
"
"ldr r3, [r2, #0x1d4]
\n\t
"
/* teb->
SystemReserved2
*/
"ldr r3, [r2, #0x1d4]
\n\t
"
/* teb->
GdiTebBatch
*/
"mov ip, #0
\n\t
"
"str ip, [r2, #0x1d4]
\n\t
"
"cmp r3, ip
\n\t
"
...
...
dlls/ntdll/unix/signal_arm64.c
View file @
0bf52b09
...
...
@@ -118,16 +118,16 @@ static pthread_key_t teb_key;
struct
arm64_thread_data
{
void
*
exit_frame
;
/* exit frame pointer */
CONTEXT
*
context
;
/* context to set with SIGUSR2 */
void
*
exit_frame
;
/*
02f0
exit frame pointer */
CONTEXT
*
context
;
/*
02f8
context to set with SIGUSR2 */
};
C_ASSERT
(
sizeof
(
struct
arm64_thread_data
)
<=
sizeof
(((
TEB
*
)
0
)
->
SystemReserved2
)
);
C_ASSERT
(
offsetof
(
TEB
,
SystemReserved2
)
+
offsetof
(
struct
arm64_thread_data
,
exit_frame
)
==
0x30
0
);
C_ASSERT
(
sizeof
(
struct
arm64_thread_data
)
<=
sizeof
(((
struct
ntdll_thread_data
*
)
0
)
->
cpu_data
)
);
C_ASSERT
(
offsetof
(
TEB
,
GdiTebBatch
)
+
offsetof
(
struct
arm64_thread_data
,
exit_frame
)
==
0x2f
0
);
static
inline
struct
arm64_thread_data
*
arm64_thread_data
(
void
)
{
return
(
struct
arm64_thread_data
*
)
NtCurrentTeb
()
->
SystemReserved2
;
return
(
struct
x86_thread_data
*
)
ntdll_get_thread_data
()
->
cpu_data
;
}
...
...
@@ -932,7 +932,7 @@ __ASM_GLOBAL_FUNC( signal_start_thread,
"mov x18, x4
\n\t
"
/* teb */
/* store exit frame */
"mov x29, sp
\n\t
"
"str x29, [x4, #0x
30
0]
\n\t
"
/* arm64_thread_data()->exit_frame */
"str x29, [x4, #0x
2f
0]
\n\t
"
/* arm64_thread_data()->exit_frame */
/* switch to thread stack */
"ldr x5, [x4, #8]
\n\t
"
/* teb->Tib.StackBase */
"sub sp, x5, #0x1000
\n\t
"
...
...
@@ -971,8 +971,8 @@ __ASM_GLOBAL_FUNC( signal_start_thread,
extern
void
DECLSPEC_NORETURN
call_thread_exit_func
(
int
status
,
void
(
*
func
)(
int
),
TEB
*
teb
);
__ASM_GLOBAL_FUNC
(
call_thread_exit_func
,
"stp x29, x30, [sp,#-16]!
\n\t
"
"ldr x3, [x2, #0x
30
0]
\n\t
"
/* arm64_thread_data()->exit_frame */
"str xzr, [x2, #0x
30
0]
\n\t
"
"ldr x3, [x2, #0x
2f
0]
\n\t
"
/* arm64_thread_data()->exit_frame */
"str xzr, [x2, #0x
2f
0]
\n\t
"
"cbz x3, 1f
\n\t
"
"mov sp, x3
\n
"
"1:
\t
ldp x29, x30, [sp], #16
\n\t
"
...
...
dlls/ntdll/unix/signal_i386.c
View file @
0bf52b09
...
...
@@ -487,12 +487,13 @@ struct x86_thread_data
/* the ntdll_thread_data structure follows here */
};
C_ASSERT
(
offsetof
(
TEB
,
SystemReserved2
)
+
offsetof
(
struct
x86_thread_data
,
gs
)
==
0x1d8
);
C_ASSERT
(
offsetof
(
TEB
,
SystemReserved2
)
+
offsetof
(
struct
x86_thread_data
,
exit_frame
)
==
0x1f4
);
C_ASSERT
(
sizeof
(
struct
x86_thread_data
)
<=
sizeof
(((
struct
ntdll_thread_data
*
)
0
)
->
cpu_data
)
);
C_ASSERT
(
offsetof
(
TEB
,
GdiTebBatch
)
+
offsetof
(
struct
x86_thread_data
,
gs
)
==
0x1d8
);
C_ASSERT
(
offsetof
(
TEB
,
GdiTebBatch
)
+
offsetof
(
struct
x86_thread_data
,
exit_frame
)
==
0x1f4
);
static
inline
struct
x86_thread_data
*
x86_thread_data
(
void
)
{
return
(
struct
x86_thread_data
*
)
NtCurrentTeb
()
->
SystemReserved2
;
return
(
struct
x86_thread_data
*
)
ntdll_get_thread_data
()
->
cpu_data
;
}
static
inline
WORD
get_cs
(
void
)
{
WORD
res
;
__asm__
(
"movw %%cs,%0"
:
"=r"
(
res
)
);
return
res
;
}
...
...
@@ -567,7 +568,7 @@ static void wine_sigacthandler( int signal, siginfo_t *siginfo, void *sigcontext
__asm__
__volatile__
(
"mov %ss,%ax; mov %ax,%ds; mov %ax,%es"
);
thread_data
=
(
struct
x86_thread_data
*
)
get_current_teb
()
->
SystemReserved2
;
thread_data
=
(
struct
x86_thread_data
*
)
get_current_teb
()
->
GdiTebBatch
;
set_fs
(
thread_data
->
fs
);
set_gs
(
thread_data
->
gs
);
...
...
@@ -615,7 +616,7 @@ static inline void *init_handler( const ucontext_t *sigcontext )
#ifndef __sun
/* see above for Solaris handling */
{
struct
x86_thread_data
*
thread_data
=
(
struct
x86_thread_data
*
)
teb
->
SystemReserved2
;
struct
x86_thread_data
*
thread_data
=
(
struct
x86_thread_data
*
)
&
teb
->
GdiTebBatch
;
set_fs
(
thread_data
->
fs
);
set_gs
(
thread_data
->
gs
);
}
...
...
@@ -2044,7 +2045,7 @@ void signal_init_threading(void)
*/
NTSTATUS
signal_alloc_thread
(
TEB
*
teb
)
{
struct
x86_thread_data
*
thread_data
=
(
struct
x86_thread_data
*
)
teb
->
SystemReserved2
;
struct
x86_thread_data
*
thread_data
=
(
struct
x86_thread_data
*
)
&
teb
->
GdiTebBatch
;
if
(
!
gdt_fs_sel
)
{
...
...
@@ -2086,7 +2087,7 @@ NTSTATUS signal_alloc_thread( TEB *teb )
*/
void
signal_free_thread
(
TEB
*
teb
)
{
struct
x86_thread_data
*
thread_data
=
(
struct
x86_thread_data
*
)
teb
->
SystemReserved2
;
struct
x86_thread_data
*
thread_data
=
(
struct
x86_thread_data
*
)
&
teb
->
GdiTebBatch
;
sigset_t
sigset
;
if
(
gdt_fs_sel
)
return
;
...
...
@@ -2103,7 +2104,7 @@ void signal_free_thread( TEB *teb )
void
signal_init_thread
(
TEB
*
teb
)
{
const
WORD
fpu_cw
=
0x27f
;
struct
x86_thread_data
*
thread_data
=
(
struct
x86_thread_data
*
)
teb
->
SystemReserved2
;
struct
x86_thread_data
*
thread_data
=
(
struct
x86_thread_data
*
)
&
teb
->
GdiTebBatch
;
ldt_set_fs
(
thread_data
->
fs
,
teb
);
thread_data
->
gs
=
get_gs
();
...
...
dlls/ntdll/unix/signal_x86_64.c
View file @
0bf52b09
...
...
@@ -242,21 +242,21 @@ C_ASSERT( sizeof(struct stack_layout) == 0x630 ); /* Should match the size in ca
struct
amd64_thread_data
{
DWORD_PTR
dr0
;
/* debug registers */
DWORD_PTR
dr0
;
/*
02f0
debug registers */
DWORD_PTR
dr1
;
DWORD_PTR
dr2
;
DWORD_PTR
dr3
;
DWORD_PTR
dr6
;
DWORD_PTR
dr7
;
void
*
exit_frame
;
/* exit frame pointer */
void
*
exit_frame
;
/*
0320
exit frame pointer */
};
C_ASSERT
(
sizeof
(
struct
amd64_thread_data
)
<=
sizeof
(((
TEB
*
)
0
)
->
SystemReserved2
)
);
C_ASSERT
(
offsetof
(
TEB
,
SystemReserved2
)
+
offsetof
(
struct
amd64_thread_data
,
exit_frame
)
==
0x33
0
);
C_ASSERT
(
sizeof
(
struct
amd64_thread_data
)
<=
sizeof
(((
struct
ntdll_thread_data
*
)
0
)
->
cpu_data
)
);
C_ASSERT
(
offsetof
(
TEB
,
GdiTebBatch
)
+
offsetof
(
struct
amd64_thread_data
,
exit_frame
)
==
0x32
0
);
static
inline
struct
amd64_thread_data
*
amd64_thread_data
(
void
)
{
return
(
struct
amd64_thread_data
*
)
NtCurrentTeb
()
->
SystemReserved2
;
return
(
struct
amd64_thread_data
*
)
ntdll_get_thread_data
()
->
cpu_data
;
}
...
...
@@ -2479,7 +2479,7 @@ __ASM_GLOBAL_FUNC( signal_start_thread,
__ASM_CFI
(
".cfi_rel_offset %r15,8
\n\t
"
)
/* store exit frame */
"movq %gs:0x30,%rax
\n\t
"
"movq %rsp,0x3
3
0(%rax)
\n\t
"
/* amd64_thread_data()->exit_frame */
"movq %rsp,0x3
2
0(%rax)
\n\t
"
/* amd64_thread_data()->exit_frame */
/* switch to thread stack */
"movq 8(%rax),%rax
\n\t
"
/* NtCurrentTeb()->Tib.StackBase */
"leaq -0x1000(%rax),%rsp
\n\t
"
...
...
@@ -2503,7 +2503,7 @@ __ASM_GLOBAL_FUNC( signal_start_thread,
__ASM_GLOBAL_FUNC
(
signal_exit_thread
,
/* fetch exit frame */
"movq %gs:0x30,%rax
\n\t
"
"movq 0x3
3
0(%rax),%rdx
\n\t
"
/* amd64_thread_data()->exit_frame */
"movq 0x3
2
0(%rax),%rdx
\n\t
"
/* amd64_thread_data()->exit_frame */
"testq %rdx,%rdx
\n\t
"
"jnz 1f
\n\t
"
"jmp *%rsi
\n
"
...
...
dlls/ntdll/unix/unix_private.h
View file @
0bf52b09
...
...
@@ -51,6 +51,7 @@ struct debug_info
/* thread private data, stored in NtCurrentTeb()->GdiTebBatch */
struct
ntdll_thread_data
{
void
*
cpu_data
[
16
];
/* reserved for CPU-specific data */
struct
debug_info
*
debug_info
;
/* info for debugstr functions */
void
*
start_stack
;
/* stack for thread startup */
int
request_fd
;
/* fd for sending server requests */
...
...
dlls/ntdll/unix/virtual.c
View file @
0bf52b09
...
...
@@ -2570,6 +2570,8 @@ static void init_teb( TEB *teb, PEB *peb )
teb
->
Tib
.
Self
=
&
teb
->
Tib
;
teb
->
Tib
.
ExceptionList
=
(
void
*
)
~
0ul
;
teb
->
Tib
.
StackBase
=
(
void
*
)
~
0ul
;
teb
->
ActivationContextStackPointer
=
&
teb
->
ActivationContextStack
;
InitializeListHead
(
&
teb
->
ActivationContextStack
.
FrameListCache
);
teb
->
StaticUnicodeString
.
Buffer
=
teb
->
StaticUnicodeBuffer
;
teb
->
StaticUnicodeString
.
MaximumLength
=
sizeof
(
teb
->
StaticUnicodeBuffer
);
thread_data
->
request_fd
=
-
1
;
...
...
include/winternl.h
View file @
0bf52b09
...
...
@@ -233,10 +233,11 @@ typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
typedef
struct
_ACTIVATION_CONTEXT_STACK
{
ULONG
Flags
;
ULONG
NextCookieSequenceNumber
;
RTL_ACTIVATION_CONTEXT_STACK_FRAME
*
ActiveFrame
;
LIST_ENTRY
FrameListCache
;
ULONG
Flags
;
ULONG
NextCookieSequenceNumber
;
ULONG_PTR
StackId
;
}
ACTIVATION_CONTEXT_STACK
,
*
PACTIVATION_CONTEXT_STACK
;
typedef
struct
_TEB_ACTIVE_FRAME_CONTEXT
...
...
@@ -340,6 +341,18 @@ typedef struct _PEB
LIST_ENTRY
FlsListHead
;
/* 210/328 */
PRTL_BITMAP
FlsBitmap
;
/* 218/338 */
ULONG
FlsBitmapBits
[
4
];
/* 21c/340 */
ULONG
FlsHighIndex
;
/* 22c/350 */
PVOID
WerRegistrationData
;
/* 230/358 */
PVOID
WerShipAssertPtr
;
/* 234/360 */
PVOID
pUnused
;
/* 238/368 */
PVOID
pImageHeaderHash
;
/* 23c/370 */
ULONG
TracingFlags
;
/* 240/378 */
ULONGLONG
CsrServerReadOnlySharedMemoryBase
;
/* 248/380 */
ULONG
TppWorkerpListLock
;
/* 250/388 */
LIST_ENTRY
TppWorkerpList
;
/* 254/390 */
PVOID
WaitOnAddressHashTable
[
0x80
];
/* 25c/3a0 */
PVOID
TelemetryCoverageHeader
;
/* 45c/7a0 */
ULONG
CloudFileFlags
;
/* 460/7a8 */
}
PEB
,
*
PPEB
;
...
...
@@ -358,27 +371,44 @@ typedef struct _TEB
ULONG
CountOfOwnedCriticalSections
;
/* 038/006c */
PVOID
CsrClientThread
;
/* 03c/0070 */
PVOID
Win32ThreadInfo
;
/* 040/0078 */
ULONG
Win32ClientInfo
[
31
];
/* 044/0080 used for user32 private data in Wine */
ULONG
User32Reserved
[
26
];
/* 044/0080 */
ULONG
UserReserved
[
5
];
/* 0ac/00e8 */
PVOID
WOW32Reserved
;
/* 0c0/0100 */
ULONG
CurrentLocale
;
/* 0c4/0108 */
ULONG
FpSoftwareStatusRegister
;
/* 0c8/010c */
PVOID
SystemReserved1
[
54
];
/* 0cc/0110 used for kernel32 private data in Wine */
PVOID
ReservedForDebuggerInstrumentation
[
16
];
/* 0cc/0110 */
#ifdef _WIN64
PVOID
SystemReserved1
[
30
];
/* /0190 */
#else
PVOID
SystemReserved1
[
26
];
/* 10c/ used for krnl386 private data in Wine */
#endif
char
PlaceholderCompatibilityMode
;
/* 174/0280 */
char
PlaceholderReserved
[
11
];
/* 175/0281 */
DWORD
ProxiedProcessId
;
/* 180/028c */
ACTIVATION_CONTEXT_STACK
ActivationContextStack
;
/* 184/0290 */
UCHAR
WorkingOnBehalfOfTicket
[
8
];
/* 19c/02b8 */
LONG
ExceptionCode
;
/* 1a4/02c0 */
ACTIVATION_CONTEXT_STACK
ActivationContextStack
;
/* 1a8/02c8 */
BYTE
SpareBytes1
[
24
];
/* 1bc/02e8 */
PVOID
SystemReserved2
[
10
];
/* 1d4/0300 used for ntdll platform-specific private data in Wine */
GDI_TEB_BATCH
GdiTebBatch
;
/* 1fc/0350 used for ntdll private data in Wine */
HANDLE
gdiRgn
;
/* 6dc/0838 */
HANDLE
gdiPen
;
/* 6e0/0840 */
HANDLE
gdiBrush
;
/* 6e4/0848 */
CLIENT_ID
RealClientId
;
/* 6e8/0850 */
HANDLE
GdiCachedProcessHandle
;
/* 6f0/0860 */
ULONG
GdiClientPID
;
/* 6f4/0868 */
ULONG
GdiClientTID
;
/* 6f8/086c */
PVOID
GdiThreadLocaleInfo
;
/* 6fc/0870 */
ULONG
UserReserved
[
5
];
/* 700/0878 */
PVOID
glDispatchTable
[
280
];
/* 714/0890 */
PVOID
glReserved1
[
26
];
/* b74/1150 */
ACTIVATION_CONTEXT_STACK
*
ActivationContextStackPointer
;
/* 1a8/02c8 */
ULONG_PTR
InstrumentationCallbackSp
;
/* 1ac/02d0 */
ULONG_PTR
InstrumentationCallbackPreviousPc
;
/* 1b0/02d8 */
ULONG_PTR
InstrumentationCallbackPreviousSp
;
/* 1b4/02e0 */
#ifdef _WIN64
ULONG
TxFsContext
;
/* /02e8 */
BOOLEAN
InstrumentationCallbackDisabled
;
/* /02ec */
#else
BOOLEAN
InstrumentationCallbackDisabled
;
/* 1b8/ */
BYTE
SpareBytes1
[
23
];
/* 1b9/ */
ULONG
TxFsContext
;
/* 1d0/ */
#endif
GDI_TEB_BATCH
GdiTebBatch
;
/* 1d4/02f0 used for ntdll private data in Wine */
CLIENT_ID
RealClientId
;
/* 6b4/07d8 */
HANDLE
GdiCachedProcessHandle
;
/* 6bc/07e8 */
ULONG
GdiClientPID
;
/* 6c0/07f0 */
ULONG
GdiClientTID
;
/* 6c4/07f4 */
PVOID
GdiThreadLocaleInfo
;
/* 6c8/07f8 */
ULONG_PTR
Win32ClientInfo
[
62
];
/* 6cc/0800 used for user32 private data in Wine */
PVOID
glDispatchTable
[
233
];
/* 7c4/09f0 */
PVOID
glReserved1
[
29
];
/* b68/1138 */
PVOID
glReserved2
;
/* bdc/1220 */
PVOID
glSectionInfo
;
/* be0/1228 */
PVOID
glSection
;
/* be4/1230 */
...
...
@@ -386,8 +416,8 @@ typedef struct _TEB
PVOID
glCurrentRC
;
/* bec/1240 */
PVOID
glContext
;
/* bf0/1248 */
ULONG
LastStatusValue
;
/* bf4/1250 */
UNICODE_STRING
StaticUnicodeString
;
/* bf8/1258
used by advapi32
*/
WCHAR
StaticUnicodeBuffer
[
261
];
/* c00/1268
used by advapi32
*/
UNICODE_STRING
StaticUnicodeString
;
/* bf8/1258 */
WCHAR
StaticUnicodeBuffer
[
261
];
/* c00/1268 */
PVOID
DeallocationStack
;
/* e0c/1478 */
PVOID
TlsSlots
[
64
];
/* e10/1480 */
LIST_ENTRY
TlsLinks
;
/* f10/1680 */
...
...
@@ -417,6 +447,21 @@ typedef struct _TEB
PVOID
CurrentTransactionHandle
;
/* fac/17b8 */
TEB_ACTIVE_FRAME
*
ActiveFrame
;
/* fb0/17c0 */
PVOID
*
FlsSlots
;
/* fb4/17c8 */
PVOID
PreferredLanguages
;
/* fb8/17d0 */
PVOID
UserPrefLanguages
;
/* fbc/17d8 */
PVOID
MergedPrefLanguages
;
/* fc0/17e0 */
ULONG
MuiImpersonation
;
/* fc4/17e8 */
USHORT
CrossTebFlags
;
/* fc8/17ec */
USHORT
SameTebFlags
;
/* fca/17ee */
PVOID
TxnScopeEnterCallback
;
/* fcc/17f0 */
PVOID
TxnScopeExitCallback
;
/* fd0/17f8 */
PVOID
TxnScopeContext
;
/* fd4/1800 */
ULONG
LockCount
;
/* fd8/1808 */
LONG
WowTebOffset
;
/* fdc/180c */
PVOID
ResourceRetValue
;
/* fe0/1810 */
PVOID
ReservedForWdf
;
/* fe4/1818 */
ULONGLONG
ReservedForCrt
;
/* fe8/1820 */
GUID
EffectiveContainerId
;
/* ff0/1828 */
}
TEB
,
*
PTEB
;
/***********************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment