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@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... = = = = = = = = ====================================================================== --- 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_DESCRIPTORResultantDescriptor 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_DESCRIPTORResultantDescriptor 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
Hi! Done! http://www.reactos.org/archives/public/ros-diffs/2009-January/028191.html
Needs testing and maybe a check --> "if (ReturnLength) *ReturnLength = DescriptorLength;"
Always check and do your RESEARCH!
Thanks, James