Implement RtlGetSecurityDescriptorRMControl,
RtlSetSecurityDescriptorRMControl, SetSecurityDescriptorControl,
GetSecurityDescriptorRMControl and SetSecurityDescriptorRMControl.
Modified: trunk/reactos/include/ddk/setypes.h
Modified: trunk/reactos/include/ntos/rtl.h
Modified: trunk/reactos/include/ntos/security.h
Modified: trunk/reactos/lib/advapi32/advapi32.def
Modified: trunk/reactos/lib/advapi32/sec/sec.c
Modified: trunk/reactos/lib/ntdll/def/ntdll.def
Modified: trunk/reactos/lib/rtl/sd.c
Modified: trunk/reactos/w32api/include/winbase.h
_____
Modified: trunk/reactos/include/ddk/setypes.h
--- trunk/reactos/include/ddk/setypes.h 2005-02-11 12:06:29 UTC (rev
13492)
+++ trunk/reactos/include/ddk/setypes.h 2005-02-11 15:52:38 UTC (rev
13493)
@@ -50,22 +50,23 @@
#define FAILED_ACCESS_ACE_FLAG (0x80)
/* SECURITY_DESCRIPTOR_CONTROL */
-#define SECURITY_DESCRIPTOR_REVISION (1)
-#define SECURITY_DESCRIPTOR_REVISION1 (1)
-#define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
-#define SE_OWNER_DEFAULTED (1)
-#define SE_GROUP_DEFAULTED (2)
-#define SE_DACL_PRESENT (4)
-#define SE_DACL_DEFAULTED (8)
-#define SE_SACL_PRESENT (16)
-#define SE_SACL_DEFAULTED (32)
-#define SE_SELF_RELATIVE (32768)
+#define SECURITY_DESCRIPTOR_REVISION (1)
+#define SECURITY_DESCRIPTOR_REVISION1 (1)
+#define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
+#define SE_OWNER_DEFAULTED (0x0001)
+#define SE_GROUP_DEFAULTED (0x0002)
+#define SE_DACL_PRESENT (0x0004)
+#define SE_DACL_DEFAULTED (0x0008)
+#define SE_SACL_PRESENT (0x0010)
+#define SE_SACL_DEFAULTED (0x0020)
+#define SE_RM_CONTROL_VALID (0x4000)
+#define SE_SELF_RELATIVE (0x8000)
/* PRIVILEGE_SET */
-#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x1L)
-#define SE_PRIVILEGE_ENABLED (0x2L)
-#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
-#define PRIVILEGE_SET_ALL_NECESSARY (0x1)
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x1L)
+#define SE_PRIVILEGE_ENABLED (0x2L)
+#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
+#define PRIVILEGE_SET_ALL_NECESSARY (0x1)
/* SID */
#define SID_REVISION (1)
_____
Modified: trunk/reactos/include/ntos/rtl.h
--- trunk/reactos/include/ntos/rtl.h 2005-02-11 12:06:29 UTC (rev
13492)
+++ trunk/reactos/include/ntos/rtl.h 2005-02-11 15:52:38 UTC (rev
13493)
@@ -1337,6 +1337,10 @@
PACL* Sacl,
PBOOLEAN SaclDefaulted);
+BOOLEAN STDCALL
+RtlGetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR
SecurityDescriptor,
+ PUCHAR RMControl);
+
NTSTATUS
STDCALL
RtlGetSetBootStatusData(
@@ -2321,6 +2325,10 @@
PACL Sacl,
BOOLEAN SaclDefaulted);
+VOID STDCALL
+RtlSetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR
SecurityDescriptor,
+ PUCHAR RMControl);
+
NTSTATUS STDCALL
RtlSetInformationAcl (PACL Acl,
PVOID Information,
_____
Modified: trunk/reactos/include/ntos/security.h
--- trunk/reactos/include/ntos/security.h 2005-02-11 12:06:29 UTC
(rev 13492)
+++ trunk/reactos/include/ntos/security.h 2005-02-11 15:52:38 UTC
(rev 13493)
@@ -36,13 +36,14 @@
/* Security descriptor control. */
#define SECURITY_DESCRIPTOR_REVISION (1)
#define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
-#define SE_OWNER_DEFAULTED (1)
-#define SE_GROUP_DEFAULTED (2)
-#define SE_DACL_PRESENT (4)
-#define SE_DACL_DEFAULTED (8)
-#define SE_SACL_PRESENT (16)
-#define SE_SACL_DEFAULTED (32)
-#define SE_SELF_RELATIVE (32768)
+#define SE_OWNER_DEFAULTED (0x0001)
+#define SE_GROUP_DEFAULTED (0x0002)
+#define SE_DACL_PRESENT (0x0004)
+#define SE_DACL_DEFAULTED (0x0008)
+#define SE_SACL_PRESENT (0x0010)
+#define SE_SACL_DEFAULTED (0x0020)
+#define SE_RM_CONTROL_VALID (0x4000)
+#define SE_SELF_RELATIVE (0x8000)
#endif
/* This is defined in the Win 32 API headers as something else: */
_____
Modified: trunk/reactos/lib/advapi32/advapi32.def
--- trunk/reactos/lib/advapi32/advapi32.def 2005-02-11 12:06:29 UTC
(rev 13492)
+++ trunk/reactos/lib/advapi32/advapi32.def 2005-02-11 15:52:38 UTC
(rev 13493)
@@ -54,7 +54,7 @@
ConvertSidToStringSidA@8
ConvertSidToStringSidW@8
CopySid@12
-;CreatePrivateObjectSecurity@24
+CreatePrivateObjectSecurity@24
CreateProcessAsUserA@44
CreateProcessAsUserW@44
CreateServiceA@52
@@ -93,7 +93,7 @@
;DenyAccessRightsA
;DenyAccessRightsW
DeregisterEventSource@4
-;DestroyPrivateObjectSecurity@4
+DestroyPrivateObjectSecurity@4
DuplicateToken@12
DuplicateTokenEx@24
;ElfBackupEventLogFileA@8
@@ -157,7 +157,7 @@
GetNamedSecurityInfoW@32
GetNumberOfEventLogRecords@8
GetOldestEventLogRecord@8
-;GetPrivateObjectSecurity@20
+GetPrivateObjectSecurity@20
GetSecurityDescriptorControl@12
GetSecurityDescriptorDacl@16
GetSecurityDescriptorGroup@12
@@ -379,7 +379,8 @@
SetKernelObjectSecurity@12
SetNamedSecurityInfoA@28
SetNamedSecurityInfoW@28
-;SetPrivateObjectSecurity@20
+SetPrivateObjectSecurity@20
+SetSecurityDescriptorControl@12
SetSecurityDescriptorDacl@16
SetSecurityDescriptorGroup@12
SetSecurityDescriptorOwner@12
_____
Modified: trunk/reactos/lib/advapi32/sec/sec.c
--- trunk/reactos/lib/advapi32/sec/sec.c 2005-02-11 12:06:29 UTC
(rev 13492)
+++ trunk/reactos/lib/advapi32/sec/sec.c 2005-02-11 15:52:38 UTC
(rev 13493)
@@ -124,7 +124,7 @@
PSECURITY_DESCRIPTOR pSecurityDescriptor,
PSID *pOwner,
LPBOOL lpbOwnerDefaulted
-)
+ )
{
BOOLEAN OwnerDefaulted;
NTSTATUS Status;
@@ -147,6 +147,23 @@
/*
* @implemented
*/
+DWORD
+STDCALL
+GetSecurityDescriptorRMControl (
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ PUCHAR RMControl)
+{
+ if (!RtlGetSecurityDescriptorRMControl(SecurityDescriptor,
+ RMControl))
+ return ERROR_INVALID_DATA;
+
+ return ERROR_SUCCESS;
+}
+
+
+/*
+ * @implemented
+ */
BOOL
STDCALL
GetSecurityDescriptorSacl (
@@ -293,6 +310,31 @@
*/
BOOL
STDCALL
+SetSecurityDescriptorControl (
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,
+ SECURITY_DESCRIPTOR_CONTROL ControlBitsOfInterest,
+ SECURITY_DESCRIPTOR_CONTROL ControlBitsToSet)
+{
+ NTSTATUS Status;
+
+ Status = RtlSetControlSecurityDescriptor(pSecurityDescriptor,
+ ControlBitsOfInterest,
+ ControlBitsToSet);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
SetSecurityDescriptorDacl (
PSECURITY_DESCRIPTOR pSecurityDescriptor,
BOOL bDaclPresent,
@@ -371,6 +413,22 @@
/*
* @implemented
*/
+DWORD
+STDCALL
+SetSecurityDescriptorRMControl (
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ PUCHAR RMControl)
+{
+ RtlSetSecurityDescriptorRMControl(SecurityDescriptor,
+ RMControl);
+
+ return ERROR_SUCCESS;
+}
+
+
+/*
+ * @implemented
+ */
BOOL
STDCALL
SetSecurityDescriptorSacl (
_____
Modified: trunk/reactos/lib/ntdll/def/ntdll.def
--- trunk/reactos/lib/ntdll/def/ntdll.def 2005-02-11 12:06:29 UTC
(rev 13492)
+++ trunk/reactos/lib/ntdll/def/ntdll.def 2005-02-11 15:52:38 UTC
(rev 13493)
@@ -369,8 +369,6 @@
RtlDeleteAce@8
RtlDeleteAtomFromAtomTable@8
RtlDeleteCriticalSection@4
-RtlDuplicateUnicodeString@12
-RtlSetCriticalSectionSpinCount@8
;RtlDeleteElementGenericTable
;RtlDeleteNoSplay
RtlDeleteOwnersRanges@8
@@ -394,6 +392,7 @@
RtlDowncaseUnicodeChar@4
RtlDowncaseUnicodeString@12
RtlDumpResource@4
+RtlDuplicateUnicodeString@12
RtlEmptyAtomTable@8
RtlEnlargedIntegerMultiply@8
RtlEnlargedUnsignedDivide@16
@@ -462,6 +461,7 @@
RtlGetOwnerSecurityDescriptor@12
RtlGetProcessHeaps@8
RtlGetSaclSecurityDescriptor@16
+RtlGetSecurityDescriptorRMControl@8
;RtlGetUserInfoHeap
RtlGetVersion@4
RtlIdentifierAuthoritySid@4
@@ -586,6 +586,7 @@
;RtlSetAttributesSecurityDescriptor
RtlSetBits@12
RtlSetControlSecurityDescriptor@12
+RtlSetCriticalSectionSpinCount@8
RtlSetCurrentDirectory_U@4
RtlSetCurrentEnvironment@8
RtlSetDaclSecurityDescriptor@16
@@ -594,6 +595,7 @@
RtlSetInformationAcl@16
RtlSetOwnerSecurityDescriptor@12
RtlSetSaclSecurityDescriptor@16
+RtlSetSecurityDescriptorRMControl@8
;RtlSetSecurityObject
RtlSetTimeZoneInformation@4
;RtlSetUnicodeCallouts
_____
Modified: trunk/reactos/lib/rtl/sd.c
--- trunk/reactos/lib/rtl/sd.c 2005-02-11 12:06:29 UTC (rev 13492)
+++ trunk/reactos/lib/rtl/sd.c 2005-02-11 15:52:38 UTC (rev 13493)
@@ -789,8 +789,8 @@
/*
-* @unimplemented
-*/
+ * @unimplemented
+ */
NTSTATUS STDCALL
RtlSelfRelativeToAbsoluteSD2(PSECURITY_DESCRIPTOR
SelfRelativeSecurityDescriptor,
PULONG BufferSize)
@@ -870,4 +870,43 @@
return TRUE;
}
+
+/*
+ * @implemented
+ */
+BOOLEAN STDCALL
+RtlGetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR
SecurityDescriptor,
+ PUCHAR RMControl)
+{
+ if (!(SecurityDescriptor->Control & SE_RM_CONTROL_VALID))
+ {
+ *RMControl = 0;
+ return FALSE;
+ }
+
+ *RMControl = SecurityDescriptor->Sbz1;
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+VOID STDCALL
+RtlSetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR
SecurityDescriptor,
+ PUCHAR RMControl)
+{
+ if (RMControl == NULL)
+ {
+ SecurityDescriptor->Control &= ~SE_RM_CONTROL_VALID;
+ SecurityDescriptor->Sbz1 = 0;
+ }
+ else
+ {
+ SecurityDescriptor->Control |= SE_RM_CONTROL_VALID;
+ SecurityDescriptor->Sbz1 = *RMControl;
+ }
+}
+
/* EOF */
_____
Modified: trunk/reactos/w32api/include/winbase.h
--- trunk/reactos/w32api/include/winbase.h 2005-02-11 12:06:29 UTC
(rev 13492)
+++ trunk/reactos/w32api/include/winbase.h 2005-02-11 15:52:38 UTC
(rev 13493)
@@ -1457,6 +1457,7 @@
BOOL WINAPI
GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID*,LPBOOL);
DWORD WINAPI GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR);
BOOL WINAPI
GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID*,LPBOOL);
+DWORD WINAPI
GetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR,PUCHAR);
BOOL WINAPI
GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL*,LPBOOL);
DWORD WINAPI GetShortPathNameA(LPCSTR,LPSTR,DWORD);
DWORD WINAPI GetShortPathNameW(LPCWSTR,LPWSTR,DWORD);
@@ -1835,6 +1836,7 @@
BOOL WINAPI
SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
BOOL WINAPI SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID,BOOL);
BOOL WINAPI SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID,BOOL);
+DWORD WINAPI
SetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR,PUCHAR);
BOOL WINAPI
SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
BOOL WINAPI SetStdHandle(DWORD,HANDLE);
#define SetSwapAreaSize(w) (w)