mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
Rebase against 6767ac4bb79ad774f0c850a8c4753a2e6fdea75f.
This commit is contained in:
parent
e3c64796cd
commit
58890792b7
@ -67,7 +67,7 @@ for more details.*
|
||||
* Add stub for ntoskrnl.KeWaitForMultipleObjects ([Wine Bug #32186](https://bugs.winehq.org/show_bug.cgi?id=32186))
|
||||
* Add stub for ntoskrnl.Mm{Map,Unmap}LockedPages
|
||||
* Add stub for ntoskrnl.PsRemoveLoadImageNotifyRoutine
|
||||
* Add stub for setupapi.SetupDiSelectBestCompatDrv ([Wine Bug #32088](https://bugs.winehq.org/show_bug.cgi?id=32088))
|
||||
* ~~Add stub for setupapi.SetupDiSelectBestCompatDrv~~ ([Wine Bug #32088](https://bugs.winehq.org/show_bug.cgi?id=32088))
|
||||
* Add stub for wininet.ParseX509EncodedCertificateForListBoxEntry ([Wine Bug #29842](https://bugs.winehq.org/show_bug.cgi?id=29842))
|
||||
* Add stub for winscard.SCardListReadersA/W ([Wine Bug #26978](https://bugs.winehq.org/show_bug.cgi?id=26978))
|
||||
* Add stub for winspool.SetPrinterW level 8 ([Wine Bug #24645](https://bugs.winehq.org/show_bug.cgi?id=24645))
|
||||
@ -76,7 +76,7 @@ for more details.*
|
||||
* Add stubbed ISWbemSecurity interfaces in wbemdisp
|
||||
* Add stubs for D3DXCreateAnimationController interface
|
||||
* Add stubs for additional wininet options in InternetSetOption
|
||||
* Add stubs for advapi32.RegCreateKeyTransacted[A/W]
|
||||
* ~~Add stubs for advapi32.RegCreateKeyTransacted[A/W]~~
|
||||
* Add support for CopyFileEx progress callback ([Wine Bug #22692](https://bugs.winehq.org/show_bug.cgi?id=22692))
|
||||
* Add support for GTK3 theming
|
||||
* Add support for GetPropValue to PulseAudio backend
|
||||
|
@ -1,64 +0,0 @@
|
||||
From a5cf87f611909a601fe00cbdd5235add43652c54 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 14 Nov 2015 17:29:43 +0100
|
||||
Subject: advapi32: Add stubs for RegCreateKeyTransacted[A/W] functions.
|
||||
|
||||
---
|
||||
dlls/advapi32/advapi32.spec | 4 ++--
|
||||
dlls/advapi32/registry.c | 25 +++++++++++++++++++++++++
|
||||
2 files changed, 27 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
|
||||
index ff2b0de..36f176b 100644
|
||||
--- a/dlls/advapi32/advapi32.spec
|
||||
+++ b/dlls/advapi32/advapi32.spec
|
||||
@@ -581,8 +581,8 @@
|
||||
@ stdcall RegCreateKeyExA(long str long ptr long long ptr ptr ptr)
|
||||
@ stdcall RegCreateKeyExW(long wstr long ptr long long ptr ptr ptr)
|
||||
@ stdcall RegCreateKeyW(long wstr ptr)
|
||||
-# @ stub RegCreateKeyTransactedA
|
||||
-# @ stub RegCreateKeyTransactedW
|
||||
+@ stdcall RegCreateKeyTransactedA(long str long ptr long long ptr ptr ptr long ptr)
|
||||
+@ stdcall RegCreateKeyTransactedW(long wstr long ptr long long ptr ptr ptr long ptr)
|
||||
@ stdcall RegDeleteKeyA(long str)
|
||||
@ stdcall RegDeleteKeyExA(long str long long)
|
||||
@ stdcall RegDeleteKeyExW(long wstr long long)
|
||||
diff --git a/dlls/advapi32/registry.c b/dlls/advapi32/registry.c
|
||||
index 798f93d..6b4c873 100644
|
||||
--- a/dlls/advapi32/registry.c
|
||||
+++ b/dlls/advapi32/registry.c
|
||||
@@ -473,6 +473,31 @@ LSTATUS WINAPI RegCreateKeyA( HKEY hkey, LPCSTR lpSubKey, PHKEY phkResult )
|
||||
}
|
||||
|
||||
|
||||
+/******************************************************************************
|
||||
+ * RegCreateKeyTransactedW [ADVAPI32.@]
|
||||
+ */
|
||||
+LSTATUS WINAPI RegCreateKeyTransactedW( HKEY hkey, LPCWSTR name, DWORD reserved, LPWSTR class,
|
||||
+ DWORD options, REGSAM access, SECURITY_ATTRIBUTES *sa,
|
||||
+ PHKEY retkey, LPDWORD dispos, HANDLE transaction, PVOID reserved2 )
|
||||
+{
|
||||
+ FIXME( "(%p,%s,%u,%s,%u,%u,%p,%p,%p,%p,%p): stub\n", hkey, debugstr_w(name), reserved,
|
||||
+ debugstr_w(class), options, access, sa, retkey, dispos, transaction, reserved2 );
|
||||
+ return ERROR_CALL_NOT_IMPLEMENTED;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/******************************************************************************
|
||||
+ * RegCreateKeyTransactedA [ADVAPI32.@]
|
||||
+ */
|
||||
+LSTATUS WINAPI RegCreateKeyTransactedA( HKEY hkey, LPCSTR name, DWORD reserved, LPSTR class,
|
||||
+ DWORD options, REGSAM access, SECURITY_ATTRIBUTES *sa,
|
||||
+ PHKEY retkey, LPDWORD dispos, HANDLE transaction, PVOID reserved2 )
|
||||
+{
|
||||
+ FIXME( "(%p,%s,%u,%s,%u,%u,%p,%p,%p,%p,%p): stub\n", hkey, debugstr_a(name), reserved,
|
||||
+ debugstr_a(class), options, access, sa, retkey, dispos, transaction, reserved2 );
|
||||
+ return ERROR_CALL_NOT_IMPLEMENTED;
|
||||
+}
|
||||
+
|
||||
|
||||
/******************************************************************************
|
||||
* RegOpenKeyExW [ADVAPI32.@]
|
||||
--
|
||||
2.6.2
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: Add stubs for advapi32.RegCreateKeyTransacted[A/W]
|
@ -1,4 +1,4 @@
|
||||
From 6ae55e62a81e4f4ded0ea14926f014b6d6a4b633 Mon Sep 17 00:00:00 2001
|
||||
From 29ed0b32254cac13e07daea09b4288ce774688cc Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Wed, 28 Oct 2015 22:36:01 +0100
|
||||
Subject: hal: Implement KeQueryPerformanceCounter.
|
||||
@ -9,11 +9,11 @@ Subject: hal: Implement KeQueryPerformanceCounter.
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/hal/hal.c b/dlls/hal/hal.c
|
||||
index 96bc895..145869d 100644
|
||||
index bca688e..84942ca 100644
|
||||
--- a/dlls/hal/hal.c
|
||||
+++ b/dlls/hal/hal.c
|
||||
@@ -155,3 +155,13 @@ KIRQL WINAPI KeGetCurrentIrql(VOID)
|
||||
FIXME( " stub!\n");
|
||||
@@ -161,3 +161,13 @@ ULONG WINAPI READ_PORT_ULONG(ULONG *port)
|
||||
FIXME("(%p) stub!\n", port);
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
@ -27,7 +27,7 @@ index 96bc895..145869d 100644
|
||||
+ return counter.QuadPart;
|
||||
+}
|
||||
diff --git a/dlls/hal/hal.spec b/dlls/hal/hal.spec
|
||||
index 3046c65..dc908dd 100644
|
||||
index 02f778c..821084d 100644
|
||||
--- a/dlls/hal/hal.spec
|
||||
+++ b/dlls/hal/hal.spec
|
||||
@@ -72,7 +72,7 @@
|
||||
@ -40,5 +40,5 @@ index 3046c65..dc908dd 100644
|
||||
@ stub KeRaiseIrqlToDpcLevel
|
||||
@ stub KeRaiseIrqlToSynchLevel
|
||||
--
|
||||
2.6.2
|
||||
2.6.4
|
||||
|
||||
|
@ -1,50 +0,0 @@
|
||||
From 33fa174b6404cfea673d510457d21d784a23efbd Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 4 May 2014 00:18:11 +0200
|
||||
Subject: kernel32: Silence repeated CompareStringEx FIXME.
|
||||
|
||||
---
|
||||
dlls/kernel32/locale.c | 14 +++++++++-----
|
||||
1 file changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
|
||||
index eca0e39..55ef3d6 100644
|
||||
--- a/dlls/kernel32/locale.c
|
||||
+++ b/dlls/kernel32/locale.c
|
||||
@@ -2985,9 +2985,10 @@ INT WINAPI CompareStringW(LCID lcid, DWORD flags,
|
||||
INT WINAPI CompareStringEx(LPCWSTR locale, DWORD flags, LPCWSTR str1, INT len1,
|
||||
LPCWSTR str2, INT len2, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM lParam)
|
||||
{
|
||||
- DWORD supported_flags = NORM_IGNORECASE|NORM_IGNORENONSPACE|NORM_IGNORESYMBOLS|SORT_STRINGSORT
|
||||
- |NORM_IGNOREKANATYPE|NORM_IGNOREWIDTH|LOCALE_USE_CP_ACP;
|
||||
- DWORD semistub_flags = NORM_LINGUISTIC_CASING|LINGUISTIC_IGNORECASE|0x10000000;
|
||||
+ static const DWORD supported_flags = NORM_IGNORECASE|NORM_IGNORENONSPACE|NORM_IGNORESYMBOLS|SORT_STRINGSORT
|
||||
+ |NORM_IGNOREKANATYPE|NORM_IGNOREWIDTH|LOCALE_USE_CP_ACP
|
||||
+ |NORM_LINGUISTIC_CASING|LINGUISTIC_IGNORECASE|0x10000000;
|
||||
+ static DWORD semistub_flags = NORM_LINGUISTIC_CASING|LINGUISTIC_IGNORECASE|0x10000000;
|
||||
/* 0x10000000 is related to diacritics in Arabic, Japanese, and Hebrew */
|
||||
INT ret;
|
||||
|
||||
@@ -3001,14 +3002,17 @@ INT WINAPI CompareStringEx(LPCWSTR locale, DWORD flags, LPCWSTR str1, INT len1,
|
||||
return 0;
|
||||
}
|
||||
|
||||
- if (flags & ~(supported_flags|semistub_flags))
|
||||
+ if (flags & ~supported_flags)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_FLAGS);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (flags & semistub_flags)
|
||||
- FIXME("semi-stub behavor for flag(s) 0x%x\n", flags & semistub_flags);
|
||||
+ {
|
||||
+ FIXME("semi-stub behavior for flag(s) 0x%x\n", flags & semistub_flags);
|
||||
+ semistub_flags &= ~flags;
|
||||
+ }
|
||||
|
||||
if (len1 < 0) len1 = strlenW(str1);
|
||||
if (len2 < 0) len2 = strlenW(str2);
|
||||
--
|
||||
1.7.9.5
|
||||
|
@ -1 +0,0 @@
|
||||
Category: stable
|
@ -1,72 +0,0 @@
|
||||
From b63f6580710ea93ed81219bcad3f9cfab7f6c742 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 31 Oct 2015 22:06:57 +0100
|
||||
Subject: ntdll/tests: Add more tests for SystemHandleInformation.
|
||||
|
||||
---
|
||||
dlls/ntdll/tests/info.c | 36 ++++++++++++++++++++++++++++--------
|
||||
1 file changed, 28 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
|
||||
index 83fdd53..8e0a806 100644
|
||||
--- a/dlls/ntdll/tests/info.c
|
||||
+++ b/dlls/ntdll/tests/info.c
|
||||
@@ -477,27 +477,47 @@ static void test_query_handle(void)
|
||||
ULONG ReturnLength;
|
||||
ULONG SystemInformationLength = sizeof(SYSTEM_HANDLE_INFORMATION);
|
||||
SYSTEM_HANDLE_INFORMATION* shi = HeapAlloc(GetProcessHeap(), 0, SystemInformationLength);
|
||||
+ HANDLE event_handle;
|
||||
+
|
||||
+ event_handle = CreateEventA(NULL, FALSE, FALSE, NULL);
|
||||
+ ok( event_handle != NULL, "CreateEventA failed %u\n", GetLastError() );
|
||||
|
||||
/* Request the needed length : a SystemInformationLength greater than one struct sets ReturnLength */
|
||||
+ ReturnLength = 0xdeadbeef;
|
||||
status = pNtQuerySystemInformation(SystemHandleInformation, shi, SystemInformationLength, &ReturnLength);
|
||||
todo_wine ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status);
|
||||
+ ok( ReturnLength != 0xdeadbeef, "Expected valid ReturnLength\n" );
|
||||
|
||||
SystemInformationLength = ReturnLength;
|
||||
shi = HeapReAlloc(GetProcessHeap(), 0, shi , SystemInformationLength);
|
||||
+
|
||||
+ ReturnLength = 0xdeadbeef;
|
||||
status = pNtQuerySystemInformation(SystemHandleInformation, shi, SystemInformationLength, &ReturnLength);
|
||||
if (status != STATUS_INFO_LENGTH_MISMATCH) /* vista */
|
||||
{
|
||||
- ok( status == STATUS_SUCCESS,
|
||||
- "Expected STATUS_SUCCESS, got %08x\n", status);
|
||||
-
|
||||
- /* Check if we have some return values */
|
||||
- trace("Number of Handles : %d\n", shi->Count);
|
||||
- todo_wine
|
||||
+ ULONG ExpectedLength = FIELD_OFFSET(SYSTEM_HANDLE_INFORMATION, Handle[shi->Count]);
|
||||
+ unsigned int i;
|
||||
+ BOOL found = FALSE;
|
||||
+
|
||||
+ ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status );
|
||||
+ todo_wine ok( ReturnLength == ExpectedLength, "Expected length %u, got %u\n", ExpectedLength, ReturnLength );
|
||||
+ todo_wine ok( shi->Count > 1, "Expected more than 1 handles, got %u\n", shi->Count );
|
||||
+ for (i = 0; i < shi->Count; i++)
|
||||
{
|
||||
- /* our implementation is a stub for now */
|
||||
- ok( shi->Count > 1, "Expected more than 1 handles, got (%d)\n", shi->Count);
|
||||
+ if (shi->Handle[i].OwnerPid == GetCurrentProcessId() &&
|
||||
+ (HANDLE)(ULONG_PTR)shi->Handle[i].HandleValue == event_handle)
|
||||
+ {
|
||||
+ found = TRUE;
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
+ todo_wine ok( found, "Expected to find event handle in handle list\n" );
|
||||
}
|
||||
+
|
||||
+ status = pNtQuerySystemInformation(SystemHandleInformation, NULL, SystemInformationLength, &ReturnLength);
|
||||
+ ok( status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got %08x\n", status );
|
||||
+
|
||||
+ CloseHandle(event_handle);
|
||||
HeapFree( GetProcessHeap(), 0, shi);
|
||||
}
|
||||
|
||||
--
|
||||
2.6.1
|
||||
|
@ -1,17 +1,19 @@
|
||||
From 5576d1d8409f51c9d5ed2311d3b3a7ece07f0c9b Mon Sep 17 00:00:00 2001
|
||||
From 1703d568d9756fbf3d6a11889386ff9355f33755 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 31 Oct 2015 22:17:43 +0100
|
||||
Subject: server: Implement wineserver call for SystemHandleInformation.
|
||||
Date: Thu, 24 Dec 2015 13:08:50 +0100
|
||||
Subject: server: Implement wineserver call for SystemHandleInformation. (v2)
|
||||
|
||||
Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
|
||||
---
|
||||
dlls/ntdll/nt.c | 49 +++++++++++++++++++++++++++++++++++-------
|
||||
dlls/ntdll/tests/info.c | 8 +++----
|
||||
server/handle.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/nt.c | 49 ++++++++++++++++++++++++++++++++++++-------
|
||||
dlls/ntdll/tests/info.c | 10 ++++-----
|
||||
server/handle.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
server/protocol.def | 16 ++++++++++++++
|
||||
4 files changed, 118 insertions(+), 12 deletions(-)
|
||||
server/trace.c | 17 +++++++++++++++
|
||||
5 files changed, 135 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index 8ea1ddd..6d360c3 100644
|
||||
index 8ea1ddd..55255a8 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -2004,18 +2004,51 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
@ -41,7 +43,7 @@ index 8ea1ddd..6d360c3 100644
|
||||
- else ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||
- FIXME("info_class SYSTEM_HANDLE_INFORMATION\n");
|
||||
+
|
||||
+ num_handles = (Length - FIELD_OFFSET(SYSTEM_HANDLE_INFORMATION, Handle)) / sizeof(SYSTEM_HANDLE_ENTRY);
|
||||
+ num_handles = (Length - FIELD_OFFSET( SYSTEM_HANDLE_INFORMATION, Handle )) / sizeof(SYSTEM_HANDLE_ENTRY);
|
||||
+ if (!(info = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*info) * num_handles )))
|
||||
+ return STATUS_NO_MEMORY;
|
||||
+
|
||||
@ -52,10 +54,10 @@ index 8ea1ddd..6d360c3 100644
|
||||
+ {
|
||||
+ SYSTEM_HANDLE_INFORMATION *shi = SystemInformation;
|
||||
+ shi->Count = wine_server_reply_size( req ) / sizeof(*info);
|
||||
+ len = FIELD_OFFSET(SYSTEM_HANDLE_INFORMATION, Handle[shi->Count]);
|
||||
+ len = FIELD_OFFSET( SYSTEM_HANDLE_INFORMATION, Handle[shi->Count] );
|
||||
+ for (i = 0; i < shi->Count; i++)
|
||||
+ {
|
||||
+ memset(&shi->Handle[i], 0, sizeof(shi->Handle[i]));
|
||||
+ memset( &shi->Handle[i], 0, sizeof(shi->Handle[i]) );
|
||||
+ shi->Handle[i].OwnerPid = info[i].owner;
|
||||
+ shi->Handle[i].HandleValue = info[i].handle;
|
||||
+ shi->Handle[i].AccessMask = info[i].access;
|
||||
@ -64,7 +66,7 @@ index 8ea1ddd..6d360c3 100644
|
||||
+ }
|
||||
+ else if (ret == STATUS_BUFFER_TOO_SMALL)
|
||||
+ {
|
||||
+ len = FIELD_OFFSET(SYSTEM_HANDLE_INFORMATION, Handle[reply->count]);
|
||||
+ len = FIELD_OFFSET( SYSTEM_HANDLE_INFORMATION, Handle[reply->count] );
|
||||
+ ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||
+ }
|
||||
+ }
|
||||
@ -75,10 +77,10 @@ index 8ea1ddd..6d360c3 100644
|
||||
break;
|
||||
case SystemCacheInformation:
|
||||
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
|
||||
index 8e0a806..c0e2b1a 100644
|
||||
index 3219dbb..da509aa 100644
|
||||
--- a/dlls/ntdll/tests/info.c
|
||||
+++ b/dlls/ntdll/tests/info.c
|
||||
@@ -485,7 +485,7 @@ static void test_query_handle(void)
|
||||
@@ -487,7 +487,7 @@ static void test_query_handle(void)
|
||||
/* Request the needed length : a SystemInformationLength greater than one struct sets ReturnLength */
|
||||
ReturnLength = 0xdeadbeef;
|
||||
status = pNtQuerySystemInformation(SystemHandleInformation, shi, SystemInformationLength, &ReturnLength);
|
||||
@ -87,31 +89,29 @@ index 8e0a806..c0e2b1a 100644
|
||||
ok( ReturnLength != 0xdeadbeef, "Expected valid ReturnLength\n" );
|
||||
|
||||
SystemInformationLength = ReturnLength;
|
||||
@@ -500,8 +500,8 @@ static void test_query_handle(void)
|
||||
BOOL found = FALSE;
|
||||
|
||||
ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status );
|
||||
- todo_wine ok( ReturnLength == ExpectedLength, "Expected length %u, got %u\n", ExpectedLength, ReturnLength );
|
||||
- todo_wine ok( shi->Count > 1, "Expected more than 1 handles, got %u\n", shi->Count );
|
||||
+ ok( ReturnLength == ExpectedLength, "Expected length %u, got %u\n", ExpectedLength, ReturnLength );
|
||||
+ ok( shi->Count > 1, "Expected more than 1 handles, got %u\n", shi->Count );
|
||||
for (i = 0; i < shi->Count; i++)
|
||||
{
|
||||
if (shi->Handle[i].OwnerPid == GetCurrentProcessId() &&
|
||||
@@ -511,7 +511,7 @@ static void test_query_handle(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
- todo_wine ok( found, "Expected to find event handle in handle list\n" );
|
||||
+ ok( found, "Expected to find event handle in handle list\n" );
|
||||
@@ -503,13 +503,13 @@ static void test_query_handle(void)
|
||||
}
|
||||
ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status );
|
||||
ExpectedLength = FIELD_OFFSET(SYSTEM_HANDLE_INFORMATION, Handle[shi->Count]);
|
||||
- todo_wine ok( ReturnLength == ExpectedLength || broken(ReturnLength == ExpectedLength - sizeof(DWORD)), /* Vista / 2008 */
|
||||
- "Expected length %u, got %u\n", ExpectedLength, ReturnLength );
|
||||
- todo_wine ok( shi->Count > 1, "Expected more than 1 handle, got %u\n", shi->Count );
|
||||
+ ok( ReturnLength == ExpectedLength || broken(ReturnLength == ExpectedLength - sizeof(DWORD)), /* Vista / 2008 */
|
||||
+ "Expected length %u, got %u\n", ExpectedLength, ReturnLength );
|
||||
+ ok( shi->Count > 1, "Expected more than 1 handle, got %u\n", shi->Count );
|
||||
for (i = 0, found = FALSE; i < shi->Count && !found; i++)
|
||||
found = (shi->Handle[i].OwnerPid == GetCurrentProcessId()) &&
|
||||
((HANDLE)(ULONG_PTR)shi->Handle[i].HandleValue == EventHandle);
|
||||
- todo_wine ok( found, "Expected to find event handle in handle list\n" );
|
||||
+ ok( found, "Expected to find event handle in handle list\n" );
|
||||
|
||||
CloseHandle(EventHandle);
|
||||
|
||||
status = pNtQuerySystemInformation(SystemHandleInformation, NULL, SystemInformationLength, &ReturnLength);
|
||||
diff --git a/server/handle.c b/server/handle.c
|
||||
index 5043ff7..98e4d01 100644
|
||||
index 5043ff7..05d71ba 100644
|
||||
--- a/server/handle.c
|
||||
+++ b/server/handle.c
|
||||
@@ -745,3 +745,60 @@ DECL_HANDLER(get_security_object)
|
||||
@@ -745,3 +745,59 @@ DECL_HANDLER(get_security_object)
|
||||
|
||||
release_object( obj );
|
||||
}
|
||||
@ -133,15 +133,14 @@ index 5043ff7..98e4d01 100644
|
||||
+ if (!table)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!info->handle)
|
||||
+ {
|
||||
+ info->count += table->count;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0, entry = table->entries; i <= table->last; i++, entry++)
|
||||
+ {
|
||||
+ if (!entry->ptr) continue;
|
||||
+ if (!info->handle)
|
||||
+ {
|
||||
+ info->count++;
|
||||
+ continue;
|
||||
+ }
|
||||
+ assert( info->count );
|
||||
+ handle = info->handle++;
|
||||
+ handle->owner = process->id;
|
||||
@ -173,10 +172,10 @@ index 5043ff7..98e4d01 100644
|
||||
+ }
|
||||
+}
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 5b45078..200a2e9 100644
|
||||
index bfb9089..ea5bd61 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3259,6 +3259,22 @@ enum coords_relative
|
||||
@@ -3266,6 +3266,22 @@ enum coords_relative
|
||||
VARARG(sd,security_descriptor); /* retrieved security descriptor */
|
||||
@END
|
||||
|
||||
@ -192,13 +191,41 @@ index 5b45078..200a2e9 100644
|
||||
+@REQ(get_system_handles)
|
||||
+@REPLY
|
||||
+ unsigned int count; /* number of handles */
|
||||
+ VARARG(data,bytes); /* array of handle_infos */
|
||||
+ VARARG(data,handle_infos); /* array of handle_infos */
|
||||
+@END
|
||||
+
|
||||
+
|
||||
/* Create a mailslot */
|
||||
@REQ(create_mailslot)
|
||||
unsigned int access; /* wanted access rights */
|
||||
diff --git a/server/trace.c b/server/trace.c
|
||||
index 405a1c9..8a26fdb 100644
|
||||
--- a/server/trace.c
|
||||
+++ b/server/trace.c
|
||||
@@ -1142,6 +1142,23 @@ static void dump_varargs_rawinput_devices(const char *prefix, data_size_t size )
|
||||
fputc( '}', stderr );
|
||||
}
|
||||
|
||||
+static void dump_varargs_handle_infos( const char *prefix, data_size_t size )
|
||||
+{
|
||||
+ const struct handle_info *handle;
|
||||
+
|
||||
+ fprintf( stderr, "%s{", prefix );
|
||||
+ while (size >= sizeof(*handle))
|
||||
+ {
|
||||
+ handle = cur_data;
|
||||
+ fprintf( stderr, "{owner=%04x,handle=%04x,access=%08x}",
|
||||
+ handle->owner, handle->handle, handle->access );
|
||||
+ size -= sizeof(*handle);
|
||||
+ remove_data( sizeof(*handle) );
|
||||
+ if (size) fputc( ',', stderr );
|
||||
+ }
|
||||
+ fputc( '}', stderr );
|
||||
+}
|
||||
+
|
||||
typedef void (*dump_func)( const void *req );
|
||||
|
||||
/* Everything below this line is generated automatically by tools/make_requests */
|
||||
--
|
||||
2.6.1
|
||||
2.6.4
|
||||
|
@ -52,7 +52,7 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "35eebeef0fe0b3f03f44731f805c447b2342acfd"
|
||||
echo "6767ac4bb79ad774f0c850a8c4753a2e6fdea75f"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
@ -88,7 +88,6 @@ patch_enable_all ()
|
||||
enable_Pipelight="$1"
|
||||
enable_Staging="$1"
|
||||
enable_advapi32_LsaLookupSids="$1"
|
||||
enable_advapi32_RegCreateKeyTransacted="$1"
|
||||
enable_advapi32_SetSecurityInfo="$1"
|
||||
enable_amstream_GetMultiMediaStream="$1"
|
||||
enable_api_ms_win_crt_Stub_DLLs="$1"
|
||||
@ -152,7 +151,6 @@ patch_enable_all ()
|
||||
enable_iphlpapi_TCP_Table="$1"
|
||||
enable_kernel32_COMSPEC="$1"
|
||||
enable_kernel32_Codepage_Conversion="$1"
|
||||
enable_kernel32_CompareStringEx="$1"
|
||||
enable_kernel32_CompareString_Length="$1"
|
||||
enable_kernel32_CopyFileEx="$1"
|
||||
enable_kernel32_Cwd_Startup_Info="$1"
|
||||
@ -256,7 +254,6 @@ patch_enable_all ()
|
||||
enable_server_Timestamp_Compat="$1"
|
||||
enable_services_SERVICE_FILE_SYSTEM_DRIVER="$1"
|
||||
enable_setupapi_HSPFILEQ_Check_Type="$1"
|
||||
enable_setupapi_SetupDiSelectBestCompatDrv="$1"
|
||||
enable_setupapi_SetupDiSetDeviceInstallParamsW="$1"
|
||||
enable_setupapi_SetupPromptForDisk="$1"
|
||||
enable_sfc_SfcGetNextProtectedFile="$1"
|
||||
@ -373,9 +370,6 @@ patch_enable ()
|
||||
advapi32-LsaLookupSids)
|
||||
enable_advapi32_LsaLookupSids="$2"
|
||||
;;
|
||||
advapi32-RegCreateKeyTransacted)
|
||||
enable_advapi32_RegCreateKeyTransacted="$2"
|
||||
;;
|
||||
advapi32-SetSecurityInfo)
|
||||
enable_advapi32_SetSecurityInfo="$2"
|
||||
;;
|
||||
@ -568,9 +562,6 @@ patch_enable ()
|
||||
kernel32-Codepage_Conversion)
|
||||
enable_kernel32_Codepage_Conversion="$2"
|
||||
;;
|
||||
kernel32-CompareStringEx)
|
||||
enable_kernel32_CompareStringEx="$2"
|
||||
;;
|
||||
kernel32-CompareString_Length)
|
||||
enable_kernel32_CompareString_Length="$2"
|
||||
;;
|
||||
@ -880,9 +871,6 @@ patch_enable ()
|
||||
setupapi-HSPFILEQ_Check_Type)
|
||||
enable_setupapi_HSPFILEQ_Check_Type="$2"
|
||||
;;
|
||||
setupapi-SetupDiSelectBestCompatDrv)
|
||||
enable_setupapi_SetupDiSelectBestCompatDrv="$2"
|
||||
;;
|
||||
setupapi-SetupDiSetDeviceInstallParamsW)
|
||||
enable_setupapi_SetupDiSetDeviceInstallParamsW="$2"
|
||||
;;
|
||||
@ -1548,9 +1536,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
if test "$enable_fonts_Missing_Fonts" -gt 1; then
|
||||
abort "Patchset fonts-Missing_Fonts disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_kernel32_CompareStringEx" -gt 1; then
|
||||
abort "Patchset kernel32-CompareStringEx disabled, but category-stable depends on that."
|
||||
fi
|
||||
if test "$enable_kernel32_Named_Pipe" -gt 1; then
|
||||
abort "Patchset kernel32-Named_Pipe disabled, but category-stable depends on that."
|
||||
fi
|
||||
@ -1712,7 +1697,6 @@ if test "$enable_category_stable" -eq 1; then
|
||||
enable_dbghelp_Debug_Symbols=1
|
||||
enable_ddraw_EnumSurfaces=1
|
||||
enable_fonts_Missing_Fonts=1
|
||||
enable_kernel32_CompareStringEx=1
|
||||
enable_kernel32_Named_Pipe=1
|
||||
enable_libs_Debug_Channel=1
|
||||
enable_libs_Unicode_Collation=1
|
||||
@ -2298,18 +2282,6 @@ if test "$enable_advapi32_LsaLookupSids" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset advapi32-RegCreateKeyTransacted
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/advapi32.spec, dlls/advapi32/registry.c
|
||||
# |
|
||||
if test "$enable_advapi32_RegCreateKeyTransacted" -eq 1; then
|
||||
patch_apply advapi32-RegCreateKeyTransacted/0001-advapi32-Add-stubs-for-RegCreateKeyTransacted-A-W-fu.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "advapi32: Add stubs for RegCreateKeyTransacted[A/W] functions.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset advapi32-SetSecurityInfo
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -3383,18 +3355,6 @@ if test "$enable_kernel32_Codepage_Conversion" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-CompareStringEx
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/locale.c
|
||||
# |
|
||||
if test "$enable_kernel32_CompareStringEx" -eq 1; then
|
||||
patch_apply kernel32-CompareStringEx/0001-kernel32-Silence-repeated-CompareStringEx-FIXME.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "kernel32: Silence repeated CompareStringEx FIXME.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-CompareString_Length
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -4431,14 +4391,12 @@ fi
|
||||
# Patchset ntdll-SystemHandleInformation
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/nt.c, dlls/ntdll/tests/info.c, server/handle.c, server/protocol.def
|
||||
# | * dlls/ntdll/nt.c, dlls/ntdll/tests/info.c, server/handle.c, server/protocol.def, server/trace.c
|
||||
# |
|
||||
if test "$enable_ntdll_SystemHandleInformation" -eq 1; then
|
||||
patch_apply ntdll-SystemHandleInformation/0001-ntdll-tests-Add-more-tests-for-SystemHandleInformati.patch
|
||||
patch_apply ntdll-SystemHandleInformation/0002-server-Implement-wineserver-call-for-SystemHandleInf.patch
|
||||
patch_apply ntdll-SystemHandleInformation/0001-server-Implement-wineserver-call-for-SystemHandleInf.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "ntdll/tests: Add more tests for SystemHandleInformation.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "server: Implement wineserver call for SystemHandleInformation.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "server: Implement wineserver call for SystemHandleInformation.", 2 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
@ -5007,11 +4965,9 @@ fi
|
||||
# | * dlls/kernel32/tests/process.c, server/console.c, server/process.c, server/process.h, server/snapshot.c, server/thread.c
|
||||
# |
|
||||
if test "$enable_server_Parent_Process" -eq 1; then
|
||||
patch_apply server-Parent_Process/0001-kernel32-tests-Add-test-for-process-object-destructi.patch
|
||||
patch_apply server-Parent_Process/0002-server-Increase-size-of-PID-table-to-512-to-reduce-r.patch
|
||||
patch_apply server-Parent_Process/0003-server-Do-not-hold-reference-on-parent-process.patch
|
||||
patch_apply server-Parent_Process/0001-server-Increase-size-of-PID-table-to-512-to-reduce-r.patch
|
||||
patch_apply server-Parent_Process/0002-server-Do-not-hold-reference-on-parent-process.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "kernel32/tests: Add test for process object destruction.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "server: Increase size of PID table to 512 to reduce risk of collisions.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "server: Do not hold reference on parent process.", 1 },';
|
||||
) >> "$patchlist"
|
||||
@ -5165,21 +5121,6 @@ if test "$enable_setupapi_HSPFILEQ_Check_Type" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset setupapi-SetupDiSelectBestCompatDrv
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#32088] Add stub for setupapi.SetupDiSelectBestCompatDrv
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/setupapi/setupapi.spec, dlls/setupapi/stubs.c
|
||||
# |
|
||||
if test "$enable_setupapi_SetupDiSelectBestCompatDrv" -eq 1; then
|
||||
patch_apply setupapi-SetupDiSelectBestCompatDrv/0001-setupapi-Add-stub-for-SetupDiSelectBestCompatDrv.patch
|
||||
(
|
||||
echo '+ { "Austin English", "setupapi: Add stub for SetupDiSelectBestCompatDrv.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset setupapi-SetupDiSetDeviceInstallParamsW
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
|
@ -1,238 +0,0 @@
|
||||
From 799244b5aa488e397c3744fbf9ce368ec52ab596 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 12 Dec 2015 15:08:40 +0100
|
||||
Subject: kernel32/tests: Add test for process object destruction.
|
||||
|
||||
---
|
||||
dlls/kernel32/tests/process.c | 161 ++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 161 insertions(+)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
|
||||
index f186c94..8e0f0c2 100644
|
||||
--- a/dlls/kernel32/tests/process.c
|
||||
+++ b/dlls/kernel32/tests/process.c
|
||||
@@ -33,11 +33,14 @@
|
||||
#include "wincon.h"
|
||||
#include "winnls.h"
|
||||
#include "winternl.h"
|
||||
+#include "tlhelp32.h"
|
||||
|
||||
#include "wine/test.h"
|
||||
|
||||
/* PROCESS_ALL_ACCESS in Vista+ PSDKs is incompatible with older Windows versions */
|
||||
#define PROCESS_ALL_ACCESS_NT4 (PROCESS_ALL_ACCESS & ~0xf000)
|
||||
+/* THREAD_ALL_ACCESS in Vista+ PSDKs is incompatible with older Windows versions */
|
||||
+#define THREAD_ALL_ACCESS_NT4 (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3ff)
|
||||
|
||||
#define expect_eq_d(expected, actual) \
|
||||
do { \
|
||||
@@ -79,6 +82,12 @@ static BOOL (WINAPI *pGetNumaProcessorNode)(UCHAR, PUCHAR);
|
||||
static NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG);
|
||||
static BOOL (WINAPI *pProcessIdToSessionId)(DWORD,DWORD*);
|
||||
static DWORD (WINAPI *pWTSGetActiveConsoleSessionId)(void);
|
||||
+static HANDLE (WINAPI *pCreateToolhelp32Snapshot)(DWORD, DWORD);
|
||||
+static BOOL (WINAPI *pProcess32First)(HANDLE, PROCESSENTRY32*);
|
||||
+static BOOL (WINAPI *pProcess32Next)(HANDLE, PROCESSENTRY32*);
|
||||
+static BOOL (WINAPI *pThread32First)(HANDLE, THREADENTRY32*);
|
||||
+static BOOL (WINAPI *pThread32Next)(HANDLE, THREADENTRY32*);
|
||||
+
|
||||
|
||||
/* ############################### */
|
||||
static char base[MAX_PATH];
|
||||
@@ -237,6 +246,12 @@ static BOOL init(void)
|
||||
pGetNumaProcessorNode = (void *)GetProcAddress(hkernel32, "GetNumaProcessorNode");
|
||||
pProcessIdToSessionId = (void *)GetProcAddress(hkernel32, "ProcessIdToSessionId");
|
||||
pWTSGetActiveConsoleSessionId = (void *)GetProcAddress(hkernel32, "WTSGetActiveConsoleSessionId");
|
||||
+ pCreateToolhelp32Snapshot = (void *)GetProcAddress(hkernel32, "CreateToolhelp32Snapshot");
|
||||
+ pProcess32First = (void *)GetProcAddress(hkernel32, "Process32First");
|
||||
+ pProcess32Next = (void *)GetProcAddress(hkernel32, "Process32Next");
|
||||
+ pThread32First = (void *)GetProcAddress(hkernel32, "Thread32First");
|
||||
+ pThread32Next = (void *)GetProcAddress(hkernel32, "Thread32Next");
|
||||
+
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -287,6 +302,8 @@ static void doChild(const char* file, const char* option)
|
||||
char bufA[MAX_PATH];
|
||||
WCHAR bufW[MAX_PATH];
|
||||
HANDLE hFile = CreateFileA(file, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
|
||||
+ HANDLE snapshot;
|
||||
+ PROCESSENTRY32 pe;
|
||||
BOOL ret;
|
||||
|
||||
if (hFile == INVALID_HANDLE_VALUE) return;
|
||||
@@ -341,6 +358,26 @@ static void doChild(const char* file, const char* option)
|
||||
childPrintf(hFile, "CommandLineA=%s\n", encodeA(GetCommandLineA()));
|
||||
childPrintf(hFile, "CommandLineW=%s\n\n", encodeW(GetCommandLineW()));
|
||||
|
||||
+ /* output toolhelp information */
|
||||
+ snapshot = pCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
||||
+ ok(snapshot != INVALID_HANDLE_VALUE, "CreateToolhelp32Snapshot failed %u\n", GetLastError());
|
||||
+ memset(&pe, 0, sizeof(pe));
|
||||
+ pe.dwSize = sizeof(pe);
|
||||
+ if (pProcess32First(snapshot, &pe))
|
||||
+ {
|
||||
+ while (pe.th32ProcessID != GetCurrentProcessId())
|
||||
+ if (!pProcess32Next(snapshot, &pe)) break;
|
||||
+ }
|
||||
+ CloseHandle(snapshot);
|
||||
+ ok(pe.th32ProcessID == GetCurrentProcessId(), "failed to find current process in snapshot\n");
|
||||
+ childPrintf(hFile,
|
||||
+ "[Toolhelp]\ncntUsage=%u\nth32DefaultHeapID=%lu\n"
|
||||
+ "th32ModuleID=%u\ncntThreads=%u\nth32ParentProcessID=%u\n"
|
||||
+ "pcPriClassBase=%u\ndwFlags=%u\nszExeFile=%s\n\n",
|
||||
+ pe.cntUsage, pe.th32DefaultHeapID, pe.th32ModuleID,
|
||||
+ pe.cntThreads, pe.th32ParentProcessID, pe.pcPriClassBase,
|
||||
+ pe.dwFlags, encodeA(pe.szExeFile));
|
||||
+
|
||||
/* output of environment (Ansi) */
|
||||
ptrA_save = ptrA = GetEnvironmentStringsA();
|
||||
if (ptrA)
|
||||
@@ -1065,6 +1102,112 @@ static void test_Directory(void)
|
||||
ok(!TerminateProcess(info.hProcess, 0), "Child process should not exist\n");
|
||||
}
|
||||
|
||||
+static void test_Toolhelp(void)
|
||||
+{
|
||||
+ char buffer[MAX_PATH];
|
||||
+ STARTUPINFOA startup;
|
||||
+ PROCESS_INFORMATION info;
|
||||
+ HANDLE process, thread, snapshot;
|
||||
+ PROCESSENTRY32 pe;
|
||||
+ THREADENTRY32 te;
|
||||
+ DWORD ret;
|
||||
+ int i;
|
||||
+
|
||||
+ memset(&startup, 0, sizeof(startup));
|
||||
+ startup.cb = sizeof(startup);
|
||||
+ startup.dwFlags = STARTF_USESHOWWINDOW;
|
||||
+ startup.wShowWindow = SW_SHOWNORMAL;
|
||||
+
|
||||
+ get_file_name(resfile);
|
||||
+ sprintf(buffer, "\"%s\" tests/process.c dump \"%s\"", selfname, resfile);
|
||||
+ ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess failed\n");
|
||||
+ ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n");
|
||||
+ CloseHandle(info.hProcess);
|
||||
+ CloseHandle(info.hThread);
|
||||
+
|
||||
+ WritePrivateProfileStringA(NULL, NULL, NULL, resfile);
|
||||
+ okChildInt("Toolhelp", "cntUsage", 0);
|
||||
+ okChildInt("Toolhelp", "th32DefaultHeapID", 0);
|
||||
+ okChildInt("Toolhelp", "th32ModuleID", 0);
|
||||
+ okChildInt("Toolhelp", "th32ParentProcessID", GetCurrentProcessId());
|
||||
+ todo_wine okChildInt("Toolhelp", "pcPriClassBase", 8);
|
||||
+ okChildInt("Toolhelp", "dwFlags", 0);
|
||||
+
|
||||
+ release_memory();
|
||||
+ DeleteFileA(resfile);
|
||||
+
|
||||
+ get_file_name(resfile);
|
||||
+ sprintf(buffer, "\"%s\" tests/process.c nested \"%s\"", selfname, resfile);
|
||||
+ ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess failed\n");
|
||||
+ ok(WaitForSingleObject(info.hProcess, 30000) == WAIT_OBJECT_0, "Child process termination\n");
|
||||
+
|
||||
+ process = OpenProcess(PROCESS_ALL_ACCESS_NT4, FALSE, info.dwProcessId);
|
||||
+ ok(process != NULL, "OpenProcess failed %u\n", GetLastError());
|
||||
+ CloseHandle(process);
|
||||
+
|
||||
+ CloseHandle(info.hProcess);
|
||||
+ CloseHandle(info.hThread);
|
||||
+
|
||||
+ for (i = 0; i < 20; i++)
|
||||
+ {
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ process = OpenProcess(PROCESS_ALL_ACCESS_NT4, FALSE, info.dwProcessId);
|
||||
+ ok(process || GetLastError() == ERROR_INVALID_PARAMETER, "OpenProcess failed %u\n", GetLastError());
|
||||
+ if (!process) break;
|
||||
+ CloseHandle(process);
|
||||
+ Sleep(100);
|
||||
+ }
|
||||
+ /* The following test fails randomly on some Windows versions */
|
||||
+ todo_wine ok(i < 20 || broken(i == 20), "process object not released\n");
|
||||
+
|
||||
+ snapshot = pCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
||||
+ ok(snapshot != INVALID_HANDLE_VALUE, "CreateToolhelp32Snapshot failed %u\n", GetLastError());
|
||||
+ memset(&pe, 0, sizeof(pe));
|
||||
+ pe.dwSize = sizeof(pe);
|
||||
+ if (pProcess32First(snapshot, &pe))
|
||||
+ {
|
||||
+ while (pe.th32ParentProcessID != info.dwProcessId)
|
||||
+ if (!pProcess32Next(snapshot, &pe)) break;
|
||||
+ }
|
||||
+ CloseHandle(snapshot);
|
||||
+ ok(pe.th32ParentProcessID == info.dwProcessId, "failed to find nested child process\n");
|
||||
+
|
||||
+ process = OpenProcess(PROCESS_ALL_ACCESS_NT4, FALSE, pe.th32ProcessID);
|
||||
+ ok(process != NULL, "OpenProcess failed %u\n", GetLastError());
|
||||
+
|
||||
+ snapshot = pCreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
|
||||
+ ok(snapshot != INVALID_HANDLE_VALUE, "CreateToolhelp32Snapshot failed %u\n", GetLastError());
|
||||
+ memset(&te, 0, sizeof(te));
|
||||
+ te.dwSize = sizeof(te);
|
||||
+ if (pThread32First(snapshot, &te))
|
||||
+ {
|
||||
+ while (te.th32OwnerProcessID != pe.th32ProcessID)
|
||||
+ if (!pThread32Next(snapshot, &te)) break;
|
||||
+ }
|
||||
+ CloseHandle(snapshot);
|
||||
+ ok(te.th32OwnerProcessID == pe.th32ProcessID, "failed to find suspended thread\n");
|
||||
+
|
||||
+ thread = OpenThread(THREAD_ALL_ACCESS_NT4, FALSE, te.th32ThreadID);
|
||||
+ ok(thread != NULL, "OpenThread failed %u\n", GetLastError());
|
||||
+ ret = ResumeThread(thread);
|
||||
+ ok(ret == 1, "expected 1, got %u\n", ret);
|
||||
+ CloseHandle(thread);
|
||||
+
|
||||
+ ok(WaitForSingleObject(process, 30000) == WAIT_OBJECT_0, "Child process termination\n");
|
||||
+ CloseHandle(process);
|
||||
+
|
||||
+ WritePrivateProfileStringA(NULL, NULL, NULL, resfile);
|
||||
+ okChildInt("Toolhelp", "cntUsage", 0);
|
||||
+ okChildInt("Toolhelp", "th32DefaultHeapID", 0);
|
||||
+ okChildInt("Toolhelp", "th32ModuleID", 0);
|
||||
+ okChildInt("Toolhelp", "th32ParentProcessID", info.dwProcessId);
|
||||
+ todo_wine okChildInt("Toolhelp", "pcPriClassBase", 8);
|
||||
+ okChildInt("Toolhelp", "dwFlags", 0);
|
||||
+
|
||||
+ release_memory();
|
||||
+ DeleteFileA(resfile);
|
||||
+}
|
||||
+
|
||||
static BOOL is_str_env_drive_dir(const char* str)
|
||||
{
|
||||
return str[0] == '=' && str[1] >= 'A' && str[1] <= 'Z' && str[2] == ':' &&
|
||||
@@ -2989,6 +3132,23 @@ START_TEST(process)
|
||||
Sleep(100);
|
||||
return;
|
||||
}
|
||||
+ else if (!strcmp(myARGV[2], "nested") && myARGC >= 4)
|
||||
+ {
|
||||
+ char buffer[MAX_PATH];
|
||||
+ STARTUPINFOA startup;
|
||||
+ PROCESS_INFORMATION info;
|
||||
+
|
||||
+ memset(&startup, 0, sizeof(startup));
|
||||
+ startup.cb = sizeof(startup);
|
||||
+ startup.dwFlags = STARTF_USESHOWWINDOW;
|
||||
+ startup.wShowWindow = SW_SHOWNORMAL;
|
||||
+
|
||||
+ sprintf(buffer, "\"%s\" tests/process.c dump \"%s\"", selfname, myARGV[3]);
|
||||
+ ok(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &startup, &info), "CreateProcess\n");
|
||||
+ CloseHandle(info.hProcess);
|
||||
+ CloseHandle(info.hThread);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
ok(0, "Unexpected command %s\n", myARGV[2]);
|
||||
return;
|
||||
@@ -2998,6 +3158,7 @@ START_TEST(process)
|
||||
test_Startup();
|
||||
test_CommandLine();
|
||||
test_Directory();
|
||||
+ test_Toolhelp();
|
||||
test_Environment();
|
||||
test_SuspendFlag();
|
||||
test_DebuggingFlag();
|
||||
--
|
||||
2.6.2
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 8d0b9020200ee933ed02fae3235fee2ade651394 Mon Sep 17 00:00:00 2001
|
||||
From dbb9762fb427305959d824655c6e7691888aad67 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Thu, 10 Dec 2015 05:55:41 +0100
|
||||
Subject: server: Do not hold reference on parent process.
|
||||
@ -13,13 +13,13 @@ Subject: server: Do not hold reference on parent process.
|
||||
6 files changed, 8 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
|
||||
index 8e0f0c2..9c07d09 100644
|
||||
index b88db45..b845b2e 100644
|
||||
--- a/dlls/kernel32/tests/process.c
|
||||
+++ b/dlls/kernel32/tests/process.c
|
||||
@@ -1158,7 +1158,7 @@ static void test_Toolhelp(void)
|
||||
Sleep(100);
|
||||
}
|
||||
/* The following test fails randomly on some Windows versions */
|
||||
/* The following test fails randomly on some Windows versions, but Gothic 2 depends on it */
|
||||
- todo_wine ok(i < 20 || broken(i == 20), "process object not released\n");
|
||||
+ ok(i < 20 || broken(i == 20), "process object not released\n");
|
||||
|
||||
@ -45,7 +45,7 @@ index a57b2fe..3d0e0e0 100644
|
||||
break;
|
||||
case 0xffffffff:
|
||||
diff --git a/server/process.c b/server/process.c
|
||||
index 1b41037..8ecc32e 100644
|
||||
index cef491a..12de41d 100644
|
||||
--- a/server/process.c
|
||||
+++ b/server/process.c
|
||||
@@ -504,7 +504,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
|
||||
@ -123,5 +123,5 @@ index bad2231..176cf44 100644
|
||||
else
|
||||
set_thread_affinity( current, current->affinity );
|
||||
--
|
||||
2.6.2
|
||||
2.6.4
|
||||
|
@ -1,47 +0,0 @@
|
||||
From 0c804c1f6c491384e6b48d2569d130468c6fe28d Mon Sep 17 00:00:00 2001
|
||||
From: Austin English <austinenglish@gmail.com>
|
||||
Date: Sat, 4 Apr 2015 22:43:43 +0200
|
||||
Subject: setupapi: Add stub for SetupDiSelectBestCompatDrv.
|
||||
|
||||
---
|
||||
dlls/setupapi/setupapi.spec | 1 +
|
||||
dlls/setupapi/stubs.c | 11 +++++++++++
|
||||
2 files changed, 12 insertions(+)
|
||||
|
||||
diff --git a/dlls/setupapi/setupapi.spec b/dlls/setupapi/setupapi.spec
|
||||
index c1dbed5..4486994 100644
|
||||
--- a/dlls/setupapi/setupapi.spec
|
||||
+++ b/dlls/setupapi/setupapi.spec
|
||||
@@ -381,6 +381,7 @@
|
||||
@ stdcall SetupDiRegisterDeviceInfo(ptr ptr long ptr ptr ptr)
|
||||
@ stdcall SetupDiRemoveDevice(ptr ptr)
|
||||
@ stub SetupDiRemoveDeviceInterface
|
||||
+@ stdcall SetupDiSelectBestCompatDrv(ptr ptr)
|
||||
@ stub SetupDiSelectDevice
|
||||
@ stub SetupDiSelectOEMDrv
|
||||
@ stdcall SetupDiSetClassInstallParamsA(ptr ptr ptr long)
|
||||
diff --git a/dlls/setupapi/stubs.c b/dlls/setupapi/stubs.c
|
||||
index a57f5fe..ffc766b 100644
|
||||
--- a/dlls/setupapi/stubs.c
|
||||
+++ b/dlls/setupapi/stubs.c
|
||||
@@ -594,6 +594,17 @@ BOOL WINAPI SetupDiLoadClassIcon(const GUID *ClassGuid, HICON *LargeIcon, PINT M
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
+ * SetupDiSelectBestCompatDrv (SETUPAPI.@)
|
||||
+ */
|
||||
+BOOL WINAPI SetupDiSelectBestCompatDrv(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData)
|
||||
+{
|
||||
+ FIXME(": stub %p, %p\n", DeviceInfoSet, DeviceInfoData);
|
||||
+
|
||||
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+/***********************************************************************
|
||||
* SetupDiSetSelectedDevice (SETUPAPI.@)
|
||||
*/
|
||||
BOOL WINAPI SetupDiSetSelectedDevice(HDEVINFO SetupDiSetSelectedDevice, PSP_DEVINFO_DATA DeviceInfoData)
|
||||
--
|
||||
2.3.3
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [32088] Add stub for setupapi.SetupDiSelectBestCompatDrv
|
@ -2,6 +2,10 @@ wine-staging (1.9.0) UNRELEASED; urgency=low
|
||||
* Removed patch to add a stub driver for tdi.sys (accepted upstream).
|
||||
* Removed patch to implement support for ws2_32.dll.WSAPoll (accepted
|
||||
upstream).
|
||||
* Removed patch for setupapi.SetupDiSelectBestCompatDrv stub implementation
|
||||
(accepted upstream).
|
||||
* Removed patch for advapi32.RegCreateKeyTransacted[A/W] stubs (accepted
|
||||
upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Wed, 23 Dec 2015 03:11:26 +0100
|
||||
|
||||
wine-staging (1.8) unstable; urgency=low
|
||||
|
Loading…
Reference in New Issue
Block a user