- Implement RtlSetControlSecurityDescriptor
- Remove property set functions from ntdll.def because they are not implemented in Win2K and above.
Modified: trunk/reactos/include/ntos/rtl.h
Modified: trunk/reactos/lib/ntdll/def/ntdll.def
Modified: trunk/reactos/lib/rtl/sd.c

Modified: trunk/reactos/include/ntos/rtl.h
--- trunk/reactos/include/ntos/rtl.h	2005-02-10 22:54:30 UTC (rev 13491)
+++ trunk/reactos/include/ntos/rtl.h	2005-02-11 12:06:29 UTC (rev 13492)
@@ -2295,6 +2295,11 @@
 	);
 
 NTSTATUS STDCALL
+RtlSetControlSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+				IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
+				IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet);
+
+NTSTATUS STDCALL
 RtlSetDaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
 			      BOOLEAN DaclPresent,
 			      PACL Dacl,

Modified: trunk/reactos/lib/ntdll/def/ntdll.def
--- trunk/reactos/lib/ntdll/def/ntdll.def	2005-02-10 22:54:30 UTC (rev 13491)
+++ trunk/reactos/lib/ntdll/def/ntdll.def	2005-02-11 12:06:29 UTC (rev 13492)
@@ -321,7 +321,6 @@
 RtlCheckRegistryKey@8
 RtlClearAllBits@4
 RtlClearBits@12
-;RtlClosePropertySet
 RtlCompactHeap@8
 RtlCompareMemory@12
 RtlCompareMemoryUlong@12
@@ -350,7 +349,6 @@
 RtlCreateEnvironment@8
 RtlCreateHeap@24
 RtlCreateProcessParameters@40
-;RtlCreatePropertySet
 RtlCreateQueryDebugBuffer@8
 RtlCreateRegistryKey@8
 RtlCreateSecurityDescriptor@8
@@ -404,7 +402,6 @@
 RtlEnumProcessHeaps@8
 ;RtlEnumerateGenericTable
 ;RtlEnumerateGenericTableWithoutSplaying
-;RtlEnumerateProperties
 RtlEqualComputerName@8
 RtlEqualDomainName@8
 RtlEqualLuid@8
@@ -435,7 +432,6 @@
 RtlFindSetBits@12
 RtlFindSetBitsAndClear@12
 RtlFirstFreeAce@8
-;RtlFlushPropertySet
 RtlFormatCurrentUserKeyPath@4
 RtlFormatMessage@32
 RtlFreeAnsiString@4
@@ -468,7 +464,6 @@
 RtlGetSaclSecurityDescriptor@16
 ;RtlGetUserInfoHeap
 RtlGetVersion@4
-;RtlGuidToPropertySetName
 RtlIdentifierAuthoritySid@4
 RtlImageDirectoryEntryToData@16
 RtlImageNtHeader@4
@@ -559,7 +554,6 @@
 RtlPinAtomInAtomTable@8
 RtlPrefixString@12
 RtlPrefixUnicodeString@12
-;RtlPropertySetNameToGuid
 ;RtlProtectHeap
 RtlQueryAtomInAtomTable@24
 RtlQueryEnvironmentVariable_U@12
@@ -568,9 +562,6 @@
 RtlQueryProcessDebugInformation@12
 ;RtlQueryProcessHeapInformation
 ;RtlQueryProcessLockInformation
-;RtlQueryProperties
-;RtlQueryPropertyNames
-;RtlQueryPropertySet
 RtlQueryRegistryValues@20
 ;RtlQuerySecurityObject
 ;RtlQueryTagHeap
@@ -594,6 +585,7 @@
 RtlSetAllBits@4
 ;RtlSetAttributesSecurityDescriptor
 RtlSetBits@12
+RtlSetControlSecurityDescriptor@12
 RtlSetCurrentDirectory_U@4
 RtlSetCurrentEnvironment@8
 RtlSetDaclSecurityDescriptor@16
@@ -601,9 +593,6 @@
 RtlSetGroupSecurityDescriptor@12
 RtlSetInformationAcl@16
 RtlSetOwnerSecurityDescriptor@12
-;RtlSetProperties
-;RtlSetPropertyNames
-;RtlSetPropertySetClassId
 RtlSetSaclSecurityDescriptor@16
 ;RtlSetSecurityObject
 RtlSetTimeZoneInformation@4

Modified: trunk/reactos/lib/rtl/sd.c
--- trunk/reactos/lib/rtl/sd.c	2005-02-10 22:54:30 UTC (rev 13491)
+++ trunk/reactos/lib/rtl/sd.c	2005-02-11 12:06:29 UTC (rev 13492)
@@ -40,6 +40,7 @@
    return STATUS_SUCCESS;
 }
 
+
 /*
  * @implemented
  */
@@ -278,9 +279,10 @@
       SecurityDescriptor->Control = SecurityDescriptor->Control | SE_OWNER_DEFAULTED;
    }
 
-   return(STATUS_SUCCESS);
+   return STATUS_SUCCESS;
 }
 
+
 /*
  * @implemented
  */
@@ -319,6 +321,7 @@
    return STATUS_SUCCESS;
 }
 
+
 /*
  * @implemented
  */
@@ -347,6 +350,7 @@
    return STATUS_SUCCESS;
 }
 
+
 /*
  * @implemented
  */
@@ -578,8 +582,7 @@
 NTSTATUS STDCALL
 RtlAbsoluteToSelfRelativeSD(PSECURITY_DESCRIPTOR AbsSD,
                             PSECURITY_DESCRIPTOR RelSD,
-                            PULONG BufferLength
-                           )
+                            PULONG BufferLength)
 {
    if (AbsSD->Control & SE_SELF_RELATIVE)
    {
@@ -615,6 +618,29 @@
  * @implemented
  */
 NTSTATUS STDCALL
+RtlSetControlSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+                                IN SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
+                                IN SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet)
+{
+  if (SecurityDescriptor->Revision != SECURITY_DESCRIPTOR_REVISION1)
+  {
+    return STATUS_UNKNOWN_REVISION;
+  }
+
+  /* Zero the 'bits of interest' */
+  SecurityDescriptor->Control &= ~ControlBitsOfInterest;
+
+  /* Set the 'bits to set' */
+  SecurityDescriptor->Control |= (ControlBitsToSet & ControlBitsOfInterest);
+
+  return STATUS_SUCCESS;
+}
+
+
+/*
+ * @implemented
+ */
+NTSTATUS STDCALL
 RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
                              PBOOLEAN SaclPresent,
                              PACL *Sacl,
@@ -657,6 +683,7 @@
    return STATUS_SUCCESS;
 }
 
+
 /*
  * @implemented
  */
@@ -694,6 +721,7 @@
    return STATUS_SUCCESS;
 }
 
+
 /*
  * @implemented
  */
@@ -759,6 +787,7 @@
    return STATUS_SUCCESS;
 }
 
+
 /*
 * @unimplemented
 */
@@ -770,9 +799,10 @@
    return STATUS_NOT_IMPLEMENTED;
 }
 
+
 /*
-* @implemented
-*/
+ * @implemented
+ */
 BOOLEAN STDCALL
 RtlValidRelativeSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
                                    IN ULONG SecurityDescriptorLength,