return the pointers of the owner, group, dacl and sacl in the security descriptor returned by GetSecurityInfo()
Modified: trunk/reactos/lib/ntmarta/ntmarta.c

Modified: trunk/reactos/lib/ntmarta/ntmarta.c
--- trunk/reactos/lib/ntmarta/ntmarta.c	2006-01-22 03:27:21 UTC (rev 20968)
+++ trunk/reactos/lib/ntmarta/ntmarta.c	2006-01-22 03:50:36 UTC (rev 20969)
@@ -1,6 +1,6 @@
 /*
  * ReactOS MARTA provider
- * Copyright (C) 2004 ReactOS Team
+ * Copyright (C) 2005 - 2006 ReactOS Team
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -69,9 +69,13 @@
         }
         else
         {
-            pSD = LocalReAlloc((HLOCAL)pSD,
-                               (SIZE_T)SDSize,
-                               LMEM_MOVEABLE);
+            PSECURITY_DESCRIPTOR newSD;
+
+            newSD = LocalReAlloc((HLOCAL)pSD,
+                                 (SIZE_T)SDSize,
+                                 LMEM_MOVEABLE);
+            if (newSD != NULL)
+                pSD = newSD;
         }
 
         if (pSD == NULL)
@@ -136,11 +140,67 @@
 
     if (Ret == ERROR_SUCCESS)
     {
+        BOOL Present, Defaulted;
+
+        if (SecurityInfo & OWNER_SECURITY_INFORMATION && ppsidOwner != NULL)
+        {
+            *ppsidOwner = NULL;
+            if (!GetSecurityDescriptorOwner(pSD,
+                                            ppsidOwner,
+                                            &Defaulted))
+            {
+                Ret = GetLastError();
+                goto Cleanup;
+            }
+        }
+
+        if (SecurityInfo & GROUP_SECURITY_INFORMATION && ppsidGroup != NULL)
+        {
+            *ppsidOwner = NULL;
+            if (!GetSecurityDescriptorGroup(pSD,
+                                            ppsidGroup,
+                                            &Defaulted))
+            {
+                Ret = GetLastError();
+                goto Cleanup;
+            }
+        }
+
+        if (SecurityInfo & DACL_SECURITY_INFORMATION && ppDacl != NULL)
+        {
+            *ppDacl = NULL;
+            if (!GetSecurityDescriptorDacl(pSD,
+                                           &Present,
+                                           ppDacl,
+                                           &Defaulted))
+            {
+                Ret = GetLastError();
+                goto Cleanup;
+            }
+        }
+
+        if (SecurityInfo & SACL_SECURITY_INFORMATION && ppSacl != NULL)
+        {
+            *ppSacl = NULL;
+            if (!GetSecurityDescriptorSacl(pSD,
+                                           &Present,
+                                           ppSacl,
+                                           &Defaulted))
+            {
+                Ret = GetLastError();
+                goto Cleanup;
+            }
+        }
+
         *ppSecurityDescriptor = pSD;
     }
-    else if (pSD != NULL)
+    else
     {
-        LocalFree((HLOCAL)pSD);
+Cleanup:
+        if (pSD != NULL)
+        {
+            LocalFree((HLOCAL)pSD);
+        }
     }
 
     /* restore the last error code */