Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
d2b91d56
Commit
d2b91d56
authored
Oct 06, 2022
by
Paul Gofman
Committed by
Alexandre Julliard
Nov 10, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wow64: Support MEM_ADDRESS_REQUIREMENTS in wow64_NtAllocateVirtualMemoryEx().
parent
77fcef99
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
41 additions
and
2 deletions
+41
-2
struct32.h
dlls/wow64/struct32.h
+7
-0
virtual.c
dlls/wow64/virtual.c
+34
-2
No files found.
dlls/wow64/struct32.h
View file @
d2b91d56
...
...
@@ -685,4 +685,11 @@ struct __server_request_info32
struct
__server_iovec32
data
[
__SERVER_MAX_DATA
];
};
typedef
struct
{
ULONG
LowestStartingAddress
;
ULONG
HighestEndingAddress
;
ULONG
Alignment
;
}
MEM_ADDRESS_REQUIREMENTS32
;
#endif
/* __WOW64_STRUCT32_H */
dlls/wow64/virtual.c
View file @
d2b91d56
...
...
@@ -91,10 +91,42 @@ NTSTATUS WINAPI wow64_NtAllocateVirtualMemoryEx( UINT *args )
void
*
addr
;
SIZE_T
size
;
NTSTATUS
status
;
SIZE_T
alloc_size
=
count
*
sizeof
(
*
params
);
MEM_EXTENDED_PARAMETER
*
params64
;
MEM_ADDRESS_REQUIREMENTS
*
buf
;
unsigned
int
i
;
if
(
count
&&
!
params
)
return
STATUS_INVALID_PARAMETER
;
for
(
i
=
0
;
i
<
count
;
++
i
)
{
if
(
params
[
i
].
Type
==
MemExtendedParameterAddressRequirements
)
alloc_size
+=
sizeof
(
MEM_ADDRESS_REQUIREMENTS
);
else
if
(
params
[
i
].
Type
&&
params
[
i
].
Type
<
MemExtendedParameterMax
)
FIXME
(
"Unsupported parameter type %d.
\n
"
,
params
[
i
].
Type
);
}
params64
=
Wow64AllocateTemp
(
alloc_size
);
memcpy
(
params64
,
params
,
count
*
sizeof
(
*
params64
)
);
buf
=
(
MEM_ADDRESS_REQUIREMENTS
*
)((
char
*
)
params64
+
count
*
sizeof
(
*
params64
));
for
(
i
=
0
;
i
<
count
;
++
i
)
{
if
(
params64
[
i
].
Type
==
MemExtendedParameterAddressRequirements
)
{
MEM_ADDRESS_REQUIREMENTS32
*
p
=
(
MEM_ADDRESS_REQUIREMENTS32
*
)
params
[
i
].
Pointer
;
if
(
p
->
HighestEndingAddress
>
highest_user_address
)
return
STATUS_INVALID_PARAMETER
;
buf
->
LowestStartingAddress
=
ULongToPtr
(
p
->
LowestStartingAddress
);
buf
->
HighestEndingAddress
=
ULongToPtr
(
p
->
HighestEndingAddress
);
buf
->
Alignment
=
p
->
Alignment
;
params64
[
i
].
Pointer
=
buf
;
++
buf
;
}
}
if
(
count
)
FIXME
(
"%ld extended parameters %p
\n
"
,
count
,
params
);
status
=
NtAllocateVirtualMemoryEx
(
process
,
addr_32to64
(
&
addr
,
addr32
),
size_32to64
(
&
size
,
size32
),
type
,
protect
,
params
,
count
);
type
,
protect
,
params
64
,
count
);
if
(
!
status
)
{
put_addr
(
addr32
,
addr
);
...
...
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