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
02f28139
Commit
02f28139
authored
Aug 27, 2003
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Renamed a few TEB fields to use the "official" names.
parent
fca4a8f8
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
68 additions
and
60 deletions
+68
-60
task.c
dlls/kernel/task.c
+3
-3
wowthunk.c
dlls/kernel/wowthunk.c
+1
-1
debugtools.c
dlls/ntdll/debugtools.c
+1
-1
loader.c
dlls/ntdll/loader.c
+1
-1
sysdeps.c
dlls/ntdll/sysdeps.c
+1
-1
virtual.c
dlls/ntdll/virtual.c
+1
-1
compobj.c
dlls/ole32/compobj.c
+5
-5
compobj_private.h
dlls/ole32/compobj_private.h
+1
-1
thread.h
include/thread.h
+5
-6
winternl.h
include/winternl.h
+22
-9
client.c
scheduler/client.c
+7
-7
fiber.c
scheduler/fiber.c
+2
-2
process.c
scheduler/process.c
+4
-4
syslevel.c
scheduler/syslevel.c
+8
-12
thread.c
scheduler/thread.c
+6
-6
No files found.
dlls/kernel/task.c
View file @
02f28139
...
...
@@ -461,7 +461,7 @@ HTASK16 TASK_GetTaskFromThread( DWORD thread )
TDB
*
p
=
TASK_GetPtr
(
hFirstTask
);
while
(
p
)
{
if
(
p
->
teb
->
tid
==
thread
)
return
p
->
hSelf
;
if
(
p
->
teb
->
ClientId
.
UniqueThread
==
(
HANDLE
)
thread
)
return
p
->
hSelf
;
p
=
TASK_GetPtr
(
p
->
hNext
);
}
return
0
;
...
...
@@ -620,7 +620,7 @@ BOOL16 WINAPI WaitEvent16( HTASK16 hTask )
if
(
pTask
->
flags
&
TDBF_WIN32
)
{
FIXME
(
"called for Win32 thread (%04lx)!
\n
"
,
NtCurrentTeb
()
->
tid
);
FIXME
(
"called for Win32 thread (%04lx)!
\n
"
,
GetCurrentThreadId
()
);
return
TRUE
;
}
...
...
@@ -659,7 +659,7 @@ void WINAPI PostEvent16( HTASK16 hTask )
if
(
pTask
->
flags
&
TDBF_WIN32
)
{
FIXME
(
"called for Win32 thread (%04lx)!
\n
"
,
pTask
->
teb
->
ti
d
);
FIXME
(
"called for Win32 thread (%04lx)!
\n
"
,
(
DWORD
)
pTask
->
teb
->
ClientId
.
UniqueThrea
d
);
return
;
}
...
...
dlls/kernel/wowthunk.c
View file @
02f28139
...
...
@@ -376,7 +376,7 @@ HANDLE WINAPI K32WOWHandle32( WORD handle, WOW_HANDLE_TYPE type )
return
(
HANDLE
)(
ULONG_PTR
)
handle
;
case
WOW_TYPE_HTASK
:
return
(
HANDLE
)((
TDB
*
)
GlobalLock16
(
handle
))
->
teb
->
ti
d
;
return
(
(
TDB
*
)
GlobalLock16
(
handle
))
->
teb
->
ClientId
.
UniqueThrea
d
;
case
WOW_TYPE_FULLHWND
:
FIXME
(
"conversion of full window handles not supported yet
\n
"
);
...
...
dlls/ntdll/debugtools.c
View file @
02f28139
...
...
@@ -294,7 +294,7 @@ static int NTDLL_dbg_vlog( unsigned int cls, const char *channel,
if
(
info
->
out_pos
==
info
->
output
||
info
->
out_pos
[
-
1
]
==
'\n'
)
{
if
(
TRACE_ON
(
tid
))
ret
=
wine_dbg_printf
(
"%04lx:"
,
NtCurrentTeb
()
->
tid
);
ret
=
wine_dbg_printf
(
"%04lx:"
,
GetCurrentThreadId
()
);
if
(
cls
<
sizeof
(
classes
)
/
sizeof
(
classes
[
0
]))
ret
+=
wine_dbg_printf
(
"%s:%s:%s "
,
classes
[
cls
],
channel
+
1
,
function
);
}
...
...
dlls/ntdll/loader.c
View file @
02f28139
...
...
@@ -516,7 +516,7 @@ static NTSTATUS alloc_thread_tls(void)
memset
(
data
,
0
,
dir
->
SizeOfZeroFill
);
data
+=
dir
->
SizeOfZeroFill
;
}
NtCurrentTeb
()
->
tls_pt
r
=
pointers
;
NtCurrentTeb
()
->
ThreadLocalStoragePointe
r
=
pointers
;
return
STATUS_SUCCESS
;
}
...
...
dlls/ntdll/sysdeps.c
View file @
02f28139
...
...
@@ -298,7 +298,7 @@ void SYSDEPS_ExitThread( int status )
SIGNAL_Block
();
size
=
0
;
NtFreeVirtualMemory
(
GetCurrentProcess
(),
&
teb
->
stack_base
,
&
size
,
MEM_RELEASE
|
MEM_SYSTEM
);
NtFreeVirtualMemory
(
GetCurrentProcess
(),
&
teb
->
DeallocationStack
,
&
size
,
MEM_RELEASE
|
MEM_SYSTEM
);
close
(
teb
->
wait_fd
[
0
]
);
close
(
teb
->
wait_fd
[
1
]
);
close
(
teb
->
reply_fd
);
...
...
dlls/ntdll/virtual.c
View file @
02f28139
...
...
@@ -829,7 +829,7 @@ DWORD VIRTUAL_HandleFault( LPCVOID addr )
{
BYTE
vprot
=
view
->
prot
[((
char
*
)
addr
-
(
char
*
)
view
->
base
)
>>
page_shift
];
void
*
page
=
(
void
*
)((
UINT_PTR
)
addr
&
~
page_mask
);
char
*
stack
=
(
char
*
)
NtCurrentTeb
()
->
stack_base
+
SIGNAL_STACK_SIZE
+
page_mask
+
1
;
char
*
stack
=
(
char
*
)
NtCurrentTeb
()
->
DeallocationStack
+
SIGNAL_STACK_SIZE
+
page_mask
+
1
;
if
(
vprot
&
VPROT_GUARD
)
{
VIRTUAL_SetProt
(
view
,
page
,
page_mask
+
1
,
vprot
&
~
VPROT_GUARD
);
...
...
dlls/ole32/compobj.c
View file @
02f28139
...
...
@@ -207,7 +207,7 @@ static APARTMENT* COM_CreateApartment(DWORD model)
apt
->
next
=
apts
;
apts
=
apt
;
LeaveCriticalSection
(
&
csApartment
);
NtCurrentTeb
()
->
ErrorInfo
=
apt
;
NtCurrentTeb
()
->
ReservedForOle
=
apt
;
return
apt
;
}
...
...
@@ -379,7 +379,7 @@ HRESULT WINAPI CoInitializeEx(
ERR
(
"(%p, %x) - Bad parameter passed-in %p, must be an old Windows Application
\n
"
,
lpReserved
,
(
int
)
dwCoInit
,
lpReserved
);
}
apt
=
NtCurrentTeb
()
->
ErrorInfo
;
apt
=
NtCurrentTeb
()
->
ReservedForOle
;
if
(
apt
&&
dwCoInit
!=
apt
->
model
)
return
RPC_E_CHANGED_MODE
;
hr
=
apt
?
S_FALSE
:
S_OK
;
...
...
@@ -404,7 +404,7 @@ HRESULT WINAPI CoInitializeEx(
if
(
!
apt
)
apt
=
COM_CreateApartment
(
dwCoInit
);
InterlockedIncrement
(
&
apt
->
inits
);
if
(
hr
==
S_OK
)
NtCurrentTeb
()
->
ErrorInfo
=
apt
;
if
(
hr
==
S_OK
)
NtCurrentTeb
()
->
ReservedForOle
=
apt
;
return
hr
;
}
...
...
@@ -423,10 +423,10 @@ void WINAPI CoUninitialize(void)
TRACE
(
"()
\n
"
);
apt
=
NtCurrentTeb
()
->
ErrorInfo
;
apt
=
NtCurrentTeb
()
->
ReservedForOle
;
if
(
!
apt
)
return
;
if
(
InterlockedDecrement
(
&
apt
->
inits
)
==
0
)
{
NtCurrentTeb
()
->
ErrorInfo
=
NULL
;
NtCurrentTeb
()
->
ReservedForOle
=
NULL
;
COM_DestroyApartment
(
apt
);
apt
=
NULL
;
}
...
...
dlls/ole32/compobj_private.h
View file @
02f28139
...
...
@@ -200,7 +200,7 @@ HRESULT WINAPI __CLSIDFromStringA(LPCSTR idstr, CLSID *id);
static
inline
APARTMENT
*
COM_CurrentInfo
(
void
)
WINE_UNUSED
;
static
inline
APARTMENT
*
COM_CurrentInfo
(
void
)
{
APARTMENT
*
apt
=
NtCurrentTeb
()
->
ErrorInfo
;
APARTMENT
*
apt
=
NtCurrentTeb
()
->
ReservedForOle
;
return
apt
;
}
static
inline
APARTMENT
*
COM_CurrentApt
(
void
)
WINE_UNUSED
;
...
...
include/thread.h
View file @
02f28139
...
...
@@ -66,11 +66,10 @@ typedef struct _TEB
struct
_TEB
*
self
;
/* 12- 18 Pointer to this structure */
WORD
tibflags
;
/* 1!n 1c Flags (NT: EnvironmentPointer) */
WORD
mutex_count
;
/* 1-n 1e Win16 mutex count */
DWORD
pid
;
/* !2- 20 Process id (win95: debug context) */
DWORD
tid
;
/* -2- 24 Thread id */
CLIENT_ID
ClientId
;
/* -2- 20 Process and thread id (win95: debug context) */
HQUEUE16
queue
;
/* 1!- 28 Message queue (NT: DWORD ActiveRpcHandle)*/
WORD
pad1
;
/* --n 2a */
LPVOID
*
tls_ptr
;
/* 1-- 2c Pointer to TLS array */
PVOID
ThreadLocalStoragePointer
;
/* 1-- 2c Pointer to TLS array */
PEB
*
Peb
;
/* 12- 30 owning process PEB */
DWORD
flags
;
/* 1-n 34 */
DWORD
exit_code
;
/* 1-- 38 Termination status */
...
...
@@ -130,12 +129,12 @@ typedef struct _TEB
DWORD
pad6
[
624
];
/* --n 238 */
UNICODE_STRING
StaticUnicodeString
;
/* -2- bf8 used by advapi32 */
USHORT
StaticUnicodeBuffer
[
261
];
/* -2- c00 used by advapi32 */
void
*
stack_base
;
/* -2- e0c Base of the stack */
LPVOID
tls_array
[
64
];
/* -2- e10 Thread local storage */
PVOID
DeallocationStack
;
/* -2- e0c Base of the stack */
LPVOID
TlsSlots
[
64
];
/* -2- e10 Thread local storage */
DWORD
pad8
[
3
];
/* --n f10 */
PVOID
ReservedForNtRpc
;
/* -2- f1c used by rpcrt4 */
DWORD
pad9
[
24
];
/* --n f20 */
PVOID
ErrorInfo
;
/* -2- f80 used by ole32 (IErrorInfo*) */
PVOID
ReservedForOle
;
/* -2- f80 used by ole32 (IErrorInfo*) */
}
TEB
;
/* Thread exception flags */
...
...
include/winternl.h
View file @
02f28139
...
...
@@ -34,15 +34,28 @@ extern "C" {
* TEB data structure
*/
#if 0
typedef struct _TEB {
BYTE Reserved1[1952];
PVOID Reserved2[412];
PVOID TlsSlots[64];
BYTE Reserved3[8];
PVOID Reserved4[26];
PVOID ReservedForOle; /* Windows 2000 only */
PVOID Reserved5[4];
PVOID TlsExpansionSlots;
typedef struct _TEB
{
NT_TIB Tib; /* 000 */
PVOID EnvironmentPointer; /* 01c */
CLIENT_ID ClientId; /* 020 */
PVOID ActiveRpcHandle; /* 028 */
PVOID ThreadLocalStoragePointer; /* 02c */
PPEB Peb; /* 030 */
ULONG LastErrorValue; /* 034 */
BYTE __pad038[140]; /* 038 */
ULONG CurrentLocale; /* 0c4 */
BYTE __pad0c8[1752]; /* 0c8 */
PVOID Reserved2[278]; /* 7a0 */
UNICODE_STRING StaticUnicodeString; /* bf8 used by advapi32 */
WCHAR StaticUnicodeBuffer[261]; /* c00 used by advapi32 */
PVOID DeallocationStack; /* e0c */
PVOID TlsSlots[64]; /* e10 */
BYTE Reserved3[8]; /* f10 */
PVOID Reserved4[26]; /* f18 */
PVOID ReservedForOle; /* f80 Windows 2000 only */
PVOID Reserved5[4]; /* f84 */
PVOID TlsExpansionSlots; /* f94 */
} TEB, *PTEB;
#endif
...
...
scheduler/client.c
View file @
02f28139
...
...
@@ -75,7 +75,7 @@ struct cmsg_fd
};
#endif
/* HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
static
DWORD
boot_thread_id
;
static
HANDLE
boot_thread_id
;
static
sigset_t
block_set
;
/* signals to block during server calls */
static
int
fd_socket
;
/* socket to exchange file descriptors with the server */
...
...
@@ -118,7 +118,7 @@ void server_protocol_error( const char *err, ... )
va_list
args
;
va_start
(
args
,
err
);
fprintf
(
stderr
,
"wine client error:%lx: "
,
NtCurrentTeb
()
->
tid
);
fprintf
(
stderr
,
"wine client error:%lx: "
,
GetCurrentThreadId
()
);
vfprintf
(
stderr
,
err
,
args
);
va_end
(
args
);
SYSDEPS_AbortThread
(
1
);
...
...
@@ -130,7 +130,7 @@ void server_protocol_error( const char *err, ... )
*/
void
server_protocol_perror
(
const
char
*
err
)
{
fprintf
(
stderr
,
"wine client error:%lx: "
,
NtCurrentTeb
()
->
tid
);
fprintf
(
stderr
,
"wine client error:%lx: "
,
GetCurrentThreadId
()
);
perror
(
err
);
SYSDEPS_AbortThread
(
1
);
}
...
...
@@ -708,11 +708,11 @@ void CLIENT_InitThread(void)
req
->
reply_fd
=
reply_pipe
[
1
];
req
->
wait_fd
=
teb
->
wait_fd
[
1
];
ret
=
wine_server_call
(
req
);
teb
->
pid
=
reply
->
pid
;
teb
->
tid
=
reply
->
tid
;
teb
->
ClientId
.
UniqueProcess
=
(
HANDLE
)
reply
->
pid
;
teb
->
ClientId
.
UniqueThread
=
(
HANDLE
)
reply
->
tid
;
version
=
reply
->
version
;
if
(
reply
->
boot
)
boot_thread_id
=
teb
->
ti
d
;
else
if
(
boot_thread_id
==
teb
->
ti
d
)
boot_thread_id
=
0
;
if
(
reply
->
boot
)
boot_thread_id
=
teb
->
ClientId
.
UniqueThrea
d
;
else
if
(
boot_thread_id
==
teb
->
ClientId
.
UniqueThrea
d
)
boot_thread_id
=
0
;
}
SERVER_END_REQ
;
...
...
scheduler/fiber.c
View file @
02f28139
...
...
@@ -144,7 +144,7 @@ LPVOID WINAPI ConvertThreadToFiberEx( LPVOID param, DWORD flags )
fiber
->
except
=
NtCurrentTeb
()
->
except
;
fiber
->
stack_top
=
NtCurrentTeb
()
->
stack_top
;
fiber
->
stack_low
=
NtCurrentTeb
()
->
stack_low
;
fiber
->
stack_base
=
NtCurrentTeb
()
->
stack_base
;
fiber
->
stack_base
=
NtCurrentTeb
()
->
DeallocationStack
;
fiber
->
start
=
NULL
;
fiber
->
flags
=
flags
;
NtCurrentTeb
()
->
fiber
=
fiber
;
...
...
@@ -187,7 +187,7 @@ void WINAPI SwitchToFiber( LPVOID fiber )
NtCurrentTeb
()
->
except
=
new_fiber
->
except
;
NtCurrentTeb
()
->
stack_top
=
new_fiber
->
stack_top
;
NtCurrentTeb
()
->
stack_low
=
new_fiber
->
stack_low
;
NtCurrentTeb
()
->
stack_base
=
new_fiber
->
stack_base
;
NtCurrentTeb
()
->
DeallocationStack
=
new_fiber
->
stack_base
;
if
(
new_fiber
->
start
)
/* first time */
SYSDEPS_SwitchToThreadStack
(
start_fiber
,
new_fiber
);
else
...
...
scheduler/process.c
View file @
02f28139
...
...
@@ -1475,7 +1475,7 @@ DWORD WINAPI TlsAlloc( void )
for
(
i
=
0
,
mask
=
1
;
i
<
32
;
i
++
,
mask
<<=
1
)
if
(
!
(
*
bits
&
mask
))
break
;
*
bits
|=
mask
;
RtlReleasePebLock
();
NtCurrentTeb
()
->
tls_array
[
ret
+
i
]
=
0
;
/* clear the value */
NtCurrentTeb
()
->
TlsSlots
[
ret
+
i
]
=
0
;
/* clear the value */
return
ret
+
i
;
}
...
...
@@ -1508,7 +1508,7 @@ BOOL WINAPI TlsFree(
return
FALSE
;
}
*
bits
&=
~
mask
;
NtCurrentTeb
()
->
tls_array
[
index
]
=
0
;
NtCurrentTeb
()
->
TlsSlots
[
index
]
=
0
;
/* FIXME: should zero all other thread values */
RtlReleasePebLock
();
return
TRUE
;
...
...
@@ -1531,7 +1531,7 @@ LPVOID WINAPI TlsGetValue(
return
NULL
;
}
SetLastError
(
ERROR_SUCCESS
);
return
NtCurrentTeb
()
->
tls_array
[
index
];
return
NtCurrentTeb
()
->
TlsSlots
[
index
];
}
...
...
@@ -1551,6 +1551,6 @@ BOOL WINAPI TlsSetValue(
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
}
NtCurrentTeb
()
->
tls_array
[
index
]
=
value
;
NtCurrentTeb
()
->
TlsSlots
[
index
]
=
value
;
return
TRUE
;
}
scheduler/syslevel.c
View file @
02f28139
...
...
@@ -91,9 +91,8 @@ VOID WINAPI _EnterSysLevel(SYSLEVEL *lock)
TEB
*
teb
=
NtCurrentTeb
();
int
i
;
TRACE
(
"(%p, level %d): thread %lx (fs %04x, pid %ld) count before %ld
\n
"
,
lock
,
lock
->
level
,
teb
->
tid
,
teb
->
teb_sel
,
(
long
)
getpid
(),
teb
->
sys_count
[
lock
->
level
]
);
TRACE
(
"(%p, level %d): thread %lx count before %ld
\n
"
,
lock
,
lock
->
level
,
GetCurrentThreadId
(),
teb
->
sys_count
[
lock
->
level
]
);
for
(
i
=
3
;
i
>
lock
->
level
;
i
--
)
if
(
teb
->
sys_count
[
i
]
>
0
)
...
...
@@ -107,9 +106,8 @@ VOID WINAPI _EnterSysLevel(SYSLEVEL *lock)
teb
->
sys_count
[
lock
->
level
]
++
;
teb
->
sys_mutex
[
lock
->
level
]
=
lock
;
TRACE
(
"(%p, level %d): thread %lx (fs %04x, pid %ld) count after %ld
\n
"
,
lock
,
lock
->
level
,
teb
->
tid
,
teb
->
teb_sel
,
(
long
)
getpid
(),
teb
->
sys_count
[
lock
->
level
]
);
TRACE
(
"(%p, level %d): thread %lx count after %ld
\n
"
,
lock
,
lock
->
level
,
GetCurrentThreadId
(),
teb
->
sys_count
[
lock
->
level
]
);
if
(
lock
==
&
Win16Mutex
)
SYSLEVEL_Win16CurrentTeb
=
wine_get_fs
();
...
...
@@ -123,9 +121,8 @@ VOID WINAPI _LeaveSysLevel(SYSLEVEL *lock)
{
TEB
*
teb
=
NtCurrentTeb
();
TRACE
(
"(%p, level %d): thread %lx (fs %04x, pid %ld) count before %ld
\n
"
,
lock
,
lock
->
level
,
teb
->
tid
,
teb
->
teb_sel
,
(
long
)
getpid
(),
teb
->
sys_count
[
lock
->
level
]
);
TRACE
(
"(%p, level %d): thread %lx count before %ld
\n
"
,
lock
,
lock
->
level
,
GetCurrentThreadId
(),
teb
->
sys_count
[
lock
->
level
]
);
if
(
teb
->
sys_count
[
lock
->
level
]
<=
0
||
teb
->
sys_mutex
[
lock
->
level
]
!=
lock
)
{
...
...
@@ -141,9 +138,8 @@ VOID WINAPI _LeaveSysLevel(SYSLEVEL *lock)
RtlLeaveCriticalSection
(
&
lock
->
crst
);
TRACE
(
"(%p, level %d): thread %lx (fs %04x, pid %ld) count after %ld
\n
"
,
lock
,
lock
->
level
,
teb
->
tid
,
teb
->
teb_sel
,
(
long
)
getpid
(),
teb
->
sys_count
[
lock
->
level
]
);
TRACE
(
"(%p, level %d): thread %lx count after %ld
\n
"
,
lock
,
lock
->
level
,
GetCurrentThreadId
(),
teb
->
sys_count
[
lock
->
level
]
);
}
/************************************************************************
...
...
scheduler/thread.c
View file @
02f28139
...
...
@@ -85,7 +85,7 @@ static void THREAD_FreeTEB( TEB *teb )
TRACE
(
"(%p) called
\n
"
,
teb
);
/* Free the associated memory */
wine_ldt_free_fs
(
teb
->
teb_sel
);
VirtualFree
(
teb
->
stack_base
,
0
,
MEM_RELEASE
);
VirtualFree
(
teb
->
DeallocationStack
,
0
,
MEM_RELEASE
);
}
...
...
@@ -111,7 +111,7 @@ TEB *THREAD_InitStack( TEB *teb, DWORD stack_size )
if
(
teb
)
stack_size
=
1024
*
1024
;
/* no parent */
else
stack_size
=
((
char
*
)
NtCurrentTeb
()
->
stack_top
-
(
char
*
)
NtCurrentTeb
()
->
stack_base
stack_size
=
((
char
*
)
NtCurrentTeb
()
->
stack_top
-
(
char
*
)
NtCurrentTeb
()
->
DeallocationStack
-
SIGNAL_STACK_SIZE
-
3
*
page_size
);
}
...
...
@@ -147,7 +147,7 @@ TEB *THREAD_InitStack( TEB *teb, DWORD stack_size )
}
teb
->
stack_low
=
base
;
teb
->
stack_base
=
base
;
teb
->
DeallocationStack
=
base
;
teb
->
signal_stack
=
(
char
*
)
base
+
page_size
;
teb
->
stack_top
=
(
char
*
)
base
+
3
*
page_size
+
SIGNAL_STACK_SIZE
+
stack_size
;
...
...
@@ -262,7 +262,7 @@ HANDLE WINAPI CreateThread( SECURITY_ATTRIBUTES *sa, SIZE_T stack,
}
teb
->
Peb
=
NtCurrentTeb
()
->
Peb
;
teb
->
tid
=
tid
;
teb
->
ClientId
.
UniqueThread
=
(
HANDLE
)
tid
;
teb
->
request_fd
=
request_pipe
[
1
];
teb
->
entry_point
=
start
;
teb
->
entry_arg
=
param
;
...
...
@@ -472,7 +472,7 @@ DWORD WINAPI GetLastError(void)
*/
DWORD
WINAPI
GetCurrentProcessId
(
void
)
{
return
(
DWORD
)
NtCurrentTeb
()
->
pid
;
return
(
DWORD
)
NtCurrentTeb
()
->
ClientId
.
UniqueProcess
;
}
/***********************************************************************
...
...
@@ -483,7 +483,7 @@ DWORD WINAPI GetCurrentProcessId(void)
*/
DWORD
WINAPI
GetCurrentThreadId
(
void
)
{
return
NtCurrentTeb
()
->
ti
d
;
return
(
DWORD
)
NtCurrentTeb
()
->
ClientId
.
UniqueThrea
d
;
}
#endif
/* __i386__ */
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