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
533ef8d2
Commit
533ef8d2
authored
Jan 24, 2020
by
Andrew Wesie
Committed by
Alexandre Julliard
Feb 07, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
psapi/tests: Test QueryWorkingSetEx.
Signed-off-by:
Andrew Wesie
<
awesie@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
f7a184e1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
109 additions
and
0 deletions
+109
-0
psapi_main.c
dlls/psapi/tests/psapi_main.c
+91
-0
psapi.h
include/psapi.h
+18
-0
No files found.
dlls/psapi/tests/psapi_main.c
View file @
533ef8d2
...
...
@@ -43,6 +43,7 @@ static NTSTATUS (WINAPI *pNtQueryVirtualMemory)(HANDLE, LPCVOID, ULONG, PVOID, S
static
BOOL
(
WINAPI
*
pIsWow64Process
)(
HANDLE
,
BOOL
*
);
static
BOOL
(
WINAPI
*
pWow64DisableWow64FsRedirection
)(
void
**
);
static
BOOL
(
WINAPI
*
pWow64RevertWow64FsRedirection
)(
void
*
);
static
BOOL
(
WINAPI
*
pQueryWorkingSetEx
)(
HANDLE
,
PVOID
,
DWORD
);
static
BOOL
wow64
;
...
...
@@ -53,6 +54,7 @@ static BOOL init_func_ptrs(void)
pIsWow64Process
=
(
void
*
)
GetProcAddress
(
GetModuleHandleA
(
"kernel32.dll"
),
"IsWow64Process"
);
pWow64DisableWow64FsRedirection
=
(
void
*
)
GetProcAddress
(
GetModuleHandleA
(
"kernel32.dll"
),
"Wow64DisableWow64FsRedirection"
);
pWow64RevertWow64FsRedirection
=
(
void
*
)
GetProcAddress
(
GetModuleHandleA
(
"kernel32.dll"
),
"Wow64RevertWow64FsRedirection"
);
pQueryWorkingSetEx
=
(
void
*
)
GetProcAddress
(
GetModuleHandleA
(
"psapi.dll"
),
"QueryWorkingSetEx"
);
return
TRUE
;
}
...
...
@@ -791,6 +793,94 @@ free_page:
VirtualFree
(
addr
,
0
,
MEM_RELEASE
);
}
static
void
check_QueryWorkingSetEx
(
PVOID
addr
,
const
char
*
desc
,
DWORD
expected_valid
,
DWORD
expected_protection
,
DWORD
expected_shared
,
BOOL
todo
,
BOOL
todo_shared
)
{
PSAPI_WORKING_SET_EX_INFORMATION
info
;
BOOL
ret
;
memset
(
&
info
,
0x41
,
sizeof
(
info
));
info
.
VirtualAddress
=
addr
;
ret
=
pQueryWorkingSetEx
(
GetCurrentProcess
(),
&
info
,
sizeof
(
info
));
ok
(
ret
,
"QueryWorkingSetEx failed with %d
\n
"
,
GetLastError
());
todo_wine_if
(
todo
)
ok
(
info
.
VirtualAttributes
.
Valid
==
expected_valid
,
"%s expected Valid=%u but got %u
\n
"
,
desc
,
expected_valid
,
info
.
VirtualAttributes
.
Valid
);
todo_wine_if
(
todo
)
ok
(
info
.
VirtualAttributes
.
Win32Protection
==
expected_protection
,
"%s expected Win32Protection=%u but got %u
\n
"
,
desc
,
expected_protection
,
info
.
VirtualAttributes
.
Win32Protection
);
ok
(
info
.
VirtualAttributes
.
Node
==
0
,
"%s expected Node=0 but got %u
\n
"
,
desc
,
info
.
VirtualAttributes
.
Node
);
ok
(
info
.
VirtualAttributes
.
LargePage
==
0
,
"%s expected LargePage=0 but got %u
\n
"
,
desc
,
info
.
VirtualAttributes
.
LargePage
);
todo_wine_if
(
todo_shared
)
ok
(
info
.
VirtualAttributes
.
Shared
==
expected_shared
||
broken
(
!
info
.
VirtualAttributes
.
Valid
)
/* w2003 */
,
"%s expected Shared=%u but got %u
\n
"
,
desc
,
expected_shared
,
info
.
VirtualAttributes
.
Shared
);
if
(
info
.
VirtualAttributes
.
Valid
&&
info
.
VirtualAttributes
.
Shared
)
ok
(
info
.
VirtualAttributes
.
ShareCount
>
0
,
"%s expected ShareCount > 0 but got %u
\n
"
,
desc
,
info
.
VirtualAttributes
.
ShareCount
);
else
ok
(
info
.
VirtualAttributes
.
ShareCount
==
0
,
"%s expected ShareCount == 0 but got %u
\n
"
,
desc
,
info
.
VirtualAttributes
.
ShareCount
);
}
static
void
test_QueryWorkingSetEx
(
void
)
{
PVOID
addr
;
DWORD
prot
;
BOOL
ret
;
if
(
pQueryWorkingSetEx
==
NULL
)
{
win_skip
(
"QueryWorkingSetEx not found, skipping tests
\n
"
);
return
;
}
addr
=
GetModuleHandleA
(
NULL
);
check_QueryWorkingSetEx
(
addr
,
"exe"
,
1
,
PAGE_READONLY
,
1
,
FALSE
,
TRUE
);
ret
=
VirtualProtect
(
addr
,
0x1000
,
PAGE_NOACCESS
,
&
prot
);
ok
(
ret
,
"VirtualProtect failed with %d
\n
"
,
GetLastError
());
check_QueryWorkingSetEx
(
addr
,
"exe,noaccess"
,
0
,
0
,
1
,
FALSE
,
TRUE
);
ret
=
VirtualProtect
(
addr
,
0x1000
,
prot
,
&
prot
);
ok
(
ret
,
"VirtualProtect failed with %d
\n
"
,
GetLastError
());
check_QueryWorkingSetEx
(
addr
,
"exe,readonly1"
,
0
,
0
,
1
,
TRUE
,
TRUE
);
*
(
volatile
char
*
)
addr
;
ok
(
ret
,
"VirtualProtect failed with %d
\n
"
,
GetLastError
());
check_QueryWorkingSetEx
(
addr
,
"exe,readonly2"
,
1
,
PAGE_READONLY
,
1
,
FALSE
,
TRUE
);
addr
=
VirtualAlloc
(
NULL
,
0x1000
,
MEM_COMMIT
|
MEM_RESERVE
,
PAGE_READWRITE
);
ok
(
addr
!=
NULL
,
"VirtualAlloc failed with %d
\n
"
,
GetLastError
());
check_QueryWorkingSetEx
(
addr
,
"valloc"
,
0
,
0
,
0
,
FALSE
,
FALSE
);
*
(
volatile
char
*
)
addr
;
check_QueryWorkingSetEx
(
addr
,
"valloc,read"
,
1
,
PAGE_READWRITE
,
0
,
FALSE
,
FALSE
);
*
(
volatile
char
*
)
addr
=
0x42
;
check_QueryWorkingSetEx
(
addr
,
"valloc,write"
,
1
,
PAGE_READWRITE
,
0
,
FALSE
,
FALSE
);
ret
=
VirtualProtect
(
addr
,
0x1000
,
PAGE_NOACCESS
,
&
prot
);
ok
(
ret
,
"VirtualProtect failed with %d
\n
"
,
GetLastError
());
check_QueryWorkingSetEx
(
addr
,
"valloc,noaccess"
,
0
,
0
,
0
,
FALSE
,
FALSE
);
ret
=
VirtualProtect
(
addr
,
0x1000
,
prot
,
&
prot
);
ok
(
ret
,
"VirtualProtect failed with %d
\n
"
,
GetLastError
());
check_QueryWorkingSetEx
(
addr
,
"valloc,readwrite1"
,
0
,
0
,
0
,
TRUE
,
FALSE
);
*
(
volatile
char
*
)
addr
;
check_QueryWorkingSetEx
(
addr
,
"valloc,readwrite2"
,
1
,
PAGE_READWRITE
,
0
,
FALSE
,
FALSE
);
ret
=
VirtualFree
(
addr
,
0
,
MEM_RELEASE
);
ok
(
ret
,
"VirtualFree failed with %d
\n
"
,
GetLastError
());
check_QueryWorkingSetEx
(
addr
,
"valloc,free"
,
FALSE
,
0
,
0
,
FALSE
,
FALSE
);
}
START_TEST
(
psapi_main
)
{
DWORD
pid
=
GetCurrentProcessId
();
...
...
@@ -818,6 +908,7 @@ START_TEST(psapi_main)
test_GetProcessImageFileName
();
test_GetModuleFileNameEx
();
test_GetModuleBaseName
();
test_QueryWorkingSetEx
();
test_ws_functions
();
CloseHandle
(
hpSR
);
...
...
include/psapi.h
View file @
533ef8d2
...
...
@@ -45,6 +45,24 @@ typedef struct _PROCESS_MEMORY_COUNTERS {
}
PROCESS_MEMORY_COUNTERS
;
typedef
PROCESS_MEMORY_COUNTERS
*
PPROCESS_MEMORY_COUNTERS
;
typedef
union
_PSAPI_WORKING_SET_EX_BLOCK
{
ULONG_PTR
Flags
;
struct
{
ULONG_PTR
Valid
:
1
;
ULONG_PTR
ShareCount
:
3
;
ULONG_PTR
Win32Protection
:
11
;
ULONG_PTR
Shared
:
1
;
ULONG_PTR
Node
:
6
;
ULONG_PTR
Locked
:
1
;
ULONG_PTR
LargePage
:
1
;
}
DUMMYSTRUCTNAME
;
}
PSAPI_WORKING_SET_EX_BLOCK
,
*
PPSAPI_WORKING_SET_EX_BLOCK
;
typedef
struct
_PSAPI_WORKING_SET_EX_INFORMATION
{
PVOID
VirtualAddress
;
PSAPI_WORKING_SET_EX_BLOCK
VirtualAttributes
;
}
PSAPI_WORKING_SET_EX_INFORMATION
,
*
PPSAPI_WORKING_SET_EX_INFORMATION
;
typedef
struct
_PSAPI_WS_WATCH_INFORMATION
{
LPVOID
FaultingPc
;
LPVOID
FaultingVa
;
...
...
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