Module: wine Branch: master Commit: 245bdef5b11c19ccd4e8625b86267ca731badcc0 URL: https://gitlab.winehq.org/wine/wine/-/commit/245bdef5b11c19ccd4e8625b86267ca...
Author: Zebediah Figura zfigura@codeweavers.com Date: Sun Oct 15 16:13:25 2023 -0500
advapi32: Implement GetSecurityInfo(SE_WINDOW_OBJECT).
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55763
---
dlls/advapi32/Makefile.in | 2 +- dlls/advapi32/security.c | 15 +++++++++++++++ dlls/advapi32/tests/Makefile.in | 2 +- dlls/advapi32/tests/security.c | 23 +++++++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/dlls/advapi32/Makefile.in b/dlls/advapi32/Makefile.in index f791e497a74..8ed0754ca9c 100644 --- a/dlls/advapi32/Makefile.in +++ b/dlls/advapi32/Makefile.in @@ -2,7 +2,7 @@ EXTRADEFS = -D_ADVAPI32_ MODULE = advapi32.dll IMPORTLIB = advapi32 IMPORTS = kernelbase sechost msvcrt -DELAYIMPORTS = rpcrt4 +DELAYIMPORTS = rpcrt4 user32
C_SRCS = \ advapi.c \ diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c index 82feb00a0f0..8d0c6977d72 100644 --- a/dlls/advapi32/security.c +++ b/dlls/advapi32/security.c @@ -1529,6 +1529,21 @@ DWORD WINAPI GetSecurityInfo( HANDLE handle, SE_OBJECT_TYPE type, SECURITY_INFOR } break;
+ case SE_WINDOW_OBJECT: + if (!GetUserObjectSecurity( handle, &SecurityInfo, NULL, 0, &size ) + && GetLastError() != ERROR_INSUFFICIENT_BUFFER) + return GetLastError(); + + if (!(sd = LocalAlloc( 0, size ))) + return ERROR_NOT_ENOUGH_MEMORY; + + if (!GetUserObjectSecurity( handle, &SecurityInfo, sd, size, &size )) + { + LocalFree( sd ); + return GetLastError(); + } + break; + case SE_KERNEL_OBJECT: case SE_FILE_OBJECT: case SE_WMIGUID_OBJECT: diff --git a/dlls/advapi32/tests/Makefile.in b/dlls/advapi32/tests/Makefile.in index c2fc7aeb954..3dec3cbabeb 100644 --- a/dlls/advapi32/tests/Makefile.in +++ b/dlls/advapi32/tests/Makefile.in @@ -1,5 +1,5 @@ TESTDLL = advapi32.dll -IMPORTS = advapi32 +IMPORTS = advapi32 user32
C_SRCS = \ cred.c \ diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c index 4f3bcb917b2..2840f6bd75a 100644 --- a/dlls/advapi32/tests/security.c +++ b/dlls/advapi32/tests/security.c @@ -8780,6 +8780,28 @@ static void test_IsValidSecurityDescriptor(void) free(sd); }
+static void test_window_security(void) +{ + PSECURITY_DESCRIPTOR sd; + BOOL present, defaulted; + HDESK desktop; + DWORD ret; + ACL *dacl; + + desktop = GetThreadDesktop(GetCurrentThreadId()); + + ret = GetSecurityInfo(desktop, SE_WINDOW_OBJECT, + DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &sd); + ok(!ret, "got error %lu\n", ret); + + ret = GetSecurityDescriptorDacl(sd, &present, &dacl, &defaulted); + ok(ret == TRUE, "got error %lu\n", GetLastError()); + todo_wine ok(present == TRUE, "got present %d\n", present); + ok(defaulted == FALSE, "got defaulted %d\n", defaulted); + + LocalFree(sd); +} + START_TEST(security) { init(); @@ -8850,6 +8872,7 @@ START_TEST(security) test_elevation(); test_group_as_file_owner(); test_IsValidSecurityDescriptor(); + test_window_security();
/* Must be the last test, modifies process token */ test_token_security_descriptor();