mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 12:03:29 +00:00
[RTL]
Improve formatting, no code change svn path=/trunk/; revision=53736
This commit is contained in:
parent
ba37ccaf01
commit
ba2b3c872a
1 changed files with 547 additions and 539 deletions
|
@ -14,14 +14,15 @@
|
||||||
|
|
||||||
/* FUNCTIONS ***************************************************************/
|
/* FUNCTIONS ***************************************************************/
|
||||||
|
|
||||||
BOOLEAN NTAPI
|
BOOLEAN
|
||||||
RtlFirstFreeAce(PACL Acl,
|
NTAPI
|
||||||
|
RtlFirstFreeAce(
|
||||||
|
PACL Acl,
|
||||||
PACE* Ace)
|
PACE* Ace)
|
||||||
{
|
{
|
||||||
PACE Current;
|
PACE Current;
|
||||||
ULONG_PTR AclEnd;
|
ULONG_PTR AclEnd;
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
Current = (PACE)(Acl + 1);
|
Current = (PACE)(Acl + 1);
|
||||||
|
@ -30,7 +31,7 @@ RtlFirstFreeAce(PACL Acl,
|
||||||
if (Acl->AceCount == 0)
|
if (Acl->AceCount == 0)
|
||||||
{
|
{
|
||||||
*Ace = Current;
|
*Ace = Current;
|
||||||
return(TRUE);
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
@ -39,12 +40,12 @@ RtlFirstFreeAce(PACL Acl,
|
||||||
{
|
{
|
||||||
if ((ULONG_PTR)Current >= AclEnd)
|
if ((ULONG_PTR)Current >= AclEnd)
|
||||||
{
|
{
|
||||||
return(FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (Current->Header.AceType == ACCESS_ALLOWED_COMPOUND_ACE_TYPE &&
|
if (Current->Header.AceType == ACCESS_ALLOWED_COMPOUND_ACE_TYPE &&
|
||||||
Acl->AclRevision < ACL_REVISION3)
|
Acl->AclRevision < ACL_REVISION3)
|
||||||
{
|
{
|
||||||
return(FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
Current = (PACE)((ULONG_PTR)Current + Current->Header.AceSize);
|
Current = (PACE)((ULONG_PTR)Current + Current->Header.AceSize);
|
||||||
}
|
}
|
||||||
|
@ -55,27 +56,28 @@ RtlFirstFreeAce(PACL Acl,
|
||||||
*Ace = Current;
|
*Ace = Current;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(TRUE);
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlGetAce(PACL Acl,
|
NTAPI
|
||||||
|
RtlGetAce(
|
||||||
|
PACL Acl,
|
||||||
ULONG AceIndex,
|
ULONG AceIndex,
|
||||||
PVOID *Ace)
|
PVOID *Ace)
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
||||||
Acl->AclRevision > MAX_ACL_REVISION ||
|
Acl->AclRevision > MAX_ACL_REVISION ||
|
||||||
AceIndex >= Acl->AceCount)
|
AceIndex >= Acl->AceCount)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
*Ace = (PVOID)((PACE)(Acl + 1));
|
*Ace = (PVOID)((PACE)(Acl + 1));
|
||||||
|
@ -84,22 +86,24 @@ RtlGetAce(PACL Acl,
|
||||||
{
|
{
|
||||||
if ((ULONG_PTR)*Ace >= (ULONG_PTR)Acl + Acl->AclSize)
|
if ((ULONG_PTR)*Ace >= (ULONG_PTR)Acl + Acl->AclSize)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
*Ace = (PVOID)((PACE)((ULONG_PTR)(*Ace) + ((PACE)(*Ace))->Header.AceSize));
|
*Ace = (PVOID)((PACE)((ULONG_PTR)(*Ace) + ((PACE)(*Ace))->Header.AceSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ULONG_PTR)*Ace >= (ULONG_PTR)Acl + Acl->AclSize)
|
if ((ULONG_PTR)*Ace >= (ULONG_PTR)Acl + Acl->AclSize)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static NTSTATUS
|
static
|
||||||
RtlpAddKnownAce (PACL Acl,
|
NTSTATUS
|
||||||
|
RtlpAddKnownAce(
|
||||||
|
PACL Acl,
|
||||||
ULONG Revision,
|
ULONG Revision,
|
||||||
ULONG Flags,
|
ULONG Flags,
|
||||||
ACCESS_MASK AccessMask,
|
ACCESS_MASK AccessMask,
|
||||||
|
@ -112,7 +116,6 @@ RtlpAddKnownAce (PACL Acl,
|
||||||
PSID SidStart;
|
PSID SidStart;
|
||||||
ULONG AceSize, InvalidFlags;
|
ULONG AceSize, InvalidFlags;
|
||||||
ULONG AceObjectFlags = 0;
|
ULONG AceObjectFlags = 0;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
#if DBG
|
#if DBG
|
||||||
|
@ -139,7 +142,7 @@ RtlpAddKnownAce (PACL Acl,
|
||||||
|
|
||||||
if (!RtlValidSid(Sid))
|
if (!RtlValidSid(Sid))
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_SID);
|
return STATUS_INVALID_SID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Type == SYSTEM_MANDATORY_LABEL_ACE_TYPE)
|
if (Type == SYSTEM_MANDATORY_LABEL_ACE_TYPE)
|
||||||
|
@ -158,8 +161,9 @@ RtlpAddKnownAce (PACL Acl,
|
||||||
if (Acl->AclRevision > MAX_ACL_REVISION ||
|
if (Acl->AclRevision > MAX_ACL_REVISION ||
|
||||||
Revision > MAX_ACL_REVISION)
|
Revision > MAX_ACL_REVISION)
|
||||||
{
|
{
|
||||||
return(STATUS_UNKNOWN_REVISION);
|
return STATUS_UNKNOWN_REVISION;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Revision < Acl->AclRevision)
|
if (Revision < Acl->AclRevision)
|
||||||
{
|
{
|
||||||
Revision = Acl->AclRevision;
|
Revision = Acl->AclRevision;
|
||||||
|
@ -180,16 +184,16 @@ RtlpAddKnownAce (PACL Acl,
|
||||||
|
|
||||||
if (InvalidFlags != 0)
|
if (InvalidFlags != 0)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!RtlFirstFreeAce(Acl, &Ace))
|
if (!RtlFirstFreeAce(Acl, &Ace))
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_ACL);
|
return STATUS_INVALID_ACL;
|
||||||
}
|
}
|
||||||
if (Ace == NULL)
|
if (Ace == NULL)
|
||||||
{
|
{
|
||||||
return(STATUS_ALLOTTED_SPACE_EXCEEDED);
|
return STATUS_ALLOTTED_SPACE_EXCEEDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate the size of the ACE */
|
/* Calculate the size of the ACE */
|
||||||
|
@ -215,7 +219,7 @@ RtlpAddKnownAce (PACL Acl,
|
||||||
if ((ULONG_PTR)Ace + AceSize >
|
if ((ULONG_PTR)Ace + AceSize >
|
||||||
(ULONG_PTR)Acl + Acl->AclSize)
|
(ULONG_PTR)Acl + Acl->AclSize)
|
||||||
{
|
{
|
||||||
return(STATUS_ALLOTTED_SPACE_EXCEEDED);
|
return STATUS_ALLOTTED_SPACE_EXCEEDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* initialize the header and common fields */
|
/* initialize the header and common fields */
|
||||||
|
@ -237,41 +241,38 @@ RtlpAddKnownAce (PACL Acl,
|
||||||
/* copy the GUIDs */
|
/* copy the GUIDs */
|
||||||
if (ObjectTypeGuid != NULL)
|
if (ObjectTypeGuid != NULL)
|
||||||
{
|
{
|
||||||
RtlCopyMemory(SidStart,
|
RtlCopyMemory(SidStart, ObjectTypeGuid, sizeof(GUID));
|
||||||
ObjectTypeGuid,
|
|
||||||
sizeof(GUID));
|
|
||||||
SidStart = (PSID)((ULONG_PTR)SidStart + sizeof(GUID));
|
SidStart = (PSID)((ULONG_PTR)SidStart + sizeof(GUID));
|
||||||
}
|
}
|
||||||
if (InheritedObjectTypeGuid != NULL)
|
if (InheritedObjectTypeGuid != NULL)
|
||||||
{
|
{
|
||||||
RtlCopyMemory(SidStart,
|
RtlCopyMemory(SidStart, InheritedObjectTypeGuid, sizeof(GUID));
|
||||||
InheritedObjectTypeGuid,
|
|
||||||
sizeof(GUID));
|
|
||||||
SidStart = (PSID)((ULONG_PTR)SidStart + sizeof(GUID));
|
SidStart = (PSID)((ULONG_PTR)SidStart + sizeof(GUID));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy the SID */
|
/* copy the SID */
|
||||||
RtlCopySid(RtlLengthSid(Sid),
|
RtlCopySid(RtlLengthSid(Sid), SidStart, Sid);
|
||||||
SidStart,
|
|
||||||
Sid);
|
|
||||||
Acl->AceCount++;
|
Acl->AceCount++;
|
||||||
Acl->AclRevision = Revision;
|
Acl->AclRevision = Revision;
|
||||||
return(STATUS_SUCCESS);
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAccessAllowedAce (IN OUT PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAccessAllowedAce(
|
||||||
|
IN OUT PACL Acl,
|
||||||
IN ULONG Revision,
|
IN ULONG Revision,
|
||||||
IN ACCESS_MASK AccessMask,
|
IN ACCESS_MASK AccessMask,
|
||||||
IN PSID Sid)
|
IN PSID Sid)
|
||||||
{
|
{
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
return RtlpAddKnownAce(Acl,
|
||||||
Revision,
|
Revision,
|
||||||
0,
|
0,
|
||||||
AccessMask,
|
AccessMask,
|
||||||
|
@ -285,8 +286,10 @@ RtlAddAccessAllowedAce (IN OUT PACL Acl,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAccessAllowedAceEx (IN OUT PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAccessAllowedAceEx(
|
||||||
|
IN OUT PACL Acl,
|
||||||
IN ULONG Revision,
|
IN ULONG Revision,
|
||||||
IN ULONG Flags,
|
IN ULONG Flags,
|
||||||
IN ACCESS_MASK AccessMask,
|
IN ACCESS_MASK AccessMask,
|
||||||
|
@ -294,7 +297,7 @@ RtlAddAccessAllowedAceEx (IN OUT PACL Acl,
|
||||||
{
|
{
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
return RtlpAddKnownAce(Acl,
|
||||||
Revision,
|
Revision,
|
||||||
Flags,
|
Flags,
|
||||||
AccessMask,
|
AccessMask,
|
||||||
|
@ -308,8 +311,10 @@ RtlAddAccessAllowedAceEx (IN OUT PACL Acl,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAccessAllowedObjectAce (IN OUT PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAccessAllowedObjectAce(
|
||||||
|
IN OUT PACL Acl,
|
||||||
IN ULONG Revision,
|
IN ULONG Revision,
|
||||||
IN ULONG Flags,
|
IN ULONG Flags,
|
||||||
IN ACCESS_MASK AccessMask,
|
IN ACCESS_MASK AccessMask,
|
||||||
|
@ -318,7 +323,6 @@ RtlAddAccessAllowedObjectAce (IN OUT PACL Acl,
|
||||||
IN PSID Sid)
|
IN PSID Sid)
|
||||||
{
|
{
|
||||||
ULONG Type;
|
ULONG Type;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
/* make sure we call RtlpAddKnownAce correctly */
|
/* make sure we call RtlpAddKnownAce correctly */
|
||||||
|
@ -327,7 +331,7 @@ RtlAddAccessAllowedObjectAce (IN OUT PACL Acl,
|
||||||
else
|
else
|
||||||
Type = ACCESS_ALLOWED_ACE_TYPE;
|
Type = ACCESS_ALLOWED_ACE_TYPE;
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
return RtlpAddKnownAce(Acl,
|
||||||
Revision,
|
Revision,
|
||||||
Flags,
|
Flags,
|
||||||
AccessMask,
|
AccessMask,
|
||||||
|
@ -341,15 +345,17 @@ RtlAddAccessAllowedObjectAce (IN OUT PACL Acl,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAccessDeniedAce (PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAccessDeniedAce(
|
||||||
|
PACL Acl,
|
||||||
ULONG Revision,
|
ULONG Revision,
|
||||||
ACCESS_MASK AccessMask,
|
ACCESS_MASK AccessMask,
|
||||||
PSID Sid)
|
PSID Sid)
|
||||||
{
|
{
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
return RtlpAddKnownAce(Acl,
|
||||||
Revision,
|
Revision,
|
||||||
0,
|
0,
|
||||||
AccessMask,
|
AccessMask,
|
||||||
|
@ -363,8 +369,10 @@ RtlAddAccessDeniedAce (PACL Acl,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAccessDeniedAceEx (IN OUT PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAccessDeniedAceEx(
|
||||||
|
IN OUT PACL Acl,
|
||||||
IN ULONG Revision,
|
IN ULONG Revision,
|
||||||
IN ULONG Flags,
|
IN ULONG Flags,
|
||||||
IN ACCESS_MASK AccessMask,
|
IN ACCESS_MASK AccessMask,
|
||||||
|
@ -372,7 +380,7 @@ RtlAddAccessDeniedAceEx (IN OUT PACL Acl,
|
||||||
{
|
{
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
return RtlpAddKnownAce(Acl,
|
||||||
Revision,
|
Revision,
|
||||||
Flags,
|
Flags,
|
||||||
AccessMask,
|
AccessMask,
|
||||||
|
@ -386,8 +394,10 @@ RtlAddAccessDeniedAceEx (IN OUT PACL Acl,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAccessDeniedObjectAce (IN OUT PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAccessDeniedObjectAce(
|
||||||
|
IN OUT PACL Acl,
|
||||||
IN ULONG Revision,
|
IN ULONG Revision,
|
||||||
IN ULONG Flags,
|
IN ULONG Flags,
|
||||||
IN ACCESS_MASK AccessMask,
|
IN ACCESS_MASK AccessMask,
|
||||||
|
@ -396,7 +406,6 @@ RtlAddAccessDeniedObjectAce (IN OUT PACL Acl,
|
||||||
IN PSID Sid)
|
IN PSID Sid)
|
||||||
{
|
{
|
||||||
ULONG Type;
|
ULONG Type;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
/* make sure we call RtlpAddKnownAce correctly */
|
/* make sure we call RtlpAddKnownAce correctly */
|
||||||
|
@ -405,7 +414,7 @@ RtlAddAccessDeniedObjectAce (IN OUT PACL Acl,
|
||||||
else
|
else
|
||||||
Type = ACCESS_DENIED_ACE_TYPE;
|
Type = ACCESS_DENIED_ACE_TYPE;
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
return RtlpAddKnownAce(Acl,
|
||||||
Revision,
|
Revision,
|
||||||
Flags,
|
Flags,
|
||||||
AccessMask,
|
AccessMask,
|
||||||
|
@ -416,8 +425,10 @@ RtlAddAccessDeniedObjectAce (IN OUT PACL Acl,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static VOID
|
static
|
||||||
RtlpAddData(PVOID AceList,
|
VOID
|
||||||
|
RtlpAddData(
|
||||||
|
PVOID AceList,
|
||||||
ULONG AceListLength,
|
ULONG AceListLength,
|
||||||
PVOID Ace,
|
PVOID Ace,
|
||||||
ULONG Offset)
|
ULONG Offset)
|
||||||
|
@ -431,9 +442,7 @@ RtlpAddData(PVOID AceList,
|
||||||
|
|
||||||
if (AceListLength != 0)
|
if (AceListLength != 0)
|
||||||
{
|
{
|
||||||
RtlCopyMemory(Ace,
|
RtlCopyMemory(Ace, AceList, AceListLength);
|
||||||
AceList,
|
|
||||||
AceListLength);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,8 +450,10 @@ RtlpAddData(PVOID AceList,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAce(PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAce(
|
||||||
|
PACL Acl,
|
||||||
ULONG AclRevision,
|
ULONG AclRevision,
|
||||||
ULONG StartingIndex,
|
ULONG StartingIndex,
|
||||||
PVOID AceList,
|
PVOID AceList,
|
||||||
|
@ -452,14 +463,13 @@ RtlAddAce(PACL Acl,
|
||||||
PACE Current;
|
PACE Current;
|
||||||
ULONG NewAceCount;
|
ULONG NewAceCount;
|
||||||
ULONG Index;
|
ULONG Index;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
||||||
Acl->AclRevision > MAX_ACL_REVISION ||
|
Acl->AclRevision > MAX_ACL_REVISION ||
|
||||||
!RtlFirstFreeAce(Acl, &Ace))
|
!RtlFirstFreeAce(Acl, &Ace))
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Acl->AclRevision <= AclRevision)
|
if (Acl->AclRevision <= AclRevision)
|
||||||
|
@ -469,7 +479,7 @@ RtlAddAce(PACL Acl,
|
||||||
|
|
||||||
if (((ULONG_PTR)AceList + AceListLength) <= (ULONG_PTR)AceList)
|
if (((ULONG_PTR)AceList + AceListLength) <= (ULONG_PTR)AceList)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Current = AceList, NewAceCount = 0;
|
for (Current = AceList, NewAceCount = 0;
|
||||||
|
@ -480,14 +490,14 @@ RtlAddAce(PACL Acl,
|
||||||
if (((PACE)AceList)->Header.AceType == ACCESS_ALLOWED_COMPOUND_ACE_TYPE &&
|
if (((PACE)AceList)->Header.AceType == ACCESS_ALLOWED_COMPOUND_ACE_TYPE &&
|
||||||
AclRevision < ACL_REVISION3)
|
AclRevision < ACL_REVISION3)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Ace == NULL ||
|
if (Ace == NULL ||
|
||||||
((ULONG_PTR)Ace + AceListLength) > ((ULONG_PTR)Acl + Acl->AclSize))
|
((ULONG_PTR)Ace + AceListLength) > ((ULONG_PTR)Acl + Acl->AclSize))
|
||||||
{
|
{
|
||||||
return(STATUS_BUFFER_TOO_SMALL);
|
return STATUS_BUFFER_TOO_SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Current = (PACE)(Acl + 1);
|
Current = (PACE)(Acl + 1);
|
||||||
|
@ -503,15 +513,17 @@ RtlAddAce(PACL Acl,
|
||||||
Acl->AceCount = Acl->AceCount + NewAceCount;
|
Acl->AceCount = Acl->AceCount + NewAceCount;
|
||||||
Acl->AclRevision = AclRevision;
|
Acl->AclRevision = AclRevision;
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAuditAccessAce(PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAuditAccessAce(
|
||||||
|
PACL Acl,
|
||||||
ULONG Revision,
|
ULONG Revision,
|
||||||
ACCESS_MASK AccessMask,
|
ACCESS_MASK AccessMask,
|
||||||
PSID Sid,
|
PSID Sid,
|
||||||
|
@ -519,20 +531,12 @@ RtlAddAuditAccessAce(PACL Acl,
|
||||||
BOOLEAN Failure)
|
BOOLEAN Failure)
|
||||||
{
|
{
|
||||||
ULONG Flags = 0;
|
ULONG Flags = 0;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
if (Success)
|
if (Success) Flags |= SUCCESSFUL_ACCESS_ACE_FLAG;
|
||||||
{
|
if (Failure) Flags |= FAILED_ACCESS_ACE_FLAG;
|
||||||
Flags |= SUCCESSFUL_ACCESS_ACE_FLAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Failure)
|
return RtlpAddKnownAce(Acl,
|
||||||
{
|
|
||||||
Flags |= FAILED_ACCESS_ACE_FLAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
|
||||||
Revision,
|
Revision,
|
||||||
Flags,
|
Flags,
|
||||||
AccessMask,
|
AccessMask,
|
||||||
|
@ -546,8 +550,10 @@ RtlAddAuditAccessAce(PACL Acl,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAuditAccessAceEx(PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAuditAccessAceEx(
|
||||||
|
PACL Acl,
|
||||||
ULONG Revision,
|
ULONG Revision,
|
||||||
ULONG Flags,
|
ULONG Flags,
|
||||||
ACCESS_MASK AccessMask,
|
ACCESS_MASK AccessMask,
|
||||||
|
@ -555,17 +561,10 @@ RtlAddAuditAccessAceEx(PACL Acl,
|
||||||
BOOLEAN Success,
|
BOOLEAN Success,
|
||||||
BOOLEAN Failure)
|
BOOLEAN Failure)
|
||||||
{
|
{
|
||||||
if (Success)
|
if (Success) Flags |= SUCCESSFUL_ACCESS_ACE_FLAG;
|
||||||
{
|
if (Failure) Flags |= FAILED_ACCESS_ACE_FLAG;
|
||||||
Flags |= SUCCESSFUL_ACCESS_ACE_FLAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Failure)
|
return RtlpAddKnownAce(Acl,
|
||||||
{
|
|
||||||
Flags |= FAILED_ACCESS_ACE_FLAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
|
||||||
Revision,
|
Revision,
|
||||||
Flags,
|
Flags,
|
||||||
AccessMask,
|
AccessMask,
|
||||||
|
@ -579,8 +578,10 @@ RtlAddAuditAccessAceEx(PACL Acl,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddAuditAccessObjectAce(PACL Acl,
|
NTAPI
|
||||||
|
RtlAddAuditAccessObjectAce(
|
||||||
|
PACL Acl,
|
||||||
ULONG Revision,
|
ULONG Revision,
|
||||||
ULONG Flags,
|
ULONG Flags,
|
||||||
ACCESS_MASK AccessMask,
|
ACCESS_MASK AccessMask,
|
||||||
|
@ -608,7 +609,7 @@ RtlAddAuditAccessObjectAce(PACL Acl,
|
||||||
else
|
else
|
||||||
Type = SYSTEM_AUDIT_ACE_TYPE;
|
Type = SYSTEM_AUDIT_ACE_TYPE;
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
return RtlpAddKnownAce(Acl,
|
||||||
Revision,
|
Revision,
|
||||||
Flags,
|
Flags,
|
||||||
AccessMask,
|
AccessMask,
|
||||||
|
@ -622,8 +623,10 @@ RtlAddAuditAccessObjectAce(PACL Acl,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlAddMandatoryAce(IN OUT PACL Acl,
|
NTAPI
|
||||||
|
RtlAddMandatoryAce(
|
||||||
|
IN OUT PACL Acl,
|
||||||
IN ULONG Revision,
|
IN ULONG Revision,
|
||||||
IN ULONG Flags,
|
IN ULONG Flags,
|
||||||
IN ULONG MandatoryFlags,
|
IN ULONG MandatoryFlags,
|
||||||
|
@ -636,7 +639,7 @@ RtlAddMandatoryAce(IN OUT PACL Acl,
|
||||||
if (AceType != SYSTEM_MANDATORY_LABEL_ACE_TYPE)
|
if (AceType != SYSTEM_MANDATORY_LABEL_ACE_TYPE)
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
return RtlpAddKnownAce (Acl,
|
return RtlpAddKnownAce(Acl,
|
||||||
Revision,
|
Revision,
|
||||||
Flags,
|
Flags,
|
||||||
(ACCESS_MASK)MandatoryFlags,
|
(ACCESS_MASK)MandatoryFlags,
|
||||||
|
@ -647,8 +650,10 @@ RtlAddMandatoryAce(IN OUT PACL Acl,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static VOID
|
static
|
||||||
RtlpDeleteData(PVOID Ace,
|
VOID
|
||||||
|
RtlpDeleteData(
|
||||||
|
PVOID Ace,
|
||||||
ULONG AceSize,
|
ULONG AceSize,
|
||||||
ULONG Offset)
|
ULONG Offset)
|
||||||
{
|
{
|
||||||
|
@ -661,8 +666,7 @@ RtlpDeleteData(PVOID Ace,
|
||||||
|
|
||||||
if (Offset - AceSize < Offset)
|
if (Offset - AceSize < Offset)
|
||||||
{
|
{
|
||||||
RtlZeroMemory((PVOID)((ULONG_PTR)Ace + Offset - AceSize),
|
RtlZeroMemory((PVOID)((ULONG_PTR)Ace + Offset - AceSize), AceSize);
|
||||||
AceSize);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -670,13 +674,14 @@ RtlpDeleteData(PVOID Ace,
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlDeleteAce(PACL Acl,
|
NTAPI
|
||||||
|
RtlDeleteAce(
|
||||||
|
PACL Acl,
|
||||||
ULONG AceIndex)
|
ULONG AceIndex)
|
||||||
{
|
{
|
||||||
PACE Ace;
|
PACE Ace;
|
||||||
PACE Current;
|
PACE Current;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
||||||
|
@ -684,7 +689,7 @@ RtlDeleteAce(PACL Acl,
|
||||||
Acl->AceCount <= AceIndex ||
|
Acl->AceCount <= AceIndex ||
|
||||||
!RtlFirstFreeAce(Acl, &Ace))
|
!RtlFirstFreeAce(Acl, &Ace))
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Current = (PACE)(Acl + 1);
|
Current = (PACE)(Acl + 1);
|
||||||
|
@ -699,15 +704,17 @@ RtlDeleteAce(PACL Acl,
|
||||||
(ULONG)((ULONG_PTR)Ace - (ULONG_PTR)Current));
|
(ULONG)((ULONG_PTR)Ace - (ULONG_PTR)Current));
|
||||||
Acl->AceCount--;
|
Acl->AceCount--;
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlCreateAcl(PACL Acl,
|
NTAPI
|
||||||
|
RtlCreateAcl(
|
||||||
|
PACL Acl,
|
||||||
ULONG AclSize,
|
ULONG AclSize,
|
||||||
ULONG AclRevision)
|
ULONG AclRevision)
|
||||||
{
|
{
|
||||||
|
@ -715,14 +722,14 @@ RtlCreateAcl(PACL Acl,
|
||||||
|
|
||||||
if (AclSize < sizeof(ACL))
|
if (AclSize < sizeof(ACL))
|
||||||
{
|
{
|
||||||
return(STATUS_BUFFER_TOO_SMALL);
|
return STATUS_BUFFER_TOO_SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AclRevision < MIN_ACL_REVISION ||
|
if (AclRevision < MIN_ACL_REVISION ||
|
||||||
AclRevision > MAX_ACL_REVISION ||
|
AclRevision > MAX_ACL_REVISION ||
|
||||||
AclSize > 0xffff)
|
AclSize > 0xffff)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
AclSize = ROUND_UP(AclSize, 4);
|
AclSize = ROUND_UP(AclSize, 4);
|
||||||
|
@ -732,27 +739,28 @@ RtlCreateAcl(PACL Acl,
|
||||||
Acl->Sbz1 = 0;
|
Acl->Sbz1 = 0;
|
||||||
Acl->Sbz2 = 0;
|
Acl->Sbz2 = 0;
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS NTAPI
|
NTSTATUS
|
||||||
RtlQueryInformationAcl(PACL Acl,
|
NTAPI
|
||||||
|
RtlQueryInformationAcl(
|
||||||
|
PACL Acl,
|
||||||
PVOID Information,
|
PVOID Information,
|
||||||
ULONG InformationLength,
|
ULONG InformationLength,
|
||||||
ACL_INFORMATION_CLASS InformationClass)
|
ACL_INFORMATION_CLASS InformationClass)
|
||||||
{
|
{
|
||||||
PACE Ace;
|
PACE Ace;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
||||||
Acl->AclRevision > MAX_ACL_REVISION)
|
Acl->AclRevision > MAX_ACL_REVISION)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (InformationClass)
|
switch (InformationClass)
|
||||||
|
@ -763,7 +771,7 @@ RtlQueryInformationAcl(PACL Acl,
|
||||||
|
|
||||||
if (InformationLength < sizeof(ACL_REVISION_INFORMATION))
|
if (InformationLength < sizeof(ACL_REVISION_INFORMATION))
|
||||||
{
|
{
|
||||||
return(STATUS_BUFFER_TOO_SMALL);
|
return STATUS_BUFFER_TOO_SMALL;
|
||||||
}
|
}
|
||||||
Info->AclRevision = Acl->AclRevision;
|
Info->AclRevision = Acl->AclRevision;
|
||||||
}
|
}
|
||||||
|
@ -775,12 +783,12 @@ RtlQueryInformationAcl(PACL Acl,
|
||||||
|
|
||||||
if (InformationLength < sizeof(ACL_SIZE_INFORMATION))
|
if (InformationLength < sizeof(ACL_SIZE_INFORMATION))
|
||||||
{
|
{
|
||||||
return(STATUS_BUFFER_TOO_SMALL);
|
return STATUS_BUFFER_TOO_SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!RtlFirstFreeAce(Acl, &Ace))
|
if (!RtlFirstFreeAce(Acl, &Ace))
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Info->AceCount = Acl->AceCount;
|
Info->AceCount = Acl->AceCount;
|
||||||
|
@ -798,10 +806,10 @@ RtlQueryInformationAcl(PACL Acl,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return(STATUS_INVALID_INFO_CLASS);
|
return STATUS_INVALID_INFO_CLASS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -819,7 +827,7 @@ RtlSetInformationAcl(PACL Acl,
|
||||||
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
||||||
Acl->AclRevision > MAX_ACL_REVISION)
|
Acl->AclRevision > MAX_ACL_REVISION)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (InformationClass)
|
switch (InformationClass)
|
||||||
|
@ -830,12 +838,12 @@ RtlSetInformationAcl(PACL Acl,
|
||||||
|
|
||||||
if (InformationLength < sizeof(ACL_REVISION_INFORMATION))
|
if (InformationLength < sizeof(ACL_REVISION_INFORMATION))
|
||||||
{
|
{
|
||||||
return(STATUS_BUFFER_TOO_SMALL);
|
return STATUS_BUFFER_TOO_SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Acl->AclRevision >= Info->AclRevision)
|
if (Acl->AclRevision >= Info->AclRevision)
|
||||||
{
|
{
|
||||||
return(STATUS_INVALID_PARAMETER);
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Acl->AclRevision = Info->AclRevision;
|
Acl->AclRevision = Info->AclRevision;
|
||||||
|
@ -843,22 +851,22 @@ RtlSetInformationAcl(PACL Acl,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return(STATUS_INVALID_INFO_CLASS);
|
return STATUS_INVALID_INFO_CLASS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOLEAN NTAPI
|
BOOLEAN
|
||||||
RtlValidAcl (PACL Acl)
|
NTAPI
|
||||||
|
RtlValidAcl(PACL Acl)
|
||||||
{
|
{
|
||||||
PACE Ace;
|
PACE Ace;
|
||||||
USHORT Size;
|
USHORT Size;
|
||||||
|
|
||||||
PAGED_CODE_RTL();
|
PAGED_CODE_RTL();
|
||||||
|
|
||||||
Size = ROUND_UP(Acl->AclSize, 4);
|
Size = ROUND_UP(Acl->AclSize, 4);
|
||||||
|
@ -866,15 +874,15 @@ RtlValidAcl (PACL Acl)
|
||||||
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
||||||
Acl->AclRevision > MAX_ACL_REVISION)
|
Acl->AclRevision > MAX_ACL_REVISION)
|
||||||
{
|
{
|
||||||
return(FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Size != Acl->AclSize)
|
if (Size != Acl->AclSize)
|
||||||
{
|
{
|
||||||
return(FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(RtlFirstFreeAce(Acl, &Ace));
|
return RtlFirstFreeAce(Acl, &Ace);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue