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
6bc50911
Commit
6bc50911
authored
May 22, 2003
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Start to make use of the proper PEB structure for process
information.
parent
2989895f
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
70 additions
and
70 deletions
+70
-70
heap.c
dlls/ntdll/heap.c
+1
-2
ntdll_misc.h
dlls/ntdll/ntdll_misc.h
+1
-43
thread.h
include/thread.h
+1
-2
winternl.h
include/winternl.h
+61
-10
module.c
loader/module.c
+3
-8
heap.c
memory/heap.c
+1
-2
winedbg.c
programs/winedbg/winedbg.c
+0
-1
thread.c
scheduler/thread.c
+2
-2
No files found.
dlls/ntdll/heap.c
View file @
6bc50911
...
...
@@ -141,8 +141,7 @@ inline static void set_status( NTSTATUS status )
/* set the process main heap */
static
void
set_process_heap
(
HANDLE
heap
)
{
HANDLE
*
pdb
=
(
HANDLE
*
)
NtCurrentTeb
()
->
process
;
pdb
[
0x18
/
sizeof
(
HANDLE
)]
=
heap
;
/* heap is at offset 0x18 in pdb */
NtCurrentTeb
()
->
Peb
->
ProcessHeap
=
heap
;
processHeap
=
heap
;
}
...
...
dlls/ntdll/ntdll_misc.h
View file @
6bc50911
...
...
@@ -40,51 +40,9 @@ extern FARPROC SNOOP_GetProcAddress( HMODULE hmod, IMAGE_EXPORT_DIRECTORY *expor
FARPROC
origfun
,
DWORD
ordinal
);
extern
void
RELAY_SetupDLL
(
const
char
*
module
);
typedef
struct
RTL_DRIVE_LETTER_CURDIR
{
USHORT
Flags
;
USHORT
Length
;
ULONG
TimeStamp
;
UNICODE_STRING
DosPath
;
}
RTL_DRIVE_LETTER_CURDIR
,
*
PRTL_DRIVE_LETTER_CURDIR
;
typedef
struct
_RTL_USER_PROCESS_PARAMETERS
{
ULONG
AllocationSize
;
ULONG
Size
;
ULONG
Flags
;
ULONG
DebugFlags
;
HANDLE
hConsole
;
ULONG
ProcessGroup
;
HANDLE
hStdInput
;
HANDLE
hStdOutput
;
HANDLE
hStdError
;
UNICODE_STRING
CurrentDirectoryName
;
HANDLE
CurrentDirectoryHandle
;
UNICODE_STRING
DllPath
;
UNICODE_STRING
ImagePathName
;
UNICODE_STRING
CommandLine
;
PWSTR
Environment
;
ULONG
dwX
;
ULONG
dwY
;
ULONG
dwXSize
;
ULONG
dwYSize
;
ULONG
dwXCountChars
;
ULONG
dwYCountChars
;
ULONG
dwFillAttribute
;
ULONG
dwFlags
;
ULONG
wShowWindow
;
UNICODE_STRING
WindowTitle
;
UNICODE_STRING
DesktopInfo
;
UNICODE_STRING
ShellInfo
;
UNICODE_STRING
RuntimeInfo
;
RTL_DRIVE_LETTER_CURDIR
DLCurrentDirectory
[
0x20
];
}
RTL_USER_PROCESS_PARAMETERS
,
*
PRTL_USER_PROCESS_PARAMETERS
;
static
inline
HANDLE
ntdll_get_process_heap
(
void
)
{
HANDLE
*
pdb
=
(
HANDLE
*
)
NtCurrentTeb
()
->
process
;
return
pdb
[
0x18
/
sizeof
(
HANDLE
)];
/* get dword at offset 0x18 in pdb */
return
NtCurrentTeb
()
->
Peb
->
ProcessHeap
;
}
/* FIXME: this should be part of PEB, once it's defined */
...
...
include/thread.h
View file @
6bc50911
...
...
@@ -24,7 +24,6 @@
#include "winternl.h"
#include "wine/windef16.h"
struct
_PDB
;
struct
__EXCEPTION_FRAME
;
struct
_SECURITY_ATTRIBUTES
;
struct
tagSYSLEVEL
;
...
...
@@ -64,7 +63,7 @@ typedef struct _TEB
HQUEUE16
queue
;
/* 1!- 28 Message queue (NT: DWORD ActiveRpcHandle)*/
WORD
pad1
;
/* --n 2a */
LPVOID
*
tls_ptr
;
/* 1-- 2c Pointer to TLS array */
struct
_PDB
*
process
;
/* 12- 30 owning process (win95: PDB; nt: NTPEB !!)
*/
PEB
*
Peb
;
/* 12- 30 owning process PEB
*/
DWORD
flags
;
/* 1-n 34 */
DWORD
exit_code
;
/* 1-- 38 Termination status */
WORD
teb_sel
;
/* 1-- 3c Selector to TEB */
...
...
include/winternl.h
View file @
6bc50911
...
...
@@ -29,16 +29,6 @@
extern
"C"
{
#endif
/* defined(__cplusplus) */
/***********************************************************************
* PEB data structure
*/
typedef
struct
_PEB
{
BYTE
Reserved1
[
2
];
BYTE
BeingDebugged
;
BYTE
Reserved2
[
229
];
PVOID
Reserved3
[
59
];
ULONG
SessionId
;
}
PEB
,
*
PPEB
;
/***********************************************************************
* TEB data structure
...
...
@@ -101,6 +91,67 @@ typedef struct _CURDIR
PVOID
Handle
;
}
CURDIR
,
*
PCURDIR
;
typedef
struct
RTL_DRIVE_LETTER_CURDIR
{
USHORT
Flags
;
USHORT
Length
;
ULONG
TimeStamp
;
UNICODE_STRING
DosPath
;
}
RTL_DRIVE_LETTER_CURDIR
,
*
PRTL_DRIVE_LETTER_CURDIR
;
typedef
struct
_RTL_USER_PROCESS_PARAMETERS
{
ULONG
AllocationSize
;
ULONG
Size
;
ULONG
Flags
;
ULONG
DebugFlags
;
HANDLE
hConsole
;
ULONG
ProcessGroup
;
HANDLE
hStdInput
;
HANDLE
hStdOutput
;
HANDLE
hStdError
;
UNICODE_STRING
CurrentDirectoryName
;
HANDLE
CurrentDirectoryHandle
;
UNICODE_STRING
DllPath
;
UNICODE_STRING
ImagePathName
;
UNICODE_STRING
CommandLine
;
PWSTR
Environment
;
ULONG
dwX
;
ULONG
dwY
;
ULONG
dwXSize
;
ULONG
dwYSize
;
ULONG
dwXCountChars
;
ULONG
dwYCountChars
;
ULONG
dwFillAttribute
;
ULONG
dwFlags
;
ULONG
wShowWindow
;
UNICODE_STRING
WindowTitle
;
UNICODE_STRING
DesktopInfo
;
UNICODE_STRING
ShellInfo
;
UNICODE_STRING
RuntimeInfo
;
RTL_DRIVE_LETTER_CURDIR
DLCurrentDirectory
[
0x20
];
}
RTL_USER_PROCESS_PARAMETERS
,
*
PRTL_USER_PROCESS_PARAMETERS
;
/***********************************************************************
* PEB data structure
*/
typedef
struct
_PEB
{
BYTE
Reserved1
[
2
];
/* 00 */
BYTE
BeingDebugged
;
/* 02 */
BYTE
Reserved2
[
5
];
/* 03 */
HMODULE
ImageBaseAddress
;
/* 08 */
PVOID
__pad_0c
;
/* 0c */
RTL_USER_PROCESS_PARAMETERS
*
ProcessParameters
;
/* 10 */
PVOID
__pad_14
;
/* 14 */
HANDLE
ProcessHeap
;
/* 18 */
BYTE
__pad_1c
[
204
];
/* 1c */
PVOID
Reserved3
[
59
];
/* e8 */
ULONG
SessionId
;
/* 1d4 */
}
PEB
,
*
PPEB
;
/***********************************************************************
* Enums
*/
...
...
loader/module.c
View file @
6bc50911
...
...
@@ -45,11 +45,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(module);
WINE_DECLARE_DEBUG_CHANNEL
(
win32
);
WINE_DECLARE_DEBUG_CHANNEL
(
loaddll
);
inline
static
HMODULE
get_exe_module
(
void
)
{
HANDLE
*
pdb
=
(
HANDLE
*
)
NtCurrentTeb
()
->
process
;
return
pdb
[
0x08
/
sizeof
(
HANDLE
)];
/* get dword at offset 0x08 in pdb */
}
/***********************************************************************
* wait_input_idle
...
...
@@ -481,7 +476,7 @@ HMODULE WINAPI GetModuleHandleA(LPCSTR module)
HMODULE
ret
;
UNICODE_STRING
wstr
;
if
(
!
module
)
return
get_exe_module
()
;
if
(
!
module
)
return
NtCurrentTeb
()
->
Peb
->
ImageBaseAddress
;
RtlCreateUnicodeStringFromAsciiz
(
&
wstr
,
module
);
nts
=
LdrGetDllHandle
(
0
,
0
,
&
wstr
,
&
ret
);
...
...
@@ -503,7 +498,7 @@ HMODULE WINAPI GetModuleHandleW(LPCWSTR module)
HMODULE
ret
;
UNICODE_STRING
wstr
;
if
(
!
module
)
return
get_exe_module
()
;
if
(
!
module
)
return
NtCurrentTeb
()
->
Peb
->
ImageBaseAddress
;
RtlInitUnicodeString
(
&
wstr
,
module
);
nts
=
LdrGetDllHandle
(
0
,
0
,
&
wstr
,
&
ret
);
...
...
@@ -570,7 +565,7 @@ DWORD WINAPI GetModuleFileNameW( HMODULE hModule, LPWSTR lpFileName, DWORD size
LDR_MODULE
*
pldr
;
NTSTATUS
nts
;
if
(
!
hModule
)
hModule
=
get_exe_module
()
;
if
(
!
hModule
)
hModule
=
NtCurrentTeb
()
->
Peb
->
ImageBaseAddress
;
nts
=
LdrFindEntryForAddress
(
hModule
,
&
pldr
);
if
(
nts
==
STATUS_SUCCESS
)
lstrcpynW
(
lpFileName
,
pldr
->
FullDllName
.
Buffer
,
size
);
else
SetLastError
(
RtlNtStatusToDosError
(
nts
)
);
...
...
memory/heap.c
View file @
6bc50911
...
...
@@ -225,8 +225,7 @@ BOOL WINAPI HeapWalk(
*/
HANDLE
WINAPI
GetProcessHeap
(
void
)
{
HANDLE
*
pdb
=
(
HANDLE
*
)
NtCurrentTeb
()
->
process
;
return
pdb
[
0x18
/
sizeof
(
HANDLE
)];
/* get dword at offset 0x18 in pdb */
return
NtCurrentTeb
()
->
Peb
->
ProcessHeap
;
}
...
...
programs/winedbg/winedbg.c
View file @
6bc50911
...
...
@@ -26,7 +26,6 @@
#include "debugger.h"
#include "winternl.h"
#include "thread.h"
#include "wincon.h"
#include "winreg.h"
#include "wingdi.h"
...
...
scheduler/thread.c
View file @
6bc50911
...
...
@@ -211,7 +211,7 @@ void THREAD_Init(void)
{
THREAD_InitTEB
(
&
initial_teb
);
assert
(
initial_teb
.
teb_sel
);
initial_teb
.
process
=
&
current_process
;
initial_teb
.
Peb
=
(
PEB
*
)
&
current_process
;
/* FIXME */
SYSDEPS_SetCurThread
(
&
initial_teb
);
SYSDEPS_InitErrno
();
}
...
...
@@ -277,7 +277,7 @@ HANDLE WINAPI CreateThread( SECURITY_ATTRIBUTES *sa, SIZE_T stack,
return
0
;
}
teb
->
process
=
NtCurrentTeb
()
->
process
;
teb
->
Peb
=
NtCurrentTeb
()
->
Peb
;
teb
->
tid
=
tid
;
teb
->
request_fd
=
request_pipe
[
1
];
teb
->
entry_point
=
start
;
...
...
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