From: André Hentschel Subject: advapi32: Add CreatePrivateObjectSecurityEx Message-Id: <56DDEF72.3080603@dawncrow.de> Date: Mon, 7 Mar 2016 22:15:30 +0100 Signed-off-by: André Hentschel --- dlls/advapi32/advapi32.spec | 2 +- dlls/advapi32/security.c | 25 ++++++++++++++----------- include/winbase.h | 1 + 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec index c38e92e..3f32aa3 100644 --- a/dlls/advapi32/advapi32.spec +++ b/dlls/advapi32/advapi32.spec @@ -120,7 +120,7 @@ @ stdcall CopySid(long ptr ptr) # @ stub CreateCodeAuthzLevel @ stdcall CreatePrivateObjectSecurity(ptr ptr ptr long long ptr) -# @ stub CreatePrivateObjectSecurityEx +@ stdcall CreatePrivateObjectSecurityEx(ptr ptr ptr ptr long long long ptr) @ stdcall CreatePrivateObjectSecurityWithMultipleInheritance(ptr ptr ptr ptr long long long long ptr) @ stdcall CreateProcessAsUserA(long str str ptr ptr long long ptr str ptr ptr) # @ stub CreateProcessAsUserSecure diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c index c8a6579..92a1789 100644 --- a/dlls/advapi32/security.c +++ b/dlls/advapi32/security.c @@ -5299,20 +5299,16 @@ BOOL WINAPI ConvertToAutoInheritPrivateObjectSecurity( return FALSE; } -BOOL WINAPI CreatePrivateObjectSecurity( - PSECURITY_DESCRIPTOR ParentDescriptor, - PSECURITY_DESCRIPTOR CreatorDescriptor, - PSECURITY_DESCRIPTOR* NewDescriptor, - BOOL IsDirectoryObject, - HANDLE Token, - PGENERIC_MAPPING GenericMapping ) +BOOL WINAPI CreatePrivateObjectSecurityEx( + PSECURITY_DESCRIPTOR parent, PSECURITY_DESCRIPTOR creator, PSECURITY_DESCRIPTOR *out, + GUID *objtype, BOOL is_directory, ULONG flags, HANDLE token, PGENERIC_MAPPING mapping) { SECURITY_DESCRIPTOR_RELATIVE *relative; DWORD needed, offset; BYTE *buffer; - FIXME("%p %p %p %d %p %p - returns fake SECURITY_DESCRIPTOR\n", ParentDescriptor, - CreatorDescriptor, NewDescriptor, IsDirectoryObject, Token, GenericMapping); + FIXME("%p %p %p %p %d %u %p %p - returns fake SECURITY_DESCRIPTOR\n", parent, creator, out, + objtype, is_directory, flags, token, mapping); needed = sizeof(SECURITY_DESCRIPTOR_RELATIVE); needed += sizeof(sidWorld); @@ -5345,16 +5341,23 @@ BOOL WINAPI CreatePrivateObjectSecurity( GetWorldAccessACL( (ACL *)(buffer + offset) ); relative->Sacl = offset; - *NewDescriptor = relative; + *out = relative; return TRUE; } +BOOL WINAPI CreatePrivateObjectSecurity( + PSECURITY_DESCRIPTOR parent, PSECURITY_DESCRIPTOR creator, PSECURITY_DESCRIPTOR *out, + BOOL is_container, HANDLE token, PGENERIC_MAPPING mapping) +{ + return CreatePrivateObjectSecurityEx(parent, creator, out, NULL, is_container, 0, token, mapping); +} + BOOL WINAPI CreatePrivateObjectSecurityWithMultipleInheritance( PSECURITY_DESCRIPTOR parent, PSECURITY_DESCRIPTOR creator, PSECURITY_DESCRIPTOR *out, GUID **types, ULONG count, BOOL is_container, ULONG flags, HANDLE token, PGENERIC_MAPPING mapping) { FIXME(": semi-stub\n"); - return CreatePrivateObjectSecurity(parent, creator, out, is_container, token, mapping); + return CreatePrivateObjectSecurityEx(parent, creator, out, NULL, is_container, flags, token, mapping); } BOOL WINAPI DestroyPrivateObjectSecurity( PSECURITY_DESCRIPTOR* ObjectDescriptor ) diff --git a/include/winbase.h b/include/winbase.h index 15edac3..c5332c0 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1772,6 +1772,7 @@ WINBASEAPI HANDLE WINAPI CreateNamedPipeW(LPCWSTR,DWORD,DWORD,DWORD,DWORD,D #define CreateNamedPipe WINELIB_NAME_AW(CreateNamedPipe) WINBASEAPI BOOL WINAPI CreatePipe(PHANDLE,PHANDLE,LPSECURITY_ATTRIBUTES,DWORD); WINADVAPI BOOL WINAPI CreatePrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOL,HANDLE,PGENERIC_MAPPING); +WINADVAPI BOOL WINAPI CreatePrivateObjectSecurityEx(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID*,BOOL,ULONG,HANDLE,PGENERIC_MAPPING); WINADVAPI BOOL WINAPI CreatePrivateObjectSecurityWithMultipleInheritance(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID**,ULONG,BOOL,ULONG,HANDLE,PGENERIC_MAPPING); WINBASEAPI PTP_POOL WINAPI CreateThreadpool(PVOID); WINBASEAPI PTP_WORK WINAPI CreateThreadpoolWork(PTP_WORK_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON);