Needed for IE11.
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- v4: - Don't use static sized buffer. --- dlls/kernel32/Makefile.in | 1 + dlls/kernel32/kernel32.spec | 2 +- dlls/kernel32/security.c | 53 +++++++++++++++++++++++++++++++++++++ include/namespaceapi.h | 2 ++ 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 dlls/kernel32/security.c
diff --git a/dlls/kernel32/Makefile.in b/dlls/kernel32/Makefile.in index 7e68a950b71..bda8d03e90c 100644 --- a/dlls/kernel32/Makefile.in +++ b/dlls/kernel32/Makefile.in @@ -23,6 +23,7 @@ C_SRCS = \ process.c \ profile.c \ resource.c \ + security.c \ sync.c \ tape.c \ thread.c \ diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 818e7d87a2f..cb994a8ce19 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -266,7 +266,7 @@ @ stdcall CopyLZFile(long long) LZCopy @ stdcall CreateActCtxA(ptr) @ stdcall -import CreateActCtxW(ptr) -# @ stub CreateBoundaryDescriptorA +@ stdcall CreateBoundaryDescriptorA(str long) @ stdcall -import CreateBoundaryDescriptorW(wstr long) @ stdcall -import CreateConsoleScreenBuffer(long long ptr long ptr) @ stdcall -import CreateDirectoryA(str ptr) diff --git a/dlls/kernel32/security.c b/dlls/kernel32/security.c new file mode 100644 index 00000000000..dc8c8e58d7d --- /dev/null +++ b/dlls/kernel32/security.c @@ -0,0 +1,53 @@ +/* + * Win32 security functions + * + * Copyright (C) 2022 Mohamad Al-Jaf + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "winnls.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(security); + +/****************************************************************************** + * CreateBoundaryDescriptorA (KERNEL32.@) + */ +HANDLE WINAPI CreateBoundaryDescriptorA( LPCSTR name, ULONG flags ) +{ + DWORD len; + HANDLE ret; + LPWSTR str = NULL; + + TRACE( "%s %d\n", debugstr_a(name), flags ); + + if(name) + { + len = MultiByteToWideChar( CP_ACP, 0, name, -1, NULL, 0 ); + str = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, name, -1, str, len ); + } + + ret = CreateBoundaryDescriptorW( str, flags ); + + HeapFree( GetProcessHeap(), 0, str ); + return ret; +} diff --git a/include/namespaceapi.h b/include/namespaceapi.h index 9446806f82e..f219a2a7488 100644 --- a/include/namespaceapi.h +++ b/include/namespaceapi.h @@ -27,7 +27,9 @@ extern "C" {
WINBASEAPI BOOL WINAPI AddSIDToBoundaryDescriptor(HANDLE*,PSID); WINBASEAPI BOOLEAN WINAPI ClosePrivateNamespace(HANDLE,ULONG); +WINBASEAPI HANDLE WINAPI CreateBoundaryDescriptorA(LPCSTR,ULONG); WINBASEAPI HANDLE WINAPI CreateBoundaryDescriptorW(LPCWSTR,ULONG); +#define CreateBoundaryDescriptor WINELIB_NAME_AW(CreateBoundaryDescriptor) WINBASEAPI HANDLE WINAPI CreatePrivateNamespaceW(LPSECURITY_ATTRIBUTES,LPVOID,LPCWSTR); WINBASEAPI void WINAPI DeleteBoundaryDescriptor(HANDLE); WINBASEAPI HANDLE WINAPI OpenPrivateNamespaceW(LPVOID,LPCWSTR);
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/kernel32/kernel32.spec | 2 +- dlls/kernelbase/kernelbase.spec | 2 +- dlls/kernelbase/security.c | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index cb994a8ce19..344df24382a 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -309,7 +309,7 @@ # @ stub CreateNlsSecurityDescriptor @ stdcall -import CreatePipe(ptr ptr ptr long) # @ stub CreatePrivateNamespaceA -# @ stub CreatePrivateNamespaceW +@ stdcall -import CreatePrivateNamespaceW(ptr ptr wstr) @ stdcall -import CreateProcessA(str str ptr ptr long long ptr str ptr ptr) @ stdcall -import CreateProcessAsUserA(long str str ptr ptr long long ptr str ptr ptr) @ stdcall -import CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index c1175af2f9f..3692117a5cc 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -204,7 +204,7 @@ @ stdcall CreateMutexW(ptr long wstr) @ stdcall CreateNamedPipeW(wstr long long long long long long ptr) @ stdcall CreatePipe(ptr ptr ptr long) -# @ stub CreatePrivateNamespaceW +@ stdcall CreatePrivateNamespaceW(ptr ptr wstr) @ stdcall CreatePrivateObjectSecurity(ptr ptr ptr long long ptr) @ stdcall CreatePrivateObjectSecurityEx(ptr ptr ptr ptr long long long ptr) @ stdcall CreatePrivateObjectSecurityWithMultipleInheritance(ptr ptr ptr ptr long long long long ptr) diff --git a/dlls/kernelbase/security.c b/dlls/kernelbase/security.c index 26878982b6f..a20b20f32a8 100644 --- a/dlls/kernelbase/security.c +++ b/dlls/kernelbase/security.c @@ -931,6 +931,15 @@ HANDLE WINAPI CreateBoundaryDescriptorW( LPCWSTR name, ULONG flags ) return NULL; }
+/****************************************************************************** + * CreatePrivateNamespaceW (kernelbase.@) + */ +HANDLE WINAPI CreatePrivateNamespaceW( LPSECURITY_ATTRIBUTES attr, LPVOID descr, LPCWSTR prefix ) +{ + FIXME( "%p %p %s - stub\n", attr, descr, debugstr_w(prefix) ); + return NULL; +} + /****************************************************************************** * CreatePrivateObjectSecurity (kernelbase.@) */
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/kernel32/kernel32.spec | 2 +- dlls/kernelbase/kernelbase.spec | 2 +- dlls/kernelbase/security.c | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 344df24382a..5fcd06fe802 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -1136,7 +1136,7 @@ @ stdcall OpenMutexA(long long str) @ stdcall -import OpenMutexW(long long wstr) # @ stub OpenPrivateNamespaceA -# @ stub OpenPrivateNamespaceW +@ stdcall -import OpenPrivateNamespaceW(ptr wstr) @ stdcall -import OpenProcess(long long long) @ stdcall -import OpenProcessToken(long long ptr) @ stdcall OpenProfileUserMapping() diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index 3692117a5cc..4444e7da5af 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -1020,7 +1020,7 @@ @ stdcall OpenMutexW(long long wstr) # @ stub OpenPackageInfoByFullName # @ stub OpenPackageInfoByFullNameForUser -# @ stub OpenPrivateNamespaceW +@ stdcall OpenPrivateNamespaceW(ptr wstr) @ stdcall OpenProcess(long long long) @ stdcall OpenProcessToken(long long ptr) @ stub OpenRegKey diff --git a/dlls/kernelbase/security.c b/dlls/kernelbase/security.c index a20b20f32a8..70fbe435475 100644 --- a/dlls/kernelbase/security.c +++ b/dlls/kernelbase/security.c @@ -1200,6 +1200,15 @@ BOOL WINAPI MakeSelfRelativeSD( PSECURITY_DESCRIPTOR abs_descr, PSECURITY_DESCRI return set_ntstatus( RtlMakeSelfRelativeSD( abs_descr, rel_descr, len )); }
+/****************************************************************************** + * OpenPrivateNamespaceW (kernelbase.@) + */ +HANDLE WINAPI OpenPrivateNamespaceW( LPVOID descr, LPCWSTR prefix ) +{ + FIXME( "%p %s - stub\n", descr, debugstr_w(prefix) ); + return NULL; +} + /****************************************************************************** * SetFileSecurityW (kernelbase.@) */
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=109427
Your paranoid android.
=== debian11 (64 bit WoW report) ===
kernel32: change.c:309: Test failed: should be ready change.c:339: Test failed: should be ready
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/kernel32/kernel32.spec | 2 +- dlls/kernel32/security.c | 24 ++++++++++++++++++++++++ include/namespaceapi.h | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 5fcd06fe802..0598a87933f 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -308,7 +308,7 @@ @ stdcall -import CreateNamedPipeW(wstr long long long long long long ptr) # @ stub CreateNlsSecurityDescriptor @ stdcall -import CreatePipe(ptr ptr ptr long) -# @ stub CreatePrivateNamespaceA +@ stdcall CreatePrivateNamespaceA(ptr ptr str) @ stdcall -import CreatePrivateNamespaceW(ptr ptr wstr) @ stdcall -import CreateProcessA(str str ptr ptr long long ptr str ptr ptr) @ stdcall -import CreateProcessAsUserA(long str str ptr ptr long long ptr str ptr ptr) diff --git a/dlls/kernel32/security.c b/dlls/kernel32/security.c index dc8c8e58d7d..ad74cd61585 100644 --- a/dlls/kernel32/security.c +++ b/dlls/kernel32/security.c @@ -51,3 +51,27 @@ HANDLE WINAPI CreateBoundaryDescriptorA( LPCSTR name, ULONG flags ) HeapFree( GetProcessHeap(), 0, str ); return ret; } + +/****************************************************************************** + * CreatePrivateNamespaceA (KERNEL32.@) + */ +HANDLE WINAPI CreatePrivateNamespaceA( LPSECURITY_ATTRIBUTES attr, LPVOID descr, LPCSTR prefix ) +{ + DWORD len; + HANDLE ret; + LPWSTR str = NULL; + + TRACE( "%p %p %s\n", attr, descr, debugstr_a(prefix) ); + + if(prefix) + { + len = MultiByteToWideChar( CP_ACP, 0, prefix, -1, NULL, 0 ); + str = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, prefix, -1, str, len ); + } + + ret = CreatePrivateNamespaceW( attr, descr, str ); + + HeapFree( GetProcessHeap(), 0, str ); + return ret; +} diff --git a/include/namespaceapi.h b/include/namespaceapi.h index f219a2a7488..6b3198b67c6 100644 --- a/include/namespaceapi.h +++ b/include/namespaceapi.h @@ -30,7 +30,9 @@ WINBASEAPI BOOLEAN WINAPI ClosePrivateNamespace(HANDLE,ULONG); WINBASEAPI HANDLE WINAPI CreateBoundaryDescriptorA(LPCSTR,ULONG); WINBASEAPI HANDLE WINAPI CreateBoundaryDescriptorW(LPCWSTR,ULONG); #define CreateBoundaryDescriptor WINELIB_NAME_AW(CreateBoundaryDescriptor) +WINBASEAPI HANDLE WINAPI CreatePrivateNamespaceA(LPSECURITY_ATTRIBUTES,LPVOID,LPCSTR); WINBASEAPI HANDLE WINAPI CreatePrivateNamespaceW(LPSECURITY_ATTRIBUTES,LPVOID,LPCWSTR); +#define CreatePrivateNamespace WINELIB_NAME_AW(CreatePrivateNamespace) WINBASEAPI void WINAPI DeleteBoundaryDescriptor(HANDLE); WINBASEAPI HANDLE WINAPI OpenPrivateNamespaceW(LPVOID,LPCWSTR);
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/kernel32/kernel32.spec | 2 +- dlls/kernel32/security.c | 24 ++++++++++++++++++++++++ include/namespaceapi.h | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 0598a87933f..ed5a7edfd6c 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -1135,7 +1135,7 @@ @ stdcall OpenJobObjectW(long long wstr) @ stdcall OpenMutexA(long long str) @ stdcall -import OpenMutexW(long long wstr) -# @ stub OpenPrivateNamespaceA +@ stdcall OpenPrivateNamespaceA(ptr str) @ stdcall -import OpenPrivateNamespaceW(ptr wstr) @ stdcall -import OpenProcess(long long long) @ stdcall -import OpenProcessToken(long long ptr) diff --git a/dlls/kernel32/security.c b/dlls/kernel32/security.c index ad74cd61585..39a54677154 100644 --- a/dlls/kernel32/security.c +++ b/dlls/kernel32/security.c @@ -75,3 +75,27 @@ HANDLE WINAPI CreatePrivateNamespaceA( LPSECURITY_ATTRIBUTES attr, LPVOID descr, HeapFree( GetProcessHeap(), 0, str ); return ret; } + +/****************************************************************************** + * OpenPrivateNamespaceA (KERNEL32.@) + */ +HANDLE WINAPI OpenPrivateNamespaceA( LPVOID descr, LPCSTR prefix ) +{ + DWORD len; + HANDLE ret; + LPWSTR str = NULL; + + TRACE( "%p %s\n", descr, debugstr_a(prefix) ); + + if(prefix) + { + len = MultiByteToWideChar( CP_ACP, 0, prefix, -1, NULL, 0 ); + str = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, prefix, -1, str, len ); + } + + ret = OpenPrivateNamespaceW( descr, str ); + + HeapFree( GetProcessHeap(), 0, str ); + return ret; +} diff --git a/include/namespaceapi.h b/include/namespaceapi.h index 6b3198b67c6..2210edea17a 100644 --- a/include/namespaceapi.h +++ b/include/namespaceapi.h @@ -34,7 +34,9 @@ WINBASEAPI HANDLE WINAPI CreatePrivateNamespaceA(LPSECURITY_ATTRIBUTES,LPVOID,L WINBASEAPI HANDLE WINAPI CreatePrivateNamespaceW(LPSECURITY_ATTRIBUTES,LPVOID,LPCWSTR); #define CreatePrivateNamespace WINELIB_NAME_AW(CreatePrivateNamespace) WINBASEAPI void WINAPI DeleteBoundaryDescriptor(HANDLE); +WINBASEAPI HANDLE WINAPI OpenPrivateNamespaceA(LPVOID,LPCSTR); WINBASEAPI HANDLE WINAPI OpenPrivateNamespaceW(LPVOID,LPCWSTR); +#define OpenPrivateNamespace WINELIB_NAME_AW(OpenPrivateNamespace)
#ifdef __cplusplus }
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/kernel32/kernel32.spec | 2 +- dlls/kernel32/security.c | 9 +++++++++ include/winbase.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index ed5a7edfd6c..4ae398b9b16 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -141,7 +141,7 @@ @ stdcall -import AddConsoleAliasA(str str str) @ stdcall -import AddConsoleAliasW(wstr wstr wstr) @ stdcall -import AddDllDirectory(wstr) -# @ stub AddIntegrityLabelToBoundaryDescriptor +@ stdcall AddIntegrityLabelToBoundaryDescriptor(ptr ptr) # @ stub AddLocalAlternateComputerNameA # @ stub AddLocalAlternateComputerNameW @ stdcall -import AddRefActCtx(ptr) diff --git a/dlls/kernel32/security.c b/dlls/kernel32/security.c index 39a54677154..4873291d569 100644 --- a/dlls/kernel32/security.c +++ b/dlls/kernel32/security.c @@ -28,6 +28,15 @@
WINE_DEFAULT_DEBUG_CHANNEL(security);
+/****************************************************************************** + * AddIntegrityLabelToBoundaryDescriptor (KERNEL32.@) + */ +BOOL WINAPI AddIntegrityLabelToBoundaryDescriptor( HANDLE *descr, PSID label ) +{ + FIXME( "(%p %p) - stub\n", descr, label ); + return TRUE; +} + /****************************************************************************** * CreateBoundaryDescriptorA (KERNEL32.@) */ diff --git a/include/winbase.h b/include/winbase.h index a0c62d710b9..f8064e3ac1c 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1782,6 +1782,7 @@ WINADVAPI BOOL WINAPI AccessCheckAndAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LP WINADVAPI BOOL WINAPI AccessCheckByType(PSECURITY_DESCRIPTOR,PSID,HANDLE,DWORD,POBJECT_TYPE_LIST,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL); WINBASEAPI VOID WINAPI AcquireSRWLockExclusive(PSRWLOCK); WINBASEAPI VOID WINAPI AcquireSRWLockShared(PSRWLOCK); +WINBASEAPI BOOL WINAPI AddIntegrityLabelToBoundaryDescriptor(HANDLE*,PSID); WINADVAPI BOOL WINAPI AdjustTokenPrivileges(HANDLE,BOOL,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD); WINADVAPI BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *); WINADVAPI BOOL WINAPI AllocateLocallyUniqueId(PLUID);
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- v4: - Individually test GetLastError(). - Increase overload size from 5 to 100. --- dlls/kernel32/tests/Makefile.in | 1 + dlls/kernel32/tests/security.c | 73 +++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 dlls/kernel32/tests/security.c
diff --git a/dlls/kernel32/tests/Makefile.in b/dlls/kernel32/tests/Makefile.in index db106ab9fc9..517a9e27f09 100644 --- a/dlls/kernel32/tests/Makefile.in +++ b/dlls/kernel32/tests/Makefile.in @@ -31,6 +31,7 @@ SOURCES = \ profile.c \ resource.c \ resource.rc \ + security.c \ sync.c \ thread.c \ time.c \ diff --git a/dlls/kernel32/tests/security.c b/dlls/kernel32/tests/security.c new file mode 100644 index 00000000000..e785bed33e0 --- /dev/null +++ b/dlls/kernel32/tests/security.c @@ -0,0 +1,73 @@ +/* + * Unit tests for security functions + * + * Copyright (c) 2022 Mohamad Al-Jaf + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "wine/test.h" + +static HMODULE hdll; +static HANDLE (WINAPI *pCreateBoundaryDescriptorA)(LPCSTR,ULONG); + +static BOOL init_function_pointers(void) +{ + hdll = GetModuleHandleA("kernel32.dll"); + + if (hdll) + { + pCreateBoundaryDescriptorA = (void *)GetProcAddress(hdll, "CreateBoundaryDescriptorA"); + return TRUE; + } + + return FALSE; +} + +void test_CreateBoundaryDescriptorA(void) +{ + DWORD error; + HANDLE res; + CHAR buffer[MAX_PATH] = "test"; + CHAR overload[MAX_PATH + 100] = ""; + + for (int i = 0; i < (MAX_PATH + 100); i++) + overload[i] = 't'; + + res = pCreateBoundaryDescriptorA(NULL, 0); + ok(res == NULL, "expected NULL pointer\n"); + + res = pCreateBoundaryDescriptorA(buffer, 0); + todo_wine + ok(res != NULL, "expected HANDLE to boundary descriptor\n"); + + SetLastError(0xdeadbeef); + res = pCreateBoundaryDescriptorA(overload, 0); + error = GetLastError(); + ok(error != ERROR_FILENAME_EXCED_RANGE, "expected no MAX_PATH limit in buffer\n"); + todo_wine + ok(res != NULL, "expected HANDLE to boundary descriptor\n"); +} + +START_TEST(security) +{ + if (init_function_pointers()) + { + test_CreateBoundaryDescriptorA(); + FreeLibrary(hdll); + } + else + skip("could not load kernel32.dll\n"); +}
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=109431
Your paranoid android.
=== w8adm (32 bit report) ===
kernel32: comm.c:1586: Test failed: comm.c:1523: SetCommMask changed
=== w10pro64 (32 bit report) ===
kernel32: comm.c:859: Test failed: WaitCommEvent failed with a timeout comm.c:880: Test failed: WaitCommEvent error 0 comm.c:881: Test failed: WaitCommEvent: expected EV_TXEMPTY, got 0 comm.c:886: Test failed: WaitCommEvent used 1516 ms for waiting
=== w7u_2qxl (32 bit report) ===
kernel32: debugger.c:1027: Test failed: ole32.dll was not reported
=== w7u_adm (32 bit report) ===
kernel32: debugger.c:1027: Test failed: ole32.dll was not reported
=== w7u_el (32 bit report) ===
kernel32: debugger.c:1027: Test failed: ole32.dll was not reported
=== w8 (32 bit report) ===
kernel32: debugger.c:2136: Test failed: no debug port debugger.c:2140: Test failed: NtSetInformationDebugObject failed c0000008 debugger.c:2144: Test failed: NtSetInformationDebugObject failed c0000008
=== w1064_tsign (32 bit report) ===
kernel32: debugger.c:155: Test failed: unable to open 'C:\Users\winetest\AppData\Local\Temp\wt5C58.tmp' debugger.c:155: Test failed: failed to open: C:\Users\winetest\AppData\Local\Temp\wt5C58.tmp debugger.c:676: Test failed: the child and debugged pids don't match: 6208 != 5572
=== w10pro64 (32 bit report) ===
kernel32: debugger.c:681: Test failed: debugger reported 7 failures
=== w1064_tsign (64 bit report) ===
kernel32: debugger.c:155: Test failed: unable to open 'C:\Users\winetest\AppData\Local\Temp\wt5CB6.tmp' debugger.c:155: Test failed: failed to open: C:\Users\winetest\AppData\Local\Temp\wt5CB6.tmp debugger.c:676: Test failed: the child and debugged pids don't match: 3548 != 5740
=== w1064_tsign (32 bit report) ===
kernel32: loader.c:2834: Test failed: attached thread count should be 2 loader.c:720: Test failed: 1224: wrong status c000011b/c000007b
=== w10pro64 (64 bit report) ===
kernel32: loader.c:720: Test failed: 1219: wrong status c000011b/c0000130 loader.c:720: Test failed: 1224: wrong status c000011b/c000007b loader.c:720: Test failed: 1229: wrong status c000011b/c000007b loader.c:720: Test failed: 1234: wrong status c000011b/c000007b loader.c:720: Test failed: 1239: wrong status c000011b/c000007b loader.c:720: Test failed: 1244: wrong status c000011b/c000007b loader.c:720: Test failed: 1260: wrong status c000011b/0 loader.c:720: Test failed: 1264: wrong status c000011b/0 loader.c:720: Test failed: 1269: wrong status c000011b/0 loader.c:720: Test failed: 1273: wrong status c000011b/0 loader.c:720: Test failed: 1277: wrong status c000011b/0 loader.c:720: Test failed: 1431: wrong status c000011b/c000007b loader.c:720: Test failed: 1439: wrong status c000011b/c000007b loader.c:720: Test failed: 1444: wrong status c000011b/0 loader.c:724: Test failed: 1444: failed with c000011b expected fallback loader.c:720: Test failed: 1450: wrong status c000011b/0 loader.c:724: Test failed: 1450: failed with c000011b expected fallback loader.c:720: Test failed: 1456: wrong status c000011b/0 loader.c:724: Test failed: 1456: failed with c000011b expected fallback loader.c:720: Test failed: 1463: wrong status c000011b/0 loader.c:724: Test failed: 1463: failed with c000011b expected fallback loader.c:720: Test failed: 1469: wrong status c000011b/0 loader.c:720: Test failed: 1478: wrong status c000011b/0 loader.c:720: Test failed: 1482: wrong status c000011b/0 loader.c:720: Test failed: 1486: wrong status c000011b/0 loader.c:720: Test failed: 1490: wrong status c000011b/0 loader.c:720: Test failed: 1494: wrong status c000011b/0
=== w10pro64_he (64 bit report) ===
kernel32: loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c0000130 loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1214: wrong status c0000131/c0000130 loader.c:720: Test failed: 1219: wrong status c0000131/c0000130 loader.c:720: Test failed: 1224: wrong status c0000131/c000007b loader.c:720: Test failed: 1229: wrong status c0000131/c000007b loader.c:720: Test failed: 1234: wrong status c0000131/c000007b loader.c:720: Test failed: 1239: wrong status c0000131/c000007b loader.c:720: Test failed: 1244: wrong status c0000131/c000007b loader.c:720: Test failed: 1260: wrong status c0000131/0 loader.c:720: Test failed: 1264: wrong status c0000131/0 loader.c:720: Test failed: 1269: wrong status c0000131/0 loader.c:720: Test failed: 1273: wrong status c0000131/0 loader.c:720: Test failed: 1277: wrong status c0000131/0 loader.c:720: Test failed: 1431: wrong status c0000131/c000007b loader.c:720: Test failed: 1439: wrong status c0000131/c000007b loader.c:720: Test failed: 1444: wrong status c0000131/0 loader.c:724: Test failed: 1444: failed with c0000131 expected fallback loader.c:720: Test failed: 1450: wrong status c0000131/0 loader.c:724: Test failed: 1450: failed with c0000131 expected fallback loader.c:720: Test failed: 1456: wrong status c0000131/0 loader.c:724: Test failed: 1456: failed with c0000131 expected fallback loader.c:720: Test failed: 1463: wrong status c0000131/0 loader.c:724: Test failed: 1463: failed with c0000131 expected fallback loader.c:720: Test failed: 1469: wrong status c0000131/0 loader.c:720: Test failed: 1478: wrong status c0000131/0 loader.c:720: Test failed: 1482: wrong status c0000131/0 loader.c:720: Test failed: 1486: wrong status c0000131/0 loader.c:720: Test failed: 1490: wrong status c0000131/0 loader.c:720: Test failed: 1494: wrong status c0000131/0
=== w10pro64_ja (64 bit report) ===
kernel32: loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c0000130 loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1197: wrong status c0000131/c000011b loader.c:720: Test failed: 1214: wrong status c0000131/c0000130 loader.c:720: Test failed: 1219: wrong status c0000131/c0000130 loader.c:720: Test failed: 1224: wrong status c0000131/c000007b loader.c:720: Test failed: 1229: wrong status c0000131/c000007b loader.c:720: Test failed: 1234: wrong status c0000131/c000007b loader.c:720: Test failed: 1239: wrong status c0000131/c000007b loader.c:720: Test failed: 1244: wrong status c0000131/c000007b loader.c:720: Test failed: 1260: wrong status c0000131/0 loader.c:720: Test failed: 1264: wrong status c0000131/0 loader.c:720: Test failed: 1269: wrong status c0000131/0 loader.c:720: Test failed: 1273: wrong status c0000131/0 loader.c:720: Test failed: 1277: wrong status c0000131/0 loader.c:720: Test failed: 1431: wrong status c0000131/c000007b loader.c:720: Test failed: 1439: wrong status c0000131/c000007b loader.c:720: Test failed: 1444: wrong status c0000131/0 loader.c:724: Test failed: 1444: failed with c0000131 expected fallback loader.c:720: Test failed: 1450: wrong status c0000131/0 loader.c:724: Test failed: 1450: failed with c0000131 expected fallback loader.c:720: Test failed: 1456: wrong status c0000131/0 loader.c:724: Test failed: 1456: failed with c0000131 expected fallback loader.c:720: Test failed: 1463: wrong status c0000131/0 loader.c:724: Test failed: 1463: failed with c0000131 expected fallback loader.c:720: Test failed: 1469: wrong status c0000131/0 loader.c:720: Test failed: 1478: wrong status c0000131/0 loader.c:720: Test failed: 1482: wrong status c0000131/0 loader.c:720: Test failed: 1486: wrong status c0000131/0 loader.c:720: Test failed: 1490: wrong status c0000131/0 loader.c:720: Test failed: 1494: wrong status c0000131/0
=== w10pro64_zh_CN (64 bit report) ===
kernel32: loader.c:720: Test failed: 1219: wrong status c000011b/c0000130 loader.c:720: Test failed: 1224: wrong status c000011b/c000007b loader.c:720: Test failed: 1229: wrong status c000011b/c000007b loader.c:720: Test failed: 1234: wrong status c000011b/c000007b loader.c:720: Test failed: 1239: wrong status c000011b/c000007b loader.c:720: Test failed: 1244: wrong status c000011b/c000007b loader.c:720: Test failed: 1260: wrong status c000011b/0 loader.c:720: Test failed: 1264: wrong status c000011b/0 loader.c:720: Test failed: 1269: wrong status c000011b/0 loader.c:720: Test failed: 1273: wrong status c000011b/0 loader.c:720: Test failed: 1277: wrong status c000011b/0 loader.c:720: Test failed: 1431: wrong status c000011b/c000007b loader.c:720: Test failed: 1439: wrong status c000011b/c000007b loader.c:720: Test failed: 1444: wrong status c000011b/0 loader.c:724: Test failed: 1444: failed with c000011b expected fallback loader.c:720: Test failed: 1450: wrong status c000011b/0 loader.c:724: Test failed: 1450: failed with c000011b expected fallback loader.c:720: Test failed: 1456: wrong status c000011b/0 loader.c:724: Test failed: 1456: failed with c000011b expected fallback loader.c:720: Test failed: 1463: wrong status c000011b/0 loader.c:724: Test failed: 1463: failed with c000011b expected fallback loader.c:720: Test failed: 1469: wrong status c000011b/0 loader.c:720: Test failed: 1478: wrong status c000011b/0 loader.c:720: Test failed: 1482: wrong status c000011b/0
=== w8adm (32 bit report) ===
kernel32: path: Timeout
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/kernel32/tests/security.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)
diff --git a/dlls/kernel32/tests/security.c b/dlls/kernel32/tests/security.c index e785bed33e0..52140994370 100644 --- a/dlls/kernel32/tests/security.c +++ b/dlls/kernel32/tests/security.c @@ -22,6 +22,7 @@
static HMODULE hdll; static HANDLE (WINAPI *pCreateBoundaryDescriptorA)(LPCSTR,ULONG); +static HANDLE (WINAPI *pCreatePrivateNamespaceA)(LPSECURITY_ATTRIBUTES,LPVOID,LPCSTR);
static BOOL init_function_pointers(void) { @@ -30,6 +31,7 @@ static BOOL init_function_pointers(void) if (hdll) { pCreateBoundaryDescriptorA = (void *)GetProcAddress(hdll, "CreateBoundaryDescriptorA"); + pCreatePrivateNamespaceA = (void *)GetProcAddress(hdll, "CreatePrivateNamespaceA"); return TRUE; }
@@ -61,11 +63,35 @@ void test_CreateBoundaryDescriptorA(void) ok(res != NULL, "expected HANDLE to boundary descriptor\n"); }
+void test_CreatePrivateNamespaceA(void) +{ + DWORD error; + HANDLE res; + CHAR buffer[MAX_PATH] = "test"; + CHAR overload[MAX_PATH + 100] = ""; + + for (int i = 0; i < (MAX_PATH + 100); i++) + overload[i] = 't'; + + res = pCreatePrivateNamespaceA(NULL, NULL, 0); + ok(res == NULL, "expected NULL pointer\n"); + + res = pCreatePrivateNamespaceA(NULL, NULL, buffer); + ok(res == NULL, "expected NULL pointer\n"); + + SetLastError(0xdeadbeef); + res = pCreatePrivateNamespaceA(NULL, NULL, overload); + error = GetLastError(); + ok(error != ERROR_FILENAME_EXCED_RANGE, "expected no MAX_PATH limit in buffer\n"); + ok(res == NULL, "expected NULL pointer\n"); +} + START_TEST(security) { if (init_function_pointers()) { test_CreateBoundaryDescriptorA(); + test_CreatePrivateNamespaceA(); FreeLibrary(hdll); } else
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/kernel32/tests/security.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)
diff --git a/dlls/kernel32/tests/security.c b/dlls/kernel32/tests/security.c index 52140994370..794c6256f61 100644 --- a/dlls/kernel32/tests/security.c +++ b/dlls/kernel32/tests/security.c @@ -23,6 +23,7 @@ static HMODULE hdll; static HANDLE (WINAPI *pCreateBoundaryDescriptorA)(LPCSTR,ULONG); static HANDLE (WINAPI *pCreatePrivateNamespaceA)(LPSECURITY_ATTRIBUTES,LPVOID,LPCSTR); +static HANDLE (WINAPI *pOpenPrivateNamespaceA)(LPVOID,LPCSTR);
static BOOL init_function_pointers(void) { @@ -32,6 +33,7 @@ static BOOL init_function_pointers(void) { pCreateBoundaryDescriptorA = (void *)GetProcAddress(hdll, "CreateBoundaryDescriptorA"); pCreatePrivateNamespaceA = (void *)GetProcAddress(hdll, "CreatePrivateNamespaceA"); + pOpenPrivateNamespaceA = (void *)GetProcAddress(hdll, "OpenPrivateNamespaceA"); return TRUE; }
@@ -86,12 +88,36 @@ void test_CreatePrivateNamespaceA(void) ok(res == NULL, "expected NULL pointer\n"); }
+void test_OpenPrivateNamespaceA(void) +{ + DWORD error; + HANDLE res; + CHAR buffer[MAX_PATH] = "test"; + CHAR overload[MAX_PATH + 100] = ""; + + for (int i = 0; i < (MAX_PATH + 100); i++) + overload[i] = 't'; + + res = pOpenPrivateNamespaceA(NULL, NULL); + ok(res == NULL, "expected NULL pointer\n"); + + res = pOpenPrivateNamespaceA(NULL, buffer); + ok(res == NULL, "expected NULL pointer\n"); + + SetLastError(0xdeadbeef); + res = pOpenPrivateNamespaceA(NULL, overload); + error = GetLastError(); + ok(error != ERROR_FILENAME_EXCED_RANGE, "expected no MAX_PATH limit in buffer\n"); + ok(res == NULL, "expected NULL pointer\n"); +} + START_TEST(security) { if (init_function_pointers()) { test_CreateBoundaryDescriptorA(); test_CreatePrivateNamespaceA(); + test_OpenPrivateNamespaceA(); FreeLibrary(hdll); } else