Implement RtlGetSecurityDescriptorRMControl, RtlSetSecurityDescriptorRMControl, SetSecurityDescriptorControl, GetSecurityDescriptorRMControl and SetSecurityDescriptorRMControl.

svn path=/trunk/; revision=13493
This commit is contained in:
Eric Kohl 2005-02-11 15:52:38 +00:00
parent 5930efc575
commit 1ca75be5f0
8 changed files with 142 additions and 30 deletions

View file

@ -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)

View file

@ -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,

View file

@ -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: */

View file

@ -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

View file

@ -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
*/ */

View file

@ -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

View file

@ -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 */

View file

@ -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)