Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
December 2019
- 73 participants
- 1394 messages
[PATCH 1/3] ole32/tests: Add equality tests for antimonikers.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/ole32/tests/moniker.c | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c
index 7b4bf5c0fa..7e77847837 100644
--- a/dlls/ole32/tests/moniker.c
+++ b/dlls/ole32/tests/moniker.c
@@ -2025,6 +2025,9 @@ todo_wine
IMoniker_Release(moniker2);
/* Load with composed number > 1. */
+ hr = CreateAntiMoniker(&moniker2);
+ ok(hr == S_OK, "Failed to create moniker, hr %#x.\n", hr);
+
hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
ok(hr == S_OK, "Failed to create a stream, hr %#x.\n", hr);
@@ -2034,6 +2037,14 @@ todo_wine
todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMoniker_IsEqual(moniker, moniker2);
+todo_wine
+ ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
+ hr = IMoniker_IsEqual(moniker2, moniker);
+todo_wine
+ ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
hr = IMoniker_Hash(moniker, &hash);
ok(hr == S_OK, "Failed to get hash value, hr %#x.\n", hr);
todo_wine
@@ -2076,6 +2087,14 @@ todo_wine
todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMoniker_IsEqual(moniker, moniker2);
+todo_wine
+ ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
+ hr = IMoniker_IsEqual(moniker2, moniker);
+todo_wine
+ ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
hr = IMoniker_Hash(moniker, &hash);
ok(hr == S_OK, "Failed to get hash value, hr %#x.\n", hr);
todo_wine
@@ -2087,10 +2106,27 @@ todo_wine
ok(!lstrcmpW(name, L""), "Unexpected display name %s.\n", wine_dbgstr_w(name));
CoTaskMemFree(name);
+ /* Back to initial value. */
+ stream_write_dword(stream, 1);
+
+ hr = IMoniker_Load(moniker, stream);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMoniker_IsEqual(moniker, moniker2);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMoniker_IsEqual(moniker2, moniker);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMoniker_IsEqual(moniker, NULL);
+todo_wine
+ ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+
IStream_Release(stream);
IBindCtx_Release(bindctx);
IMoniker_Release(moniker);
+ IMoniker_Release(moniker2);
}
static void test_generic_composite_moniker(void)
--
2.24.0
Dec. 18, 2019
Re: [PATCH 0/3] RFC: Implement MemoryWorkingSetExInformation.
by Paul Gofman
On 12/18/19 05:07, Ken Thomases wrote:
> On Dec 17, 2019, at 6:34 PM, Andrew Wesie <awesie(a)gmail.com> wrote:
>> A stub for bug 45667 has been sitting in staging for a while. It is sufficient
>> for League of Legends, but it is not correct by any definition.
>>
>> The challenge with MemoryWorkingSetExInformation is that it requires
>> information that is not exposed by the Linux kernel.
> Are the semantics of the fields of MEMORY_WORKING_SET_EX_BLOCK documented or explained somewhere? It's hard to comment intelligently without that.
>
> -Ken
>
>
> .
There is some basic description of the fields here in MS docs:
https://docs.microsoft.com/en-us/windows/win32/api/psapi/ns-psapi-psapi_wor…
It is referenced from QueryWorkingSetEx description:
https://docs.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-querywork…
The patchset is also related for
https://bugs.winehq.org/show_bug.cgi?id=48268, but the thing in that bug
is not going to work anyway, working set info is just a minor issue for
that rootkit (the bigger include, but not limited to, minifilter FS
driver and exhaustive execution environment check / intervention; the
thing is not going to work even under VMs or in any sane native Windows
installation which does not disable every possible malware protection).
Dec. 18, 2019
[PATCH] dmime: IDirectMusicPerformance8_FreePMsg Release the unknown pointer.
by Alistair Leslie-Hughes
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/dmime/performance.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/dmime/performance.c b/dlls/dmime/performance.c
index 9dbb469f388..a63bd3b4517 100644
--- a/dlls/dmime/performance.c
+++ b/dlls/dmime/performance.c
@@ -479,7 +479,9 @@ static HRESULT WINAPI IDirectMusicPerformance8Impl_FreePMsg(IDirectMusicPerforma
DMUS_ItemRemoveFromQueue( This, pItem );
LeaveCriticalSection(&This->safe);
- /** TODO: see if we should Release the pItem->pMsg->punkUser and others Interfaces */
+ if (pPMSG->punkUser)
+ IUnknown_Release(pPMSG->punkUser);
+
HeapFree(GetProcessHeap(), 0, pItem);
return S_OK;
}
--
2.24.0
Dec. 18, 2019
[PATCH] dmime: IDirectMusicAudioPath Release primary buffer.
by Alistair Leslie-Hughes
In IDirectMusicAudioPath CreateStandardAudioPath we create a
AudioPath object and assign it a primary buffer object which
needs to be released.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=36272
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/dmime/audiopath.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/dlls/dmime/audiopath.c b/dlls/dmime/audiopath.c
index ac3121c0e0a..1aadba92aea 100644
--- a/dlls/dmime/audiopath.c
+++ b/dlls/dmime/audiopath.c
@@ -108,6 +108,8 @@ static ULONG WINAPI IDirectMusicAudioPathImpl_Release (IDirectMusicAudioPath *if
TRACE("(%p): ReleaseRef to %d\n", This, ref);
if (ref == 0) {
+ if (This->pPrimary)
+ IDirectSoundBuffer_Release(This->pPrimary);
if (This->pDSBuffer)
IDirectSoundBuffer_Release(This->pDSBuffer);
This->pPerf = NULL;
--
2.24.0
Dec. 18, 2019
Re: [PATCH 0/3] RFC: Implement MemoryWorkingSetExInformation.
by Andrew Wesie
On Tue, Dec 17, 2019 at 8:31 PM Andrew Wesie <awesie(a)gmail.com> wrote:
>
> On Tue, Dec 17, 2019 at 8:07 PM Ken Thomases <ken(a)codeweavers.com> wrote:
> >
> > Are the semantics of the fields of MEMORY_WORKING_SET_EX_BLOCK documented or explained somewhere? It's hard to comment intelligently without that.
> >
>
> Not really. My knowledge is limited to what my test has shown:
> - Demand-zero page is "Invalid"
> - Once you read from a demand-zero page (or write to it), it is now "Valid"
> - If you change a page protection to NOACCESS or GUARD, it is "Invalid"
> - If you change a page protection from NOACCESS or GUARD to
> READ_ONLY, READWRITE, ... without GUARD, it is still "Invalid"
> - If you then read from that page (or write to it), it is now "Valid"
>
One additional hint that I just found in VirtualQuery documentation
is: "To detect whether copy-on-write has occurred for a specific page,
either access the page or lock it using the VirtualLock function to
make sure the page is resident in memory, then use the
QueryWorkingSetEx function ...".
This seems to imply that when pages are mapped into a process, they
are not resident (e.g. "Valid") until they are accessed or locked.
Additionally, from my previous email, pages become non-resident when
their protection changes to PAGE_NOACCESS or PAGE_GUARD. The page will
then only become resident once it is accessed (read or write) again.
The Linux kernel supports the concept of a "soft dirty" bit in the PTE
that is accessible to user space with pagemaps. This is almost what we
need, except it only handles writes and we need it to mark pages on
read as well.
-Andrew
Dec. 18, 2019
Re: [PATCH 0/3] RFC: Implement MemoryWorkingSetExInformation.
by Andrew Wesie
On Tue, Dec 17, 2019 at 8:07 PM Ken Thomases <ken(a)codeweavers.com> wrote:
>
> Are the semantics of the fields of MEMORY_WORKING_SET_EX_BLOCK documented or explained somewhere? It's hard to comment intelligently without that.
>
Not really. My knowledge is limited to what my test has shown:
- Demand-zero page is "Invalid"
- Once you read from a demand-zero page (or write to it), it is now "Valid"
- If you change a page protection to NOACCESS or GUARD, it is "Invalid"
- If you change a page protection from NOACCESS or GUARD to
READ_ONLY, READWRITE, ... without GUARD, it is still "Invalid"
- If you then read from that page (or write to it), it is now "Valid"
Those are the semantics that I am having a difficult time replicating
on Linux without causing additional faults. /proc/pid/pagemap lets us
handle the demand-zero page, which is most the common case.
-Andrew
Dec. 18, 2019
Re: [PATCH 0/3] RFC: Implement MemoryWorkingSetExInformation.
by Ken Thomases
On Dec 17, 2019, at 6:34 PM, Andrew Wesie <awesie(a)gmail.com> wrote:
>
> A stub for bug 45667 has been sitting in staging for a while. It is sufficient
> for League of Legends, but it is not correct by any definition.
>
> The challenge with MemoryWorkingSetExInformation is that it requires
> information that is not exposed by the Linux kernel.
Are the semantics of the fields of MEMORY_WORKING_SET_EX_BLOCK documented or explained somewhere? It's hard to comment intelligently without that.
-Ken
Dec. 18, 2019
Re: [PATCH 3/3] psapi/tests: Test QueryWorkingSetEx.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=62289
Your paranoid android.
=== wxppro (32 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w2003std (32 bit report) ===
psapi:
psapi_main.c:816: Test failed: exe,noaccess expected Shared=1 but got 0
psapi_main.c:816: Test failed: exe,readonly1 expected Shared=1 but got 0
=== wvistau64 (32 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w8 (32 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w1064v1809_2scr (32 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w1064v1809_ar (32 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w1064v1809_he (32 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w1064v1809_ja (32 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w1064v1809_zh_CN (32 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== wvistau64 (64 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w2008s64 (64 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w864 (64 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w1064v1507 (64 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== w1064v1809 (64 bit report) ===
psapi:
psapi_main.c:686: Test failed: got error 127
=== debian10 (32 bit report) ===
kernel32:
comm.c:918: Test failed: OutQueue should not be empty
debugger.c:320: Test failed: GetThreadContext failed: 5
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:3929: Test succeeded inside todo block: VirtualProtect error -559038737, map 0x2, view 0x2, requested prot 0x8
virtual.c:3931: Test succeeded inside todo block: got 0x2, expected 0x2
virtual.c:3937: Test succeeded inside todo block: VirtualProtect wrong prot, map 0x2, view 0x2, requested prot 0x8 got 0x8
virtual.c:3992: Test succeeded inside todo block: VirtualProtect error 5, map 0x2, view 0x2
Unhandled exception: page fault on write access to 0x00340000 in 32-bit code (0x00526b5b).
Report errors:
kernel32:virtual crashed (c0000005)
=== debian10 (32 bit Chinese:China report) ===
kernel32:
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:3929: Test succeeded inside todo block: VirtualProtect error -559038737, map 0x2, view 0x2, requested prot 0x8
virtual.c:3931: Test succeeded inside todo block: got 0x2, expected 0x2
virtual.c:3937: Test succeeded inside todo block: VirtualProtect wrong prot, map 0x2, view 0x2, requested prot 0x8 got 0x8
virtual.c:3992: Test succeeded inside todo block: VirtualProtect error 5, map 0x2, view 0x2
Unhandled exception: page fault on write access to 0x00340000 in 32-bit code (0x00526b5b).
Report errors:
kernel32:virtual crashed (c0000005)
=== debian10 (32 bit WoW report) ===
kernel32:
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:3929: Test succeeded inside todo block: VirtualProtect error -559038737, map 0x2, view 0x2, requested prot 0x8
virtual.c:3931: Test succeeded inside todo block: got 0x2, expected 0x2
virtual.c:3937: Test succeeded inside todo block: VirtualProtect wrong prot, map 0x2, view 0x2, requested prot 0x8 got 0x8
virtual.c:3992: Test succeeded inside todo block: VirtualProtect error 5, map 0x2, view 0x2
Unhandled exception: page fault on write access to 0x00340000 in 32-bit code (0x00526b5b).
ntdll:
pipe.c:1557: Test failed: pipe is not signaled
pipe.c:1557: Test failed: pipe is not signaled
Report errors:
kernel32:virtual crashed (c0000005)
=== debian10 (64 bit WoW report) ===
kernel32:
debugger.c:320: Test failed: GetThreadContext failed: 5
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:3929: Test succeeded inside todo block: VirtualProtect error -559038737, map 0x2, view 0x2, requested prot 0x8
virtual.c:3931: Test succeeded inside todo block: got 0x2, expected 0x2
virtual.c:3937: Test succeeded inside todo block: VirtualProtect wrong prot, map 0x2, view 0x2, requested prot 0x8 got 0x8
virtual.c:3992: Test succeeded inside todo block: VirtualProtect error 5, map 0x2, view 0x2
Unhandled exception: page fault on write access to 0x00340000 in 32-bit code (0x00526b5b).
Report errors:
kernel32:virtual crashed (c0000005)
Dec. 18, 2019
Re: [PATCH 2/3] kernel32: QueryWorkingSetEx should use MemoryWorkingSetExInformation.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=62288
Your paranoid android.
=== debian10 (32 bit report) ===
kernel32:
comm.c:918: Test failed: OutQueue should not be empty
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:3929: Test succeeded inside todo block: VirtualProtect error -559038737, map 0x2, view 0x2, requested prot 0x8
virtual.c:3931: Test succeeded inside todo block: got 0x2, expected 0x2
virtual.c:3937: Test succeeded inside todo block: VirtualProtect wrong prot, map 0x2, view 0x2, requested prot 0x8 got 0x8
virtual.c:3992: Test succeeded inside todo block: VirtualProtect error 5, map 0x2, view 0x2
Unhandled exception: page fault on write access to 0x00340000 in 32-bit code (0x00526b5b).
Report errors:
kernel32:virtual crashed (c0000005)
=== debian10 (32 bit Chinese:China report) ===
kernel32:
debugger: Timeout
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:3929: Test succeeded inside todo block: VirtualProtect error -559038737, map 0x2, view 0x2, requested prot 0x8
virtual.c:3931: Test succeeded inside todo block: got 0x2, expected 0x2
virtual.c:3937: Test succeeded inside todo block: VirtualProtect wrong prot, map 0x2, view 0x2, requested prot 0x8 got 0x8
virtual.c:3992: Test succeeded inside todo block: VirtualProtect error 5, map 0x2, view 0x2
Unhandled exception: page fault on write access to 0x00340000 in 32-bit code (0x00526b5b).
Report errors:
kernel32:virtual crashed (c0000005)
=== debian10 (32 bit WoW report) ===
kernel32:
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:3929: Test succeeded inside todo block: VirtualProtect error -559038737, map 0x2, view 0x2, requested prot 0x8
virtual.c:3931: Test succeeded inside todo block: got 0x2, expected 0x2
virtual.c:3937: Test succeeded inside todo block: VirtualProtect wrong prot, map 0x2, view 0x2, requested prot 0x8 got 0x8
virtual.c:3992: Test succeeded inside todo block: VirtualProtect error 5, map 0x2, view 0x2
Unhandled exception: page fault on write access to 0x00340000 in 32-bit code (0x00526b5b).
Report errors:
kernel32:virtual crashed (c0000005)
=== debian10 (64 bit WoW report) ===
kernel32:
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x4, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x8, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x20, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x4 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x40, view 0x40 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x8 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x2 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x80 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x80, view 0x20 got 0x8
virtual.c:4000: Test succeeded inside todo block: wrong region size 0x1000 after write, map 0x2, view 0x8 got 0x8
virtual.c:3929: Test succeeded inside todo block: VirtualProtect error -559038737, map 0x2, view 0x2, requested prot 0x8
virtual.c:3931: Test succeeded inside todo block: got 0x2, expected 0x2
virtual.c:3937: Test succeeded inside todo block: VirtualProtect wrong prot, map 0x2, view 0x2, requested prot 0x8 got 0x8
virtual.c:3992: Test succeeded inside todo block: VirtualProtect error 5, map 0x2, view 0x2
Unhandled exception: page fault on write access to 0x00340000 in 32-bit code (0x00526b5b).
Report errors:
kernel32:virtual crashed (c0000005)
Dec. 18, 2019
[PATCH 3/3] psapi/tests: Test QueryWorkingSetEx.
by Andrew Wesie
Signed-off-by: Andrew Wesie <awesie(a)gmail.com>
---
dlls/psapi/tests/psapi_main.c | 84 +++++++++++++++++++++++++++++++++++
include/psapi.h | 18 ++++++++
2 files changed, 102 insertions(+)
diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c
index 9799d2ffae..fada1043c7 100644
--- a/dlls/psapi/tests/psapi_main.c
+++ b/dlls/psapi/tests/psapi_main.c
@@ -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,87 @@ free_page:
VirtualFree(addr, 0, MEM_RELEASE);
}
+static void check_QueryWorkingSetEx(PVOID addr, const char *desc, DWORD expected_valid,
+ BOOL expected_share_count, DWORD expected_protection, DWORD expected_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());
+ ok(info.VirtualAttributes.Valid == expected_valid, "%s expected Valid=%u but got %u\n",
+ desc, expected_valid, info.VirtualAttributes.Valid);
+ if (expected_share_count)
+ 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);
+ ok(info.VirtualAttributes.Win32Protection == expected_protection, "%s expected Win32Protection=%u but got %u\n",
+ desc, expected_protection, info.VirtualAttributes.Win32Protection);
+ ok(info.VirtualAttributes.Shared == expected_shared, "%s expected Shared=%u but got %u\n",
+ desc, expected_shared, info.VirtualAttributes.Shared);
+ 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);
+}
+
+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, TRUE, PAGE_READONLY, 1);
+
+ ret = VirtualProtect(addr, 0x1000, PAGE_NOACCESS, &prot);
+ ok(ret, "VirtualProtect failed with %d\n", GetLastError());
+ check_QueryWorkingSetEx(addr, "exe,noaccess", 0, FALSE, 0, 1);
+
+ ret = VirtualProtect(addr, 0x1000, prot, &prot);
+ ok(ret, "VirtualProtect failed with %d\n", GetLastError());
+ check_QueryWorkingSetEx(addr, "exe,readonly1", 0, FALSE, 0, 1);
+
+ *(volatile char *)addr;
+ ok(ret, "VirtualProtect failed with %d\n", GetLastError());
+ check_QueryWorkingSetEx(addr, "exe,readonly2", 1, TRUE, PAGE_READONLY, 1);
+
+ addr = VirtualAlloc(NULL, 0x1000, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
+ ok(addr != NULL, "VirtualAlloc failed with %d\n", GetLastError());
+ check_QueryWorkingSetEx(addr, "valloc", 0, FALSE, 0, 0);
+
+ *(volatile char *)addr;
+ check_QueryWorkingSetEx(addr, "valloc,read", 1, FALSE, PAGE_READWRITE, 0);
+
+ *(volatile char *)addr = 0x42;
+ check_QueryWorkingSetEx(addr, "valloc,write", 1, FALSE, PAGE_READWRITE, 0);
+
+ ret = VirtualProtect(addr, 0x1000, PAGE_NOACCESS, &prot);
+ ok(ret, "VirtualProtect failed with %d\n", GetLastError());
+ check_QueryWorkingSetEx(addr, "valloc,noaccess", 0, FALSE, 0, 0);
+
+ ret = VirtualProtect(addr, 0x1000, prot, &prot);
+ ok(ret, "VirtualProtect failed with %d\n", GetLastError());
+ check_QueryWorkingSetEx(addr, "valloc,readwrite1", 0, FALSE, 0, 0);
+
+ *(volatile char *)addr;
+ check_QueryWorkingSetEx(addr, "valloc,readwrite2", 1, FALSE, PAGE_READWRITE, 0);
+
+ ret = VirtualFree(addr, 0, MEM_RELEASE);
+ ok(ret, "VirtualFree failed with %d\n", GetLastError());
+ check_QueryWorkingSetEx(addr, "valloc,free", 0, FALSE, 0, 0);
+}
+
START_TEST(psapi_main)
{
DWORD pid = GetCurrentProcessId();
@@ -818,6 +901,7 @@ START_TEST(psapi_main)
test_GetProcessImageFileName();
test_GetModuleFileNameEx();
test_GetModuleBaseName();
+ test_QueryWorkingSetEx();
test_ws_functions();
CloseHandle(hpSR);
diff --git a/include/psapi.h b/include/psapi.h
index 742bf7b574..66e660b243 100644
--- a/include/psapi.h
+++ b/include/psapi.h
@@ -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;
--
2.17.1
Dec. 18, 2019
[PATCH 2/3] kernel32: QueryWorkingSetEx should use MemoryWorkingSetExInformation.
by Andrew Wesie
Signed-off-by: Andrew Wesie <awesie(a)gmail.com>
---
dlls/kernel32/process.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 7875f3469a..5146622230 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -722,7 +722,7 @@ BOOL WINAPI K32QueryWorkingSetEx( HANDLE process, LPVOID buffer, DWORD size )
{
TRACE( "(%p, %p, %d)\n", process, buffer, size );
- return set_ntstatus( NtQueryVirtualMemory( process, NULL, MemoryWorkingSetList, buffer, size, NULL ));
+ return set_ntstatus( NtQueryVirtualMemory( process, NULL, MemoryWorkingSetExInformation, buffer, size, NULL ));
}
/***********************************************************************
--
2.17.1
Dec. 18, 2019
[PATCH 1/3] ntdll: Implement NtQueryVirtualMemory(MemoryWorkingSetExInformation).
by Andrew Wesie
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45667
Signed-off-by: Andrew Wesie <awesie(a)gmail.com>
---
dlls/ntdll/virtual.c | 78 +++++++++++++++++++++++++++++++++++++++++---
include/winternl.h | 21 +++++++++++-
2 files changed, 93 insertions(+), 6 deletions(-)
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index cb869feff0..fecc2d601d 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -84,6 +84,7 @@ struct file_view
#define VPROT_GUARD 0x10
#define VPROT_COMMITTED 0x20
#define VPROT_WRITEWATCH 0x40
+#define VPROT_DEFERRED 0x80
/* per-mapping protection flags */
#define VPROT_SYSTEM 0x0200 /* system view (underlying mmap not under our control) */
@@ -319,7 +320,7 @@ static const char *VIRTUAL_GetProtStr( BYTE prot )
static int VIRTUAL_GetUnixProt( BYTE vprot )
{
int prot = 0;
- if ((vprot & VPROT_COMMITTED) && !(vprot & VPROT_GUARD))
+ if ((vprot & VPROT_COMMITTED) && !(vprot & (VPROT_GUARD | VPROT_DEFERRED)))
{
if (vprot & VPROT_READ) prot |= PROT_READ;
if (vprot & VPROT_WRITE) prot |= PROT_WRITE | PROT_READ;
@@ -952,7 +953,7 @@ static BOOL VIRTUAL_SetProt( struct file_view *view, /* [in] Pointer to view */
*
* Set page protections on a range of pages
*/
-static NTSTATUS set_protection( struct file_view *view, void *base, SIZE_T size, ULONG protect )
+static NTSTATUS set_protection( struct file_view *view, void *base, SIZE_T size, ULONG protect, BOOL apply )
{
unsigned int vprot;
NTSTATUS status;
@@ -968,6 +969,8 @@ static NTSTATUS set_protection( struct file_view *view, void *base, SIZE_T size,
if ((view->protect & access) != access) return STATUS_INVALID_PAGE_PROTECTION;
}
+ if (!apply)
+ vprot |= VPROT_DEFERRED;
if (!VIRTUAL_SetProt( view, base, size, vprot | VPROT_COMMITTED )) return STATUS_ACCESS_DENIED;
return STATUS_SUCCESS;
}
@@ -2109,10 +2112,16 @@ NTSTATUS virtual_handle_fault( LPCVOID addr, DWORD err, BOOL on_signal_stack )
vprot = get_page_vprot( page );
if (!on_signal_stack && (vprot & VPROT_GUARD))
{
- set_page_vprot_bits( page, page_size, 0, VPROT_GUARD );
+ set_page_vprot_bits( page, page_size, 0, VPROT_GUARD | VPROT_DEFERRED );
mprotect_range( page, page_size, 0, 0 );
ret = STATUS_GUARD_PAGE_VIOLATION;
}
+ else if (vprot & VPROT_DEFERRED)
+ {
+ set_page_vprot_bits( page, page_size, 0, VPROT_DEFERRED );
+ mprotect_range( page, page_size, 0, 0 );
+ ret = STATUS_SUCCESS;
+ }
else if (err & EXCEPTION_WRITE_FAULT)
{
if (vprot & VPROT_WRITEWATCH)
@@ -2684,7 +2693,7 @@ NTSTATUS virtual_alloc_aligned( PVOID *ret, unsigned short zero_bits_64, SIZE_T
{
if (!(view = VIRTUAL_FindView( base, size ))) status = STATUS_NOT_MAPPED_VIEW;
else if (view->protect & SEC_FILE) status = STATUS_ALREADY_COMMITTED;
- else if (!(status = set_protection( view, base, size, protect )) && (view->protect & SEC_RESERVE))
+ else if (!(status = set_protection( view, base, size, protect, TRUE )) && (view->protect & SEC_RESERVE))
{
SERVER_START_REQ( add_mapping_committed_range )
{
@@ -2850,7 +2859,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH NtProtectVirtualMemory( HANDLE process, PVOID
if (get_committed_size( view, base, &vprot ) >= size && (vprot & VPROT_COMMITTED))
{
old = VIRTUAL_GetWin32Prot( vprot, view->protect );
- status = set_protection( view, base, size, new_prot );
+ status = set_protection( view, base, size, new_prot, VIRTUAL_GetUnixProt(vprot) != PROT_NONE );
}
else status = STATUS_NOT_COMMITTED;
}
@@ -2906,6 +2915,62 @@ static int get_free_mem_state_callback( void *start, size_t size, void *arg )
return 1;
}
+static NTSTATUS get_working_set_ex( HANDLE process, LPCVOID addr,
+ MEMORY_WORKING_SET_EX_INFORMATION *info,
+ SIZE_T len, SIZE_T *res_len )
+{
+ MEMORY_WORKING_SET_EX_INFORMATION *p;
+ char pagemap_path[128];
+ FILE *f;
+ sigset_t sigset;
+
+ if (process != NtCurrentProcess())
+ {
+ FIXME("(process=%p,addr=%p) Unimplemented information class: MemoryWorkingSetExInformation\n", process, addr);
+ return STATUS_INVALID_INFO_CLASS;
+ }
+
+ snprintf(pagemap_path, sizeof(pagemap_path), "/proc/%u/pagemap", getpid());
+ f = fopen(pagemap_path, "rb");
+
+ server_enter_uninterrupted_section( &csVirtual, &sigset );
+ for (p = info; (UINT_PTR)(p + 1) <= (UINT_PTR)info + len; p++)
+ {
+ BYTE vprot;
+ UINT64 pagemap;
+ struct file_view *view;
+
+ memset(&p->VirtualAttributes, 0, sizeof(p->VirtualAttributes));
+ /* If we don't have pagemap information, default to invalid. */
+ if (f == NULL ||
+ fseek(f, ((UINT_PTR)p->VirtualAddress >> 12) * sizeof(pagemap), SEEK_SET) == -1 ||
+ fread(&pagemap, sizeof(pagemap), 1, f) != 1)
+ {
+ continue;
+ }
+
+ if ((view = VIRTUAL_FindView( p->VirtualAddress, 0 )) &&
+ get_committed_size( view, p->VirtualAddress, &vprot ) &&
+ (vprot & VPROT_COMMITTED))
+ {
+ p->VirtualAttributes.Valid = !(vprot & (VPROT_GUARD | VPROT_DEFERRED)) && (vprot & 0x0f) && (pagemap >> 62);
+ p->VirtualAttributes.Shared = (view->protect & (VPROT_SYSTEM | SEC_IMAGE | SEC_FILE | SEC_RESERVE | SEC_COMMIT)) != 0;
+ if (p->VirtualAttributes.Shared && p->VirtualAttributes.Valid)
+ p->VirtualAttributes.ShareCount = 1; /* FIXME */
+ if (p->VirtualAttributes.Valid)
+ p->VirtualAttributes.Win32Protection = VIRTUAL_GetWin32Prot( vprot, view->protect );
+ }
+ }
+ server_leave_uninterrupted_section( &csVirtual, &sigset );
+
+ if (f)
+ fclose(f);
+ if (res_len)
+ *res_len = (UINT_PTR)p - (UINT_PTR)info;
+ return STATUS_SUCCESS;
+}
+
+
#define UNIMPLEMENTED_INFO_CLASS(c) \
case c: \
FIXME("(process=%p,addr=%p) Unimplemented information class: " #c "\n", process, addr); \
@@ -2933,6 +2998,9 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
UNIMPLEMENTED_INFO_CLASS(MemorySectionName);
UNIMPLEMENTED_INFO_CLASS(MemoryBasicVlmInformation);
+ case MemoryWorkingSetExInformation:
+ return get_working_set_ex( process, addr, buffer, len, res_len );
+
default:
FIXME("(%p,%p,info_class=%d,%p,%ld,%p) Unknown information class\n",
process, addr, info_class, buffer, len, res_len);
diff --git a/include/winternl.h b/include/winternl.h
index 0122684483..eef42be5b3 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -1049,7 +1049,8 @@ typedef enum _MEMORY_INFORMATION_CLASS {
MemoryBasicInformation,
MemoryWorkingSetList,
MemorySectionName,
- MemoryBasicVlmInformation
+ MemoryBasicVlmInformation,
+ MemoryWorkingSetExInformation
} MEMORY_INFORMATION_CLASS;
typedef struct _MEMORY_SECTION_NAME
@@ -1057,6 +1058,24 @@ typedef struct _MEMORY_SECTION_NAME
UNICODE_STRING SectionFileName;
} MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
+typedef union _MEMORY_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;
+} MEMORY_WORKING_SET_EX_BLOCK, *PMEMORY_WORKING_SET_EX_BLOCK;
+
+typedef struct _MEMORY_WORKING_SET_EX_INFORMATION {
+ PVOID VirtualAddress;
+ MEMORY_WORKING_SET_EX_BLOCK VirtualAttributes;
+} MEMORY_WORKING_SET_EX_INFORMATION, *PMEMORY_WORKING_SET_EX_INFORMATION;
+
typedef enum _MUTANT_INFORMATION_CLASS
{
MutantBasicInformation
--
2.17.1
Dec. 18, 2019
[PATCH 0/3] RFC: Implement MemoryWorkingSetExInformation.
by Andrew Wesie
A stub for bug 45667 has been sitting in staging for a while. It is sufficient
for League of Legends, but it is not correct by any definition.
The challenge with MemoryWorkingSetExInformation is that it requires
information that is not exposed by the Linux kernel. One option was to allocate
valloc memory with PROT_NONE, then handle the faults in virtual_handle_fault
and keep our own statistics. This implies a SIGSEGV signal for *every*
VirtualAlloc page, which sounded slow.
This patchset implements an optimized version of this by using
/proc/pid/pagemap to handle demand-zero pages, which would have been the most
common complicated case. The remaining complicated cases (e.g. VirtualProtect
from PAGE_NOACCESS to PAGE_READONLY, ...) are handled by deferring changing
the page protection until virtual_handle_fault.
It is possible that this patchset will introduce a performance regression if
an application heavily uses PAGE_NOACCESS or PAGE_GUARD protections. Also,
this patch reverts to the staging stub's behavior if pagemaps is not available.
If someone has an alternative approach, or there is appetite using the staging
stub in upstream Wine, that would be very welcome feedback.
Andrew Wesie (3):
ntdll: Implement NtQueryVirtualMemory(MemoryWorkingSetExInformation).
kernel32: QueryWorkingSetEx should use MemoryWorkingSetExInformation.
psapi/tests: Test QueryWorkingSetEx.
dlls/kernel32/process.c | 2 +-
dlls/ntdll/virtual.c | 78 +++++++++++++++++++++++++++++---
dlls/psapi/tests/psapi_main.c | 84 +++++++++++++++++++++++++++++++++++
include/psapi.h | 18 ++++++++
include/winternl.h | 21 ++++++++-
5 files changed, 196 insertions(+), 7 deletions(-)
--
2.17.1
Dec. 18, 2019
Re: [PATCH] tests: Trace elapsed time when $WINETEST_TIME is set.
by Alexandre Julliard
Francois Gouget <fgouget(a)codeweavers.com> writes:
> @@ -695,6 +721,18 @@ int main( int argc, char **argv )
> if (GetEnvironmentVariableA( "WINETEST_DEBUG", p, sizeof(p) )) winetest_debug = atoi(p);
> if (GetEnvironmentVariableA( "WINETEST_INTERACTIVE", p, sizeof(p) )) winetest_interactive = atoi(p);
> if (GetEnvironmentVariableA( "WINETEST_REPORT_SUCCESS", p, sizeof(p) )) winetest_report_success = atoi(p);
> + if (GetEnvironmentVariableA( "WINETEST_TIME", p, sizeof(p) )) winetest_time = atoi(p);
> + if (GetEnvironmentVariableA( "WINETEST_START_TIME", p, sizeof(p) ))
> + winetest_start_time = atoi(p);
> + else
> + {
> + char time_str[11];
> + winetest_start_time = GetTickCount();
> + /* Export the test start time for child processes */
> + sprintf( time_str, "%u", winetest_start_time );
> + SetEnvironmentVariableA( "WINETEST_START_TIME", time_str );
> + }
I don't think the test runtime should be modifying the environment. This
even breaks a test:
../../../tools/runtest -q -P wine -T ../../.. -M msvcrt.dll -p msvcrt_test.exe environ && touch environ.ok
environ.c:230: Test failed: Expected environment block pointer element to be non-NULL
wine: Unhandled page fault on read access to 00000000 at address 7EAFFB4D (thread 0044), starting debugger...
--
Alexandre Julliard
julliard(a)winehq.org
Dec. 17, 2019
Re: [PATCH 1/5] avicap32: Define NONAMELESSUNION in files that include objidl.h.
by Alexandre Julliard
Zebediah Figura <z.figura12(a)gmail.com> writes:
> On 12/17/19 12:42 PM, Alexandre Julliard wrote:
>> Zebediah Figura <zfigura(a)codeweavers.com> writes:
>>
>>> On 12/17/19 11:37 AM, Alexandre Julliard wrote:
>>>> Zebediah Figura <z.figura12(a)gmail.com> writes:
>>>>
>>>>> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47710
>>>>> Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
>>>>> ---
>>>>> This is not currently necessary, but will be with the prescribed solution for
>>>>> bug 47710, viz. defining the type _STGMEDIUM_UNION.
>>>>
>>>> I'm not sure I understand what fix you are proposing, but if it requires
>>>> Winelib users to also define NONAMELESSUNION I don't think it's a viable
>>>> solution.
>>>>
>>>
>>> Essentially, this:
>>>
>>> ---
>>> diff --git a/include/objidl.idl b/include/objidl.idl
>>> index a0ad1f6e01f..4c56c422747 100644
>>> --- a/include/objidl.idl
>>> +++ b/include/objidl.idl
>>> @@ -1427,7 +1427,7 @@ interface IAdviseSink : IUnknown
>>> } GDI_OBJECT;
>>>
>>> typedef struct _userSTGMEDIUM {
>>> - union switch(DWORD tymed) u {
>>> + union _STGMEDIUM_UNION switch(DWORD tymed) u {
>>> case TYMED_NULL: ;
>>> case TYMED_MFPICT: wireHMETAFILEPICT hMetaFilePict;
>>> case TYMED_ENHMF: wireHENHMETAFILE hHEnhMetaFile;
>>> ---
>>>
>>> Which causes warnings anywhere that nameless unions are used:
>>>
>>> ---
>>> In file included from ../../../wine/include/objbase.h:258,
>>> from ../../../wine/include/ole2.h:25,
>>> from ../../include/strmif.h:13,
>>> from ../../../wine/dlls/wmcodecdspuuid/wmcodecdspuuid.c:22:
>>> ../../include/objidl.h:6109:21: warning: declaration does not declare
>>> anything
>>> 6109 | } DUMMYUNIONNAME;
>>
>> I'm afraid we'll have to find a different fix then.
>>
>
> I understand the difficulty, but I'm not sure what else we can
> reasonably do here. As far as I can see either we have to throw C++
> under the bus (i.e. close that bug as WONTFIX), or we have to add
> specific differences into widl (or objidl.idl) for winelib, to avoid
> violating the C spec. That either means making the structure type
> anonymous (i.e. not defining _STGMEDIUM_UNION), which is not
> particularly great (not that it's particularly likely anyone would want
> to use the _STGMEDIUM_UNION type), or forcibly giving the union member a
> name (which would also potentially require changes in winelib user code).
>
> But maybe I'm missing another, more perfect option.
If the issue is C++ code, this can be fixed by providing a different
definition with judicious use of cpp_quote and #ifdef __cplusplus.
If the issue is C code accessing the structure members, it would be OK
to require that code to be modified. But we can't require modifying
every file that happens to include the header without any interest in
that specific structure.
--
Alexandre Julliard
julliard(a)winehq.org
Dec. 17, 2019
[PATCH v2] dmloader: Use wide-char string literals
by Michael Stefaniuc
Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org>
---
v2: Keep some variables to avoid casts.
Alexandre, feel free to just apply the test portion. I'll resubmit after
the freeze; better for my commit count anyway ;)
bye
michael
dlls/dmloader/loader.c | 8 ++++----
dlls/dmloader/tests/loader.c | 11 +++++------
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/dlls/dmloader/loader.c b/dlls/dmloader/loader.c
index 51eeb57879..c5f5094fab 100644
--- a/dlls/dmloader/loader.c
+++ b/dlls/dmloader/loader.c
@@ -621,7 +621,6 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_SetSearchDirectory(IDirectMusicLoad
static HRESULT WINAPI IDirectMusicLoaderImpl_ScanDirectory(IDirectMusicLoader8 *iface, REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName)
{
IDirectMusicLoaderImpl *This = impl_from_IDirectMusicLoader8(iface);
- static const WCHAR wszAny[] = {'*',0};
WIN32_FIND_DATAW FileData;
HANDLE hSearch;
WCHAR wszSearchString[MAX_PATH];
@@ -643,11 +642,12 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_ScanDirectory(IDirectMusicLoader8 *
p = wszSearchString + lstrlenW(wszSearchString);
if (p > wszSearchString && p[-1] != '\\') *p++ = '\\';
*p++ = '*'; /* any file */
- if (lstrcmpW (pwzFileExtension, wszAny)) *p++ = '.'; /* if we have actual extension, put a dot */
+ if (lstrcmpW (pwzFileExtension, L"*"))
+ *p++ = '.'; /* if we have actual extension, put a dot */
lstrcpyW (p, pwzFileExtension);
-
+
TRACE(": search string: %s\n", debugstr_w(wszSearchString));
-
+
hSearch = FindFirstFileW (wszSearchString, &FileData);
if (hSearch == INVALID_HANDLE_VALUE) {
TRACE(": no files found\n");
diff --git a/dlls/dmloader/tests/loader.c b/dlls/dmloader/tests/loader.c
index 0ab2e9eaba..418a4ebb7a 100644
--- a/dlls/dmloader/tests/loader.c
+++ b/dlls/dmloader/tests/loader.c
@@ -48,10 +48,10 @@ static void test_directory(void)
{
IDirectMusicLoader8 *loader = NULL;
HRESULT hr;
- WCHAR con[] = {'c', 'o', 'n', 0};
+ WCHAR con[] = L"con";
+ WCHAR empty[] = L"";
+ WCHAR invalid_path[] = L"/invalid path";
WCHAR path[MAX_PATH];
- WCHAR empty[] = {0};
- WCHAR invalid_path[] = {'/', 'i', 'n', 'v', 'a', 'l', 'i', 'd', ' ', 'p', 'a', 't', 'h', 0};
hr = CoCreateInstance(&CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, &IID_IDirectMusicLoader8,
(void**)&loader);
@@ -477,7 +477,6 @@ static void test_parsedescriptor(void)
DMUS_OBJECTDESC desc;
HRESULT hr;
DWORD valid;
- const WCHAR s_unam[] = {'U','N','A','M','\0'};
const FOURCC alldesc[] =
{
FOURCC_RIFF, DMUS_FOURCC_CONTAINER_FORM, DMUS_FOURCC_CATEGORY_CHUNK, FOURCC_LIST,
@@ -562,7 +561,7 @@ static void test_parsedescriptor(void)
wine_dbgstr_guid(&desc.guidClass));
ok(IsEqualGUID(&desc.guidObject, &GUID_NULL), "Got object guid %s, expected GUID_NULL\n",
wine_dbgstr_guid(&desc.guidClass));
- ok(!memcmp(desc.wszName, s_unam, sizeof(s_unam)), "Got name '%s', expected 'UNAM'\n",
+ ok(!lstrcmpW(desc.wszName, L"UNAM"), "Got name '%s', expected 'UNAM'\n",
wine_dbgstr_w(desc.wszName));
IStream_Release(stream);
@@ -596,7 +595,7 @@ static void test_parsedescriptor(void)
ok(hr == S_OK, "ParseDescriptor failed: %08x, expected S_OK\n", hr);
valid = DMUS_OBJ_OBJECT|DMUS_OBJ_CLASS|DMUS_OBJ_NAME|DMUS_OBJ_CATEGORY|DMUS_OBJ_VERSION;
ok(desc.dwValidData == valid, "Got valid data %#x, expected %#x\n", desc.dwValidData, valid);
- ok(!memcmp(desc.wszName, s_unam, sizeof(s_unam)), "Got name '%s', expected 'UNAM'\n",
+ ok(!lstrcmpW(desc.wszName, L"UNAM"), "Got name '%s', expected 'UNAM'\n",
wine_dbgstr_w(desc.wszName));
IStream_Release(stream);
--
2.23.0
Dec. 17, 2019
Re: Bugs To Fix?
by Michael Stefaniuc
Hello John,
On 12/17/19 12:03 AM, Thales wrote:
> What are some of the most important bugs that need fixing? I would
personally I consider regressions to be more important than other bugs.
Feel free to grab one from https://source.winehq.org/regressions
Doing a regression test for one of the "61 regressions without commit
id" is also a good task for somebody that wants to help out.
bye
michael
> like to take a crack at one or more. I've been looking at Bugzilla and
> there's quite a bit there to sift through.
>
>
> Thanks for any feedback!
>
> ...John Alway
Dec. 17, 2019
Re: [PATCH 1/5] avicap32: Define NONAMELESSUNION in files that include objidl.h.
by Zebediah Figura
On 12/17/19 12:42 PM, Alexandre Julliard wrote:
> Zebediah Figura <zfigura(a)codeweavers.com> writes:
>
>> On 12/17/19 11:37 AM, Alexandre Julliard wrote:
>>> Zebediah Figura <z.figura12(a)gmail.com> writes:
>>>
>>>> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47710
>>>> Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
>>>> ---
>>>> This is not currently necessary, but will be with the prescribed solution for
>>>> bug 47710, viz. defining the type _STGMEDIUM_UNION.
>>>
>>> I'm not sure I understand what fix you are proposing, but if it requires
>>> Winelib users to also define NONAMELESSUNION I don't think it's a viable
>>> solution.
>>>
>>
>> Essentially, this:
>>
>> ---
>> diff --git a/include/objidl.idl b/include/objidl.idl
>> index a0ad1f6e01f..4c56c422747 100644
>> --- a/include/objidl.idl
>> +++ b/include/objidl.idl
>> @@ -1427,7 +1427,7 @@ interface IAdviseSink : IUnknown
>> } GDI_OBJECT;
>>
>> typedef struct _userSTGMEDIUM {
>> - union switch(DWORD tymed) u {
>> + union _STGMEDIUM_UNION switch(DWORD tymed) u {
>> case TYMED_NULL: ;
>> case TYMED_MFPICT: wireHMETAFILEPICT hMetaFilePict;
>> case TYMED_ENHMF: wireHENHMETAFILE hHEnhMetaFile;
>> ---
>>
>> Which causes warnings anywhere that nameless unions are used:
>>
>> ---
>> In file included from ../../../wine/include/objbase.h:258,
>> from ../../../wine/include/ole2.h:25,
>> from ../../include/strmif.h:13,
>> from ../../../wine/dlls/wmcodecdspuuid/wmcodecdspuuid.c:22:
>> ../../include/objidl.h:6109:21: warning: declaration does not declare
>> anything
>> 6109 | } DUMMYUNIONNAME;
>
> I'm afraid we'll have to find a different fix then.
>
I understand the difficulty, but I'm not sure what else we can
reasonably do here. As far as I can see either we have to throw C++
under the bus (i.e. close that bug as WONTFIX), or we have to add
specific differences into widl (or objidl.idl) for winelib, to avoid
violating the C spec. That either means making the structure type
anonymous (i.e. not defining _STGMEDIUM_UNION), which is not
particularly great (not that it's particularly likely anyone would want
to use the _STGMEDIUM_UNION type), or forcibly giving the union member a
name (which would also potentially require changes in winelib user code).
But maybe I'm missing another, more perfect option.
Dec. 17, 2019
Re: [PATCH 1/5] avicap32: Define NONAMELESSUNION in files that include objidl.h.
by Alexandre Julliard
Zebediah Figura <zfigura(a)codeweavers.com> writes:
> On 12/17/19 11:37 AM, Alexandre Julliard wrote:
>> Zebediah Figura <z.figura12(a)gmail.com> writes:
>>
>>> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47710
>>> Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
>>> ---
>>> This is not currently necessary, but will be with the prescribed solution for
>>> bug 47710, viz. defining the type _STGMEDIUM_UNION.
>>
>> I'm not sure I understand what fix you are proposing, but if it requires
>> Winelib users to also define NONAMELESSUNION I don't think it's a viable
>> solution.
>>
>
> Essentially, this:
>
> ---
> diff --git a/include/objidl.idl b/include/objidl.idl
> index a0ad1f6e01f..4c56c422747 100644
> --- a/include/objidl.idl
> +++ b/include/objidl.idl
> @@ -1427,7 +1427,7 @@ interface IAdviseSink : IUnknown
> } GDI_OBJECT;
>
> typedef struct _userSTGMEDIUM {
> - union switch(DWORD tymed) u {
> + union _STGMEDIUM_UNION switch(DWORD tymed) u {
> case TYMED_NULL: ;
> case TYMED_MFPICT: wireHMETAFILEPICT hMetaFilePict;
> case TYMED_ENHMF: wireHENHMETAFILE hHEnhMetaFile;
> ---
>
> Which causes warnings anywhere that nameless unions are used:
>
> ---
> In file included from ../../../wine/include/objbase.h:258,
> from ../../../wine/include/ole2.h:25,
> from ../../include/strmif.h:13,
> from ../../../wine/dlls/wmcodecdspuuid/wmcodecdspuuid.c:22:
> ../../include/objidl.h:6109:21: warning: declaration does not declare
> anything
> 6109 | } DUMMYUNIONNAME;
I'm afraid we'll have to find a different fix then.
--
Alexandre Julliard
julliard(a)winehq.org
Dec. 17, 2019
Re: [PATCH 1/5] avicap32: Define NONAMELESSUNION in files that include objidl.h.
by Zebediah Figura
On 12/17/19 11:37 AM, Alexandre Julliard wrote:
> Zebediah Figura <z.figura12(a)gmail.com> writes:
>
>> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47710
>> Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
>> ---
>> This is not currently necessary, but will be with the prescribed solution for
>> bug 47710, viz. defining the type _STGMEDIUM_UNION.
>
> I'm not sure I understand what fix you are proposing, but if it requires
> Winelib users to also define NONAMELESSUNION I don't think it's a viable
> solution.
>
Essentially, this:
---
diff --git a/include/objidl.idl b/include/objidl.idl
index a0ad1f6e01f..4c56c422747 100644
--- a/include/objidl.idl
+++ b/include/objidl.idl
@@ -1427,7 +1427,7 @@ interface IAdviseSink : IUnknown
} GDI_OBJECT;
typedef struct _userSTGMEDIUM {
- union switch(DWORD tymed) u {
+ union _STGMEDIUM_UNION switch(DWORD tymed) u {
case TYMED_NULL: ;
case TYMED_MFPICT: wireHMETAFILEPICT hMetaFilePict;
case TYMED_ENHMF: wireHENHMETAFILE hHEnhMetaFile;
---
Which causes warnings anywhere that nameless unions are used:
---
In file included from ../../../wine/include/objbase.h:258,
from ../../../wine/include/ole2.h:25,
from ../../include/strmif.h:13,
from ../../../wine/dlls/wmcodecdspuuid/wmcodecdspuuid.c:22:
../../include/objidl.h:6109:21: warning: declaration does not declare
anything
6109 | } DUMMYUNIONNAME;
| ^
---
Dec. 17, 2019
Re: [PATCH 1/5] avicap32: Define NONAMELESSUNION in files that include objidl.h.
by Alexandre Julliard
Zebediah Figura <z.figura12(a)gmail.com> writes:
> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47710
> Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
> ---
> This is not currently necessary, but will be with the prescribed solution for
> bug 47710, viz. defining the type _STGMEDIUM_UNION.
I'm not sure I understand what fix you are proposing, but if it requires
Winelib users to also define NONAMELESSUNION I don't think it's a viable
solution.
--
Alexandre Julliard
julliard(a)winehq.org
Dec. 17, 2019
[PATCH 5/5] dbghelp: Define NONAMELESSUNION in files that include objidl.h.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/dbghelp/coff.c | 7 +------
dlls/dbghelp/dbghelp_private.h | 1 +
dlls/dbghelp/stabs.c | 5 -----
dlls/dbghelp/storage.c | 2 +-
4 files changed, 3 insertions(+), 12 deletions(-)
diff --git a/dlls/dbghelp/coff.c b/dlls/dbghelp/coff.c
index 01c5826c7ff..197434f1f31 100644
--- a/dlls/dbghelp/coff.c
+++ b/dlls/dbghelp/coff.c
@@ -43,14 +43,9 @@
# include <unistd.h>
#endif
-#include <stdarg.h>
-#include "windef.h"
-#include "winbase.h"
-#include "winternl.h"
-
+#include "dbghelp_private.h"
#include "wine/exception.h"
#include "wine/debug.h"
-#include "dbghelp_private.h"
#include "wine/mscvpdb.h"
WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_coff);
diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h
index b52392aeced..902bc114bb5 100644
--- a/dlls/dbghelp/dbghelp_private.h
+++ b/dlls/dbghelp/dbghelp_private.h
@@ -22,6 +22,7 @@
*/
#include <stdarg.h>
+#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "winver.h"
diff --git a/dlls/dbghelp/stabs.c b/dlls/dbghelp/stabs.c
index bc5ef356e8c..55116735f5f 100644
--- a/dlls/dbghelp/stabs.c
+++ b/dlls/dbghelp/stabs.c
@@ -49,16 +49,11 @@
#endif
#include <stdio.h>
#include <assert.h>
-#include <stdarg.h>
#ifdef HAVE_MACH_O_NLIST_H
# include <mach-o/nlist.h>
#endif
-#include "windef.h"
-#include "winbase.h"
-#include "winnls.h"
-
#include "dbghelp_private.h"
#include "wine/debug.h"
diff --git a/dlls/dbghelp/storage.c b/dlls/dbghelp/storage.c
index b08639f5518..cd5792ca413 100644
--- a/dlls/dbghelp/storage.c
+++ b/dlls/dbghelp/storage.c
@@ -23,9 +23,9 @@
#include "config.h"
#include <assert.h>
#include <stdlib.h>
-#include "wine/debug.h"
#include "dbghelp_private.h"
+#include "wine/debug.h"
#ifdef USE_STATS
#include <math.h>
#endif
--
2.24.0
Dec. 17, 2019
[PATCH 4/5] cabinet: Define NONAMELESSUNION in files that include objidl.h.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/cabinet/cabinet_main.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/cabinet/cabinet_main.c b/dlls/cabinet/cabinet_main.c
index f95eca93c52..f6017fc7eb2 100644
--- a/dlls/cabinet/cabinet_main.c
+++ b/dlls/cabinet/cabinet_main.c
@@ -23,6 +23,7 @@
#include <string.h>
#include <fcntl.h>
+#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
--
2.24.0
Dec. 17, 2019
[PATCH 3/5] advapi32: Define NONAMELESSUNION in files that include objidl.h.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/advapi32/security.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
index a7707f15d39..3ed27bfe8fd 100644
--- a/dlls/advapi32/security.c
+++ b/dlls/advapi32/security.c
@@ -25,6 +25,7 @@
#include <string.h>
#include "ntstatus.h"
+#define NONAMELESSUNION
#define WIN32_NO_STATUS
#include "windef.h"
#include "winbase.h"
--
2.24.0
Dec. 17, 2019
[PATCH 2/5] adsiid: Define NONAMELESSUNION in files that include objidl.h.
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/adsiid/adsiid.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/adsiid/adsiid.c b/dlls/adsiid/adsiid.c
index fc0b8b1bf4e..69aeb6a9a32 100644
--- a/dlls/adsiid/adsiid.c
+++ b/dlls/adsiid/adsiid.c
@@ -20,6 +20,7 @@
#include <stdarg.h>
+#define NONAMELESSUNION
#include "windef.h"
#include "objbase.h"
#include "initguid.h"
--
2.24.0
Dec. 17, 2019