[ros-dev] [ros-diffs] [sginsberg] 38508: - Add Wine's GetPrivateObjectSecurity and use it instead of our that uses the unimplemented RtlQuerySecurityObject routine

Alex Ionescu ionucu at videotron.ca
Sat Jan 3 01:03:55 CET 2009


Please don't do this -- now nobody will know that the Rtl function  
needs to be called!

On 2-Jan-09, at 12:14 PM, sginsberg at svn.reactos.org wrote:

> Author: sginsberg
> Date: Fri Jan  2 11:14:42 2009
> New Revision: 38508
>
> URL: http://svn.reactos.org/svn/reactos?rev=38508&view=rev
> Log:
> - Add Wine's GetPrivateObjectSecurity and use it instead of our that  
> uses the unimplemented RtlQuerySecurityObject routine
>
> Modified:
>    trunk/reactos/dll/win32/advapi32/sec/misc.c
>
> Modified: trunk/reactos/dll/win32/advapi32/sec/misc.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/sec/misc.c?rev=38508&r1=38507&r2=38508&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- trunk/reactos/dll/win32/advapi32/sec/misc.c [iso-8859-1]  
> (original)
> +++ trunk/reactos/dll/win32/advapi32/sec/misc.c [iso-8859-1] Fri  
> Jan  2 11:14:42 2009
> @@ -2250,19 +2250,25 @@
> }
>
>
> +#if 0
> +//
> +// Use when RtlQuerySecurityObject is implemented
> +//
> +
> /*
>  * @implemented
>  */
> BOOL
> WINAPI
> -GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR ObjectDescriptor,
> -                         SECURITY_INFORMATION SecurityInformation,
> -                         PSECURITY_DESCRIPTOR ResultantDescriptor,
> -                         DWORD DescriptorLength,
> -                         PDWORD ReturnLength)
> +GetPrivateObjectSecurity(IN PSECURITY_DESCRIPTOR ObjectDescriptor,
> +                         IN SECURITY_INFORMATION SecurityInformation,
> +                         OUT PSECURITY_DESCRIPTOR  
> ResultantDescriptor OPTIONAL,
> +                         IN DWORD DescriptorLength,
> +                         OUT PDWORD ReturnLength)
> {
>     NTSTATUS Status;
>
> +    /* Call RTL */
>     Status = RtlQuerySecurityObject(ObjectDescriptor,
>                                     SecurityInformation,
>                                     ResultantDescriptor,
> @@ -2270,12 +2276,73 @@
>                                     ReturnLength);
>     if (!NT_SUCCESS(Status))
>     {
> +        /* Fail */
>         SetLastError(RtlNtStatusToDosError(Status));
>         return FALSE;
>     }
>
> +    /* Success */
>     return TRUE;
> }
> +#else
> +//
> +// Wine's implementation (as of December 30th 2008)
> +//
> +
> +/*
> + * @implemented
> + */
> +BOOL
> +WINAPI
> +GetPrivateObjectSecurity(IN PSECURITY_DESCRIPTOR ObjectDescriptor,
> +                         IN SECURITY_INFORMATION SecurityInformation,
> +                         OUT PSECURITY_DESCRIPTOR  
> ResultantDescriptor OPTIONAL,
> +                         IN DWORD DescriptorLength,
> +                         OUT PDWORD ReturnLength)
> +{
> +    SECURITY_DESCRIPTOR desc;
> +    BOOL defaulted, present;
> +    PACL pacl;
> +    PSID psid;
> +
> +    TRACE("(%p,0x%08x,%p,0x%08x,%p)\n", ObjectDescriptor,  
> SecurityInformation,
> +          ResultantDescriptor, DescriptorLength, ReturnLength);
> +
> +    if (!InitializeSecurityDescriptor(&desc,  
> SECURITY_DESCRIPTOR_REVISION))
> +        return FALSE;
> +
> +    if (SecurityInformation & OWNER_SECURITY_INFORMATION)
> +    {
> +        if (!GetSecurityDescriptorOwner(ObjectDescriptor, &psid,  
> &defaulted))
> +            return FALSE;
> +        SetSecurityDescriptorOwner(&desc, psid, defaulted);
> +    }
> +
> +    if (SecurityInformation & GROUP_SECURITY_INFORMATION)
> +    {
> +        if (!GetSecurityDescriptorGroup(ObjectDescriptor, &psid,  
> &defaulted))
> +            return FALSE;
> +        SetSecurityDescriptorGroup(&desc, psid, defaulted);
> +    }
> +
> +    if (SecurityInformation & DACL_SECURITY_INFORMATION)
> +    {
> +        if (!GetSecurityDescriptorDacl(ObjectDescriptor, &present,  
> &pacl, &defaulted))
> +            return FALSE;
> +        SetSecurityDescriptorDacl(&desc, present, pacl, defaulted);
> +    }
> +
> +    if (SecurityInformation & SACL_SECURITY_INFORMATION)
> +    {
> +        if (!GetSecurityDescriptorSacl(ObjectDescriptor, &present,  
> &pacl, &defaulted))
> +            return FALSE;
> +        SetSecurityDescriptorSacl(&desc, present, pacl, defaulted);
> +    }
> +
> +    *ReturnLength = DescriptorLength;
> +    return MakeSelfRelativeSD(&desc, ResultantDescriptor,  
> ReturnLength);
> +}
> +#endif
>
>
> /*
>

Best regards,
Alex Ionescu



More information about the Ros-dev mailing list