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
b925dd78
Commit
b925dd78
authored
Jun 01, 2020
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Use the actual zero_bits parameter in the server requests.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
3e9f8c87
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
38 additions
and
55 deletions
+38
-55
ntdll_misc.h
dlls/ntdll/ntdll_misc.h
+0
-2
server.c
dlls/ntdll/server.c
+14
-13
virtual.c
dlls/ntdll/virtual.c
+7
-22
server_protocol.h
include/wine/server_protocol.h
+5
-5
protocol.def
server/protocol.def
+3
-3
request.h
server/request.h
+4
-4
trace.c
server/trace.c
+4
-5
make_requests
tools/make_requests
+1
-1
No files found.
dlls/ntdll/ntdll_misc.h
View file @
b925dd78
...
...
@@ -177,8 +177,6 @@ extern NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, ANSI_S
UINT
disposition
)
DECLSPEC_HIDDEN
;
/* virtual memory */
extern
NTSTATUS
virtual_alloc
(
PVOID
*
ret
,
unsigned
short
zero_bits_64
,
SIZE_T
*
size_ptr
,
ULONG
type
,
ULONG
protect
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
virtual_map_section
(
HANDLE
handle
,
PVOID
*
addr_ptr
,
unsigned
short
zero_bits_64
,
SIZE_T
commit_size
,
const
LARGE_INTEGER
*
offset_ptr
,
SIZE_T
*
size_ptr
,
ULONG
alloc_type
,
ULONG
protect
,
pe_image_info_t
*
image_info
)
DECLSPEC_HIDDEN
;
...
...
dlls/ntdll/server.c
View file @
b925dd78
...
...
@@ -258,9 +258,8 @@ static void invoke_apc( const user_apc_t *apc )
*/
static
void
invoke_system_apc
(
const
apc_call_t
*
call
,
apc_result_t
*
result
)
{
SIZE_T
size
;
SIZE_T
size
,
bits
;
void
*
addr
;
pe_image_info_t
image_info
;
memset
(
result
,
0
,
sizeof
(
*
result
)
);
...
...
@@ -282,11 +281,13 @@ static void invoke_system_apc( const apc_call_t *call, apc_result_t *result )
result
->
type
=
call
->
type
;
addr
=
wine_server_get_ptr
(
call
->
virtual_alloc
.
addr
);
size
=
call
->
virtual_alloc
.
size
;
if
((
ULONG_PTR
)
addr
==
call
->
virtual_alloc
.
addr
&&
size
==
call
->
virtual_alloc
.
size
)
bits
=
call
->
virtual_alloc
.
zero_bits
;
if
((
ULONG_PTR
)
addr
==
call
->
virtual_alloc
.
addr
&&
size
==
call
->
virtual_alloc
.
size
&&
bits
==
call
->
virtual_alloc
.
zero_bits
)
{
result
->
virtual_alloc
.
status
=
virtual_alloc
(
&
addr
,
call
->
virtual_alloc
.
zero_bits_64
,
&
size
,
call
->
virtual_alloc
.
op_type
,
call
->
virtual_alloc
.
prot
);
result
->
virtual_alloc
.
status
=
NtAllocateVirtualMemory
(
NtCurrentProcess
(),
&
addr
,
bits
,
&
size
,
call
->
virtual_alloc
.
op_type
,
call
->
virtual_alloc
.
prot
);
result
->
virtual_alloc
.
addr
=
wine_server_client_ptr
(
addr
);
result
->
virtual_alloc
.
size
=
size
;
}
...
...
@@ -384,16 +385,16 @@ static void invoke_system_apc( const apc_call_t *call, apc_result_t *result )
result
->
type
=
call
->
type
;
addr
=
wine_server_get_ptr
(
call
->
map_view
.
addr
);
size
=
call
->
map_view
.
size
;
if
((
ULONG_PTR
)
addr
==
call
->
map_view
.
addr
&&
size
==
call
->
map_view
.
size
)
bits
=
call
->
map_view
.
zero_bits
;
if
((
ULONG_PTR
)
addr
==
call
->
map_view
.
addr
&&
size
==
call
->
map_view
.
size
&&
bits
==
call
->
map_view
.
zero_bits
)
{
LARGE_INTEGER
offset
;
offset
.
QuadPart
=
call
->
map_view
.
offset
;
result
->
map_view
.
status
=
virtual_map_section
(
wine_server_ptr_handle
(
call
->
map_view
.
handle
),
&
addr
,
call
->
map_view
.
zero_bits_64
,
0
,
&
offset
,
&
size
,
call
->
map_view
.
alloc_type
,
call
->
map_view
.
prot
,
&
image_info
);
result
->
map_view
.
status
=
NtMapViewOfSection
(
wine_server_ptr_handle
(
call
->
map_view
.
handle
),
NtCurrentProcess
(),
&
addr
,
bits
,
0
,
&
offset
,
&
size
,
0
,
call
->
map_view
.
alloc_type
,
call
->
map_view
.
prot
);
result
->
map_view
.
addr
=
wine_server_client_ptr
(
addr
);
result
->
map_view
.
size
=
size
;
}
...
...
dlls/ntdll/virtual.c
View file @
b925dd78
...
...
@@ -2959,6 +2959,11 @@ void virtual_set_large_address_space(void)
NTSTATUS
WINAPI
NtAllocateVirtualMemory
(
HANDLE
process
,
PVOID
*
ret
,
ULONG_PTR
zero_bits
,
SIZE_T
*
size_ptr
,
ULONG
type
,
ULONG
protect
)
{
void
*
base
;
unsigned
int
vprot
;
BOOL
is_dos_memory
=
FALSE
;
struct
file_view
*
view
;
sigset_t
sigset
;
SIZE_T
size
=
*
size_ptr
;
NTSTATUS
status
=
STATUS_SUCCESS
;
unsigned
short
zero_bits_64
=
zero_bits_win_to_64
(
zero_bits
);
...
...
@@ -2979,7 +2984,7 @@ NTSTATUS WINAPI NtAllocateVirtualMemory( HANDLE process, PVOID *ret, ULONG_PTR z
call
.
virtual_alloc
.
type
=
APC_VIRTUAL_ALLOC
;
call
.
virtual_alloc
.
addr
=
wine_server_client_ptr
(
*
ret
);
call
.
virtual_alloc
.
size
=
*
size_ptr
;
call
.
virtual_alloc
.
zero_bits
_64
=
zero_bits_64
;
call
.
virtual_alloc
.
zero_bits
=
zero_bits
;
call
.
virtual_alloc
.
op_type
=
type
;
call
.
virtual_alloc
.
prot
=
protect
;
status
=
server_queue_process_apc
(
process
,
&
call
,
&
result
);
...
...
@@ -2993,26 +2998,6 @@ NTSTATUS WINAPI NtAllocateVirtualMemory( HANDLE process, PVOID *ret, ULONG_PTR z
return
result
.
virtual_alloc
.
status
;
}
return
virtual_alloc
(
ret
,
zero_bits_64
,
size_ptr
,
type
,
protect
);
}
/***********************************************************************
* virtual_alloc (NTDLL.@)
*
* Same as NtAllocateVirtualMemory for the current process.
*/
NTSTATUS
virtual_alloc
(
PVOID
*
ret
,
unsigned
short
zero_bits_64
,
SIZE_T
*
size_ptr
,
ULONG
type
,
ULONG
protect
)
{
void
*
base
;
unsigned
int
vprot
;
SIZE_T
size
=
*
size_ptr
;
NTSTATUS
status
=
STATUS_SUCCESS
;
BOOL
is_dos_memory
=
FALSE
;
struct
file_view
*
view
;
sigset_t
sigset
;
/* Round parameters to a page boundary */
if
(
is_beyond_limit
(
0
,
size
,
working_set_limit
))
return
STATUS_WORKING_SET_LIMIT_RANGE
;
...
...
@@ -3709,7 +3694,7 @@ NTSTATUS WINAPI NtMapViewOfSection( HANDLE handle, HANDLE process, PVOID *addr_p
call
.
map_view
.
addr
=
wine_server_client_ptr
(
*
addr_ptr
);
call
.
map_view
.
size
=
*
size_ptr
;
call
.
map_view
.
offset
=
offset
.
QuadPart
;
call
.
map_view
.
zero_bits
_64
=
zero_bits_64
;
call
.
map_view
.
zero_bits
=
zero_bits
;
call
.
map_view
.
alloc_type
=
alloc_type
;
call
.
map_view
.
prot
=
protect
;
res
=
server_queue_process_apc
(
process
,
&
call
,
&
result
);
...
...
include/wine/server_protocol.h
View file @
b925dd78
...
...
@@ -493,7 +493,7 @@ typedef union
unsigned
int
op_type
;
client_ptr_t
addr
;
mem_size_t
size
;
unsigned
int
zero_bits_64
;
mem_size_t
zero_bits
;
unsigned
int
prot
;
}
virtual_alloc
;
struct
...
...
@@ -544,9 +544,9 @@ typedef union
client_ptr_t
addr
;
mem_size_t
size
;
file_pos_t
offset
;
mem_size_t
zero_bits
;
unsigned
int
alloc_type
;
unsigned
short
zero_bits_64
;
unsigned
short
prot
;
unsigned
int
prot
;
}
map_view
;
struct
{
...
...
@@ -1270,7 +1270,7 @@ struct select_reply
apc_call_t
call
;
obj_handle_t
apc_handle
;
/* VARARG(context,context); */
char
__pad_
52
[
4
];
char
__pad_
60
[
4
];
};
#define SELECT_ALERTABLE 1
#define SELECT_INTERRUPTIBLE 2
...
...
@@ -6683,7 +6683,7 @@ union generic_reply
/* ### protocol_version begin ### */
#define SERVER_PROTOCOL_VERSION 60
6
#define SERVER_PROTOCOL_VERSION 60
7
/* ### protocol_version end ### */
...
...
server/protocol.def
View file @
b925dd78
...
...
@@ -509,7 +509,7 @@ typedef union
unsigned int op_type; /* type of operation */
client_ptr_t addr; /* requested address */
mem_size_t size; /* allocation size */
unsigned int zero_bits_64;
/* number of zero high bits */
mem_size_t zero_bits;
/* number of zero high bits */
unsigned int prot; /* memory protection flags */
} virtual_alloc;
struct
...
...
@@ -560,9 +560,9 @@ typedef union
client_ptr_t addr; /* requested address */
mem_size_t size; /* allocation size */
file_pos_t offset; /* file offset */
mem_size_t zero_bits; /* number of zero high bits */
unsigned int alloc_type; /* allocation type */
unsigned short zero_bits_64; /* number of zero high bits */
unsigned short prot; /* memory protection flags */
unsigned int prot; /* memory protection flags */
} map_view;
struct
{
...
...
server/request.h
View file @
b925dd78
...
...
@@ -719,7 +719,7 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] =
C_ASSERT
(
sizeof
(
abstime_t
)
==
8
);
C_ASSERT
(
sizeof
(
affinity_t
)
==
8
);
C_ASSERT
(
sizeof
(
apc_call_t
)
==
4
0
);
C_ASSERT
(
sizeof
(
apc_call_t
)
==
4
8
);
C_ASSERT
(
sizeof
(
apc_param_t
)
==
8
);
C_ASSERT
(
sizeof
(
apc_result_t
)
==
40
);
C_ASSERT
(
sizeof
(
async_data_t
)
==
40
);
...
...
@@ -891,7 +891,7 @@ C_ASSERT( FIELD_OFFSET(struct unload_dll_request, base) == 16 );
C_ASSERT
(
sizeof
(
struct
unload_dll_request
)
==
24
);
C_ASSERT
(
FIELD_OFFSET
(
struct
queue_apc_request
,
handle
)
==
12
);
C_ASSERT
(
FIELD_OFFSET
(
struct
queue_apc_request
,
call
)
==
16
);
C_ASSERT
(
sizeof
(
struct
queue_apc_request
)
==
56
);
C_ASSERT
(
sizeof
(
struct
queue_apc_request
)
==
64
);
C_ASSERT
(
FIELD_OFFSET
(
struct
queue_apc_reply
,
handle
)
==
8
);
C_ASSERT
(
FIELD_OFFSET
(
struct
queue_apc_reply
,
self
)
==
12
);
C_ASSERT
(
sizeof
(
struct
queue_apc_reply
)
==
16
);
...
...
@@ -937,8 +937,8 @@ C_ASSERT( FIELD_OFFSET(struct select_request, size) == 32 );
C_ASSERT
(
FIELD_OFFSET
(
struct
select_request
,
prev_apc
)
==
36
);
C_ASSERT
(
sizeof
(
struct
select_request
)
==
40
);
C_ASSERT
(
FIELD_OFFSET
(
struct
select_reply
,
call
)
==
8
);
C_ASSERT
(
FIELD_OFFSET
(
struct
select_reply
,
apc_handle
)
==
48
);
C_ASSERT
(
sizeof
(
struct
select_reply
)
==
56
);
C_ASSERT
(
FIELD_OFFSET
(
struct
select_reply
,
apc_handle
)
==
56
);
C_ASSERT
(
sizeof
(
struct
select_reply
)
==
64
);
C_ASSERT
(
FIELD_OFFSET
(
struct
create_event_request
,
access
)
==
12
);
C_ASSERT
(
FIELD_OFFSET
(
struct
create_event_request
,
manual_reset
)
==
16
);
C_ASSERT
(
FIELD_OFFSET
(
struct
create_event_request
,
initial_state
)
==
20
);
...
...
server/trace.c
View file @
b925dd78
...
...
@@ -177,9 +177,8 @@ static void dump_apc_call( const char *prefix, const apc_call_t *call )
case
APC_VIRTUAL_ALLOC
:
dump_uint64
(
"APC_VIRTUAL_ALLOC,addr=="
,
&
call
->
virtual_alloc
.
addr
);
dump_uint64
(
",size="
,
&
call
->
virtual_alloc
.
size
);
fprintf
(
stderr
,
",zero_bits_64=%u,op_type=%x,prot=%x"
,
call
->
virtual_alloc
.
zero_bits_64
,
call
->
virtual_alloc
.
op_type
,
call
->
virtual_alloc
.
prot
);
dump_uint64
(
",zero_bits="
,
&
call
->
virtual_alloc
.
zero_bits
);
fprintf
(
stderr
,
",op_type=%x,prot=%x"
,
call
->
virtual_alloc
.
op_type
,
call
->
virtual_alloc
.
prot
);
break
;
case
APC_VIRTUAL_FREE
:
dump_uint64
(
"APC_VIRTUAL_FREE,addr="
,
&
call
->
virtual_free
.
addr
);
...
...
@@ -211,8 +210,8 @@ static void dump_apc_call( const char *prefix, const apc_call_t *call )
dump_uint64
(
",addr="
,
&
call
->
map_view
.
addr
);
dump_uint64
(
",size="
,
&
call
->
map_view
.
size
);
dump_uint64
(
",offset="
,
&
call
->
map_view
.
offset
);
fprintf
(
stderr
,
",zero_bits_64=%u,alloc_type=%x,prot=%x"
,
call
->
map_view
.
zero_bits_64
,
call
->
map_view
.
alloc_type
,
call
->
map_view
.
prot
);
dump_uint64
(
",zero_bits="
,
&
call
->
map_view
.
zero_bits
);
fprintf
(
stderr
,
",alloc_type=%x,prot=%x"
,
call
->
map_view
.
alloc_type
,
call
->
map_view
.
prot
);
break
;
case
APC_UNMAP_VIEW
:
dump_uint64
(
"APC_UNMAP_VIEW,addr="
,
&
call
->
unmap_view
.
addr
);
...
...
tools/make_requests
View file @
b925dd78
...
...
@@ -46,7 +46,7 @@ my %formats =
"abstime_t"
=>
[
8
,
8
,
"&dump_abstime"
],
"rectangle_t"
=>
[
16
,
4
,
"&dump_rectangle"
],
"char_info_t"
=>
[
4
,
2
,
"&dump_char_info"
],
"apc_call_t"
=>
[
4
0
,
8
,
"&dump_apc_call"
],
"apc_call_t"
=>
[
4
8
,
8
,
"&dump_apc_call"
],
"apc_result_t"
=>
[
40
,
8
,
"&dump_apc_result"
],
"async_data_t"
=>
[
40
,
8
,
"&dump_async_data"
],
"irp_params_t"
=>
[
32
,
8
,
"&dump_irp_params"
],
...
...
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