mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
Implement RtlGetSecurityDescriptorRMControl, RtlSetSecurityDescriptorRMControl, SetSecurityDescriptorControl, GetSecurityDescriptorRMControl and SetSecurityDescriptorRMControl.
svn path=/trunk/; revision=13493
This commit is contained in:
parent
5930efc575
commit
1ca75be5f0
8 changed files with 142 additions and 30 deletions
|
@ -53,13 +53,14 @@
|
||||||
#define SECURITY_DESCRIPTOR_REVISION (1)
|
#define SECURITY_DESCRIPTOR_REVISION (1)
|
||||||
#define SECURITY_DESCRIPTOR_REVISION1 (1)
|
#define SECURITY_DESCRIPTOR_REVISION1 (1)
|
||||||
#define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
|
#define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
|
||||||
#define SE_OWNER_DEFAULTED (1)
|
#define SE_OWNER_DEFAULTED (0x0001)
|
||||||
#define SE_GROUP_DEFAULTED (2)
|
#define SE_GROUP_DEFAULTED (0x0002)
|
||||||
#define SE_DACL_PRESENT (4)
|
#define SE_DACL_PRESENT (0x0004)
|
||||||
#define SE_DACL_DEFAULTED (8)
|
#define SE_DACL_DEFAULTED (0x0008)
|
||||||
#define SE_SACL_PRESENT (16)
|
#define SE_SACL_PRESENT (0x0010)
|
||||||
#define SE_SACL_DEFAULTED (32)
|
#define SE_SACL_DEFAULTED (0x0020)
|
||||||
#define SE_SELF_RELATIVE (32768)
|
#define SE_RM_CONTROL_VALID (0x4000)
|
||||||
|
#define SE_SELF_RELATIVE (0x8000)
|
||||||
|
|
||||||
/* PRIVILEGE_SET */
|
/* PRIVILEGE_SET */
|
||||||
#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x1L)
|
#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x1L)
|
||||||
|
|
|
@ -1337,6 +1337,10 @@ RtlGetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||||||
PACL* Sacl,
|
PACL* Sacl,
|
||||||
PBOOLEAN SaclDefaulted);
|
PBOOLEAN SaclDefaulted);
|
||||||
|
|
||||||
|
BOOLEAN STDCALL
|
||||||
|
RtlGetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||||||
|
PUCHAR RMControl);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
STDCALL
|
STDCALL
|
||||||
RtlGetSetBootStatusData(
|
RtlGetSetBootStatusData(
|
||||||
|
@ -2321,6 +2325,10 @@ RtlSetSaclSecurityDescriptor (PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||||||
PACL Sacl,
|
PACL Sacl,
|
||||||
BOOLEAN SaclDefaulted);
|
BOOLEAN SaclDefaulted);
|
||||||
|
|
||||||
|
VOID STDCALL
|
||||||
|
RtlSetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||||||
|
PUCHAR RMControl);
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
NTSTATUS STDCALL
|
||||||
RtlSetInformationAcl (PACL Acl,
|
RtlSetInformationAcl (PACL Acl,
|
||||||
PVOID Information,
|
PVOID Information,
|
||||||
|
|
|
@ -36,13 +36,14 @@
|
||||||
/* Security descriptor control. */
|
/* Security descriptor control. */
|
||||||
#define SECURITY_DESCRIPTOR_REVISION (1)
|
#define SECURITY_DESCRIPTOR_REVISION (1)
|
||||||
#define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
|
#define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
|
||||||
#define SE_OWNER_DEFAULTED (1)
|
#define SE_OWNER_DEFAULTED (0x0001)
|
||||||
#define SE_GROUP_DEFAULTED (2)
|
#define SE_GROUP_DEFAULTED (0x0002)
|
||||||
#define SE_DACL_PRESENT (4)
|
#define SE_DACL_PRESENT (0x0004)
|
||||||
#define SE_DACL_DEFAULTED (8)
|
#define SE_DACL_DEFAULTED (0x0008)
|
||||||
#define SE_SACL_PRESENT (16)
|
#define SE_SACL_PRESENT (0x0010)
|
||||||
#define SE_SACL_DEFAULTED (32)
|
#define SE_SACL_DEFAULTED (0x0020)
|
||||||
#define SE_SELF_RELATIVE (32768)
|
#define SE_RM_CONTROL_VALID (0x4000)
|
||||||
|
#define SE_SELF_RELATIVE (0x8000)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This is defined in the Win 32 API headers as something else: */
|
/* This is defined in the Win 32 API headers as something else: */
|
||||||
|
|
|
@ -54,7 +54,7 @@ ControlService@12
|
||||||
ConvertSidToStringSidA@8
|
ConvertSidToStringSidA@8
|
||||||
ConvertSidToStringSidW@8
|
ConvertSidToStringSidW@8
|
||||||
CopySid@12
|
CopySid@12
|
||||||
;CreatePrivateObjectSecurity@24
|
CreatePrivateObjectSecurity@24
|
||||||
CreateProcessAsUserA@44
|
CreateProcessAsUserA@44
|
||||||
CreateProcessAsUserW@44
|
CreateProcessAsUserW@44
|
||||||
CreateServiceA@52
|
CreateServiceA@52
|
||||||
|
@ -93,7 +93,7 @@ DeleteService@4
|
||||||
;DenyAccessRightsA
|
;DenyAccessRightsA
|
||||||
;DenyAccessRightsW
|
;DenyAccessRightsW
|
||||||
DeregisterEventSource@4
|
DeregisterEventSource@4
|
||||||
;DestroyPrivateObjectSecurity@4
|
DestroyPrivateObjectSecurity@4
|
||||||
DuplicateToken@12
|
DuplicateToken@12
|
||||||
DuplicateTokenEx@24
|
DuplicateTokenEx@24
|
||||||
;ElfBackupEventLogFileA@8
|
;ElfBackupEventLogFileA@8
|
||||||
|
@ -157,7 +157,7 @@ GetNamedSecurityInfoA@32
|
||||||
GetNamedSecurityInfoW@32
|
GetNamedSecurityInfoW@32
|
||||||
GetNumberOfEventLogRecords@8
|
GetNumberOfEventLogRecords@8
|
||||||
GetOldestEventLogRecord@8
|
GetOldestEventLogRecord@8
|
||||||
;GetPrivateObjectSecurity@20
|
GetPrivateObjectSecurity@20
|
||||||
GetSecurityDescriptorControl@12
|
GetSecurityDescriptorControl@12
|
||||||
GetSecurityDescriptorDacl@16
|
GetSecurityDescriptorDacl@16
|
||||||
GetSecurityDescriptorGroup@12
|
GetSecurityDescriptorGroup@12
|
||||||
|
@ -379,7 +379,8 @@ SetFileSecurityW@12
|
||||||
SetKernelObjectSecurity@12
|
SetKernelObjectSecurity@12
|
||||||
SetNamedSecurityInfoA@28
|
SetNamedSecurityInfoA@28
|
||||||
SetNamedSecurityInfoW@28
|
SetNamedSecurityInfoW@28
|
||||||
;SetPrivateObjectSecurity@20
|
SetPrivateObjectSecurity@20
|
||||||
|
SetSecurityDescriptorControl@12
|
||||||
SetSecurityDescriptorDacl@16
|
SetSecurityDescriptorDacl@16
|
||||||
SetSecurityDescriptorGroup@12
|
SetSecurityDescriptorGroup@12
|
||||||
SetSecurityDescriptorOwner@12
|
SetSecurityDescriptorOwner@12
|
||||||
|
|
|
@ -144,6 +144,23 @@ GetSecurityDescriptorOwner (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
DWORD
|
||||||
|
STDCALL
|
||||||
|
GetSecurityDescriptorRMControl (
|
||||||
|
PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||||||
|
PUCHAR RMControl)
|
||||||
|
{
|
||||||
|
if (!RtlGetSecurityDescriptorRMControl(SecurityDescriptor,
|
||||||
|
RMControl))
|
||||||
|
return ERROR_INVALID_DATA;
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -288,6 +305,31 @@ MakeSelfRelativeSD (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
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
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -368,6 +410,22 @@ SetSecurityDescriptorOwner (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
DWORD
|
||||||
|
STDCALL
|
||||||
|
SetSecurityDescriptorRMControl (
|
||||||
|
PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||||||
|
PUCHAR RMControl)
|
||||||
|
{
|
||||||
|
RtlSetSecurityDescriptorRMControl(SecurityDescriptor,
|
||||||
|
RMControl);
|
||||||
|
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -369,8 +369,6 @@ RtlDecompressFragment@32
|
||||||
RtlDeleteAce@8
|
RtlDeleteAce@8
|
||||||
RtlDeleteAtomFromAtomTable@8
|
RtlDeleteAtomFromAtomTable@8
|
||||||
RtlDeleteCriticalSection@4
|
RtlDeleteCriticalSection@4
|
||||||
RtlDuplicateUnicodeString@12
|
|
||||||
RtlSetCriticalSectionSpinCount@8
|
|
||||||
;RtlDeleteElementGenericTable
|
;RtlDeleteElementGenericTable
|
||||||
;RtlDeleteNoSplay
|
;RtlDeleteNoSplay
|
||||||
RtlDeleteOwnersRanges@8
|
RtlDeleteOwnersRanges@8
|
||||||
|
@ -394,6 +392,7 @@ RtlDosSearchPath_U@24
|
||||||
RtlDowncaseUnicodeChar@4
|
RtlDowncaseUnicodeChar@4
|
||||||
RtlDowncaseUnicodeString@12
|
RtlDowncaseUnicodeString@12
|
||||||
RtlDumpResource@4
|
RtlDumpResource@4
|
||||||
|
RtlDuplicateUnicodeString@12
|
||||||
RtlEmptyAtomTable@8
|
RtlEmptyAtomTable@8
|
||||||
RtlEnlargedIntegerMultiply@8
|
RtlEnlargedIntegerMultiply@8
|
||||||
RtlEnlargedUnsignedDivide@16
|
RtlEnlargedUnsignedDivide@16
|
||||||
|
@ -462,6 +461,7 @@ RtlGetNtVersionNumbers@12
|
||||||
RtlGetOwnerSecurityDescriptor@12
|
RtlGetOwnerSecurityDescriptor@12
|
||||||
RtlGetProcessHeaps@8
|
RtlGetProcessHeaps@8
|
||||||
RtlGetSaclSecurityDescriptor@16
|
RtlGetSaclSecurityDescriptor@16
|
||||||
|
RtlGetSecurityDescriptorRMControl@8
|
||||||
;RtlGetUserInfoHeap
|
;RtlGetUserInfoHeap
|
||||||
RtlGetVersion@4
|
RtlGetVersion@4
|
||||||
RtlIdentifierAuthoritySid@4
|
RtlIdentifierAuthoritySid@4
|
||||||
|
@ -586,6 +586,7 @@ RtlSetAllBits@4
|
||||||
;RtlSetAttributesSecurityDescriptor
|
;RtlSetAttributesSecurityDescriptor
|
||||||
RtlSetBits@12
|
RtlSetBits@12
|
||||||
RtlSetControlSecurityDescriptor@12
|
RtlSetControlSecurityDescriptor@12
|
||||||
|
RtlSetCriticalSectionSpinCount@8
|
||||||
RtlSetCurrentDirectory_U@4
|
RtlSetCurrentDirectory_U@4
|
||||||
RtlSetCurrentEnvironment@8
|
RtlSetCurrentEnvironment@8
|
||||||
RtlSetDaclSecurityDescriptor@16
|
RtlSetDaclSecurityDescriptor@16
|
||||||
|
@ -594,6 +595,7 @@ RtlSetGroupSecurityDescriptor@12
|
||||||
RtlSetInformationAcl@16
|
RtlSetInformationAcl@16
|
||||||
RtlSetOwnerSecurityDescriptor@12
|
RtlSetOwnerSecurityDescriptor@12
|
||||||
RtlSetSaclSecurityDescriptor@16
|
RtlSetSaclSecurityDescriptor@16
|
||||||
|
RtlSetSecurityDescriptorRMControl@8
|
||||||
;RtlSetSecurityObject
|
;RtlSetSecurityObject
|
||||||
RtlSetTimeZoneInformation@4
|
RtlSetTimeZoneInformation@4
|
||||||
;RtlSetUnicodeCallouts
|
;RtlSetUnicodeCallouts
|
||||||
|
|
|
@ -870,4 +870,43 @@ RtlValidRelativeSecurityDescriptor(IN PSECURITY_DESCRIPTOR SecurityDescriptorInp
|
||||||
return TRUE;
|
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 */
|
/* EOF */
|
||||||
|
|
|
@ -1457,6 +1457,7 @@ BOOL WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL*,LPBOOL);
|
||||||
BOOL WINAPI GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID*,LPBOOL);
|
BOOL WINAPI GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID*,LPBOOL);
|
||||||
DWORD WINAPI GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR);
|
DWORD WINAPI GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR);
|
||||||
BOOL WINAPI GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID*,LPBOOL);
|
BOOL WINAPI GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID*,LPBOOL);
|
||||||
|
DWORD WINAPI GetSecurityDescriptorRMControl(PSECURITY_DESCRIPTOR,PUCHAR);
|
||||||
BOOL WINAPI GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL*,LPBOOL);
|
BOOL WINAPI GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL*,LPBOOL);
|
||||||
DWORD WINAPI GetShortPathNameA(LPCSTR,LPSTR,DWORD);
|
DWORD WINAPI GetShortPathNameA(LPCSTR,LPSTR,DWORD);
|
||||||
DWORD WINAPI GetShortPathNameW(LPCWSTR,LPWSTR,DWORD);
|
DWORD WINAPI GetShortPathNameW(LPCWSTR,LPWSTR,DWORD);
|
||||||
|
@ -1835,6 +1836,7 @@ BOOL WINAPI SetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTO
|
||||||
BOOL WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
|
BOOL WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
|
||||||
BOOL WINAPI SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID,BOOL);
|
BOOL WINAPI SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID,BOOL);
|
||||||
BOOL WINAPI SetSecurityDescriptorOwner(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 SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
|
||||||
BOOL WINAPI SetStdHandle(DWORD,HANDLE);
|
BOOL WINAPI SetStdHandle(DWORD,HANDLE);
|
||||||
#define SetSwapAreaSize(w) (w)
|
#define SetSwapAreaSize(w) (w)
|
||||||
|
|
Loading…
Reference in a new issue