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
c583953b
Commit
c583953b
authored
Oct 03, 2017
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
server: Use the correct process when looking for a mapped dll.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
541e7ba7
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
19 additions
and
14 deletions
+19
-14
debugger.c
server/debugger.c
+14
-4
file.h
server/file.h
+1
-1
mapping.c
server/mapping.c
+4
-9
No files found.
server/debugger.c
View file @
c583953b
...
...
@@ -147,6 +147,7 @@ static int fill_create_process_event( struct debug_event *event, const void *arg
struct
process
*
process
=
thread
->
process
;
struct
process_dll
*
exe_module
=
get_process_exe_module
(
process
);
const
client_ptr_t
*
entry
=
arg
;
struct
file
*
file
;
obj_handle_t
handle
;
/* documented: PROCESS_VM_READ | PROCESS_VM_WRITE */
...
...
@@ -170,8 +171,12 @@ static int fill_create_process_event( struct debug_event *event, const void *arg
event
->
data
.
create_process
.
unicode
=
1
;
/* the doc says write access too, but this doesn't seem a good idea */
event
->
data
.
create_process
.
file
=
open_mapping_file
(
debugger
,
exe_module
->
base
,
GENERIC_READ
,
FILE_SHARE_READ
|
FILE_SHARE_WRITE
);
if
((
file
=
get_mapping_file
(
process
,
exe_module
->
base
,
GENERIC_READ
,
FILE_SHARE_READ
|
FILE_SHARE_WRITE
)))
{
event
->
data
.
create_process
.
file
=
alloc_handle
(
debugger
,
file
,
GENERIC_READ
,
0
);
release_object
(
file
);
}
return
1
;
}
...
...
@@ -191,8 +196,10 @@ static int fill_exit_process_event( struct debug_event *event, const void *arg )
static
int
fill_load_dll_event
(
struct
debug_event
*
event
,
const
void
*
arg
)
{
struct
process
*
process
=
event
->
sender
->
process
;
struct
process
*
debugger
=
event
->
debugger
->
process
;
const
struct
process_dll
*
dll
=
arg
;
struct
file
*
file
;
event
->
data
.
load_dll
.
handle
=
0
;
event
->
data
.
load_dll
.
base
=
dll
->
base
;
...
...
@@ -200,8 +207,11 @@ static int fill_load_dll_event( struct debug_event *event, const void *arg )
event
->
data
.
load_dll
.
dbg_size
=
dll
->
dbg_size
;
event
->
data
.
load_dll
.
name
=
dll
->
name
;
event
->
data
.
load_dll
.
unicode
=
1
;
event
->
data
.
load_dll
.
handle
=
open_mapping_file
(
debugger
,
dll
->
base
,
GENERIC_READ
,
FILE_SHARE_READ
|
FILE_SHARE_WRITE
);
if
((
file
=
get_mapping_file
(
process
,
dll
->
base
,
GENERIC_READ
,
FILE_SHARE_READ
|
FILE_SHARE_WRITE
)))
{
event
->
data
.
load_dll
.
handle
=
alloc_handle
(
debugger
,
file
,
GENERIC_READ
,
0
);
release_object
(
file
);
}
return
1
;
}
...
...
server/file.h
View file @
c583953b
...
...
@@ -149,7 +149,7 @@ extern mode_t sd_to_mode( const struct security_descriptor *sd, const SID *owner
extern
struct
mapping
*
get_mapping_obj
(
struct
process
*
process
,
obj_handle_t
handle
,
unsigned
int
access
);
extern
obj_handle_t
open
_mapping_file
(
struct
process
*
process
,
client_ptr_t
base
,
extern
struct
file
*
get
_mapping_file
(
struct
process
*
process
,
client_ptr_t
base
,
unsigned
int
access
,
unsigned
int
sharing
);
extern
void
free_mapped_views
(
struct
process
*
process
);
extern
int
get_page_size
(
void
);
...
...
server/mapping.c
View file @
c583953b
...
...
@@ -733,19 +733,14 @@ struct mapping *get_mapping_obj( struct process *process, obj_handle_t handle, u
return
(
struct
mapping
*
)
get_handle_obj
(
process
,
handle
,
access
,
&
mapping_ops
);
}
/* open a new file
handle to the file
backing the mapping */
obj_handle_t
open
_mapping_file
(
struct
process
*
process
,
client_ptr_t
base
,
/* open a new file
for the file descriptor
backing the mapping */
struct
file
*
get
_mapping_file
(
struct
process
*
process
,
client_ptr_t
base
,
unsigned
int
access
,
unsigned
int
sharing
)
{
obj_handle_t
handle
;
struct
memory_view
*
view
=
find_mapped_view
(
process
,
base
);
struct
file
*
file
;
if
(
!
view
||
!
view
->
fd
)
return
0
;
if
(
!
(
file
=
create_file_for_fd_obj
(
view
->
fd
,
access
,
sharing
)))
return
0
;
handle
=
alloc_handle
(
process
,
file
,
access
,
0
);
release_object
(
file
);
return
handle
;
if
(
!
view
||
!
view
->
fd
)
return
NULL
;
return
create_file_for_fd_obj
(
view
->
fd
,
access
,
sharing
);
}
static
void
mapping_dump
(
struct
object
*
obj
,
int
verbose
)
...
...
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