Implement RtlAddAuditAccessAceEx().
authorEric Kohl <eric.kohl@reactos.org>
Thu, 15 Jul 2004 08:15:49 +0000 (08:15 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Thu, 15 Jul 2004 08:15:49 +0000 (08:15 +0000)
svn path=/trunk/; revision=10125

reactos/include/ntdll/rtl.h
reactos/lib/ntdll/def/ntdll.def
reactos/lib/ntdll/def/ntdll.edf
reactos/lib/rtl/acl.c

index 7d9895e..7a51648 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: rtl.h,v 1.45 2004/07/08 22:05:48 gvg Exp $
+/* $Id: rtl.h,v 1.46 2004/07/15 08:15:49 ekohl Exp $
  *
  */
 
@@ -131,6 +131,15 @@ RtlAddAccessDeniedAceEx (IN OUT PACL Acl,
                         IN ACCESS_MASK AccessMask,
                         IN PSID Sid);
 
+NTSTATUS STDCALL
+RtlAddAuditAccessAceEx(IN OUT PACL Acl,
+                      IN ULONG Revision,
+                       IN ULONG Flags,
+                       IN ACCESS_MASK AccessMask,
+                       IN PSID Sid,
+                       IN BOOLEAN Success,
+                       IN BOOLEAN Failure);
+
 VOID STDCALL
 RtlDeleteCriticalSection (PCRITICAL_SECTION CriticalSection);
 
index eabbc65..1b64289 100644 (file)
@@ -1,4 +1,4 @@
-; $Id: ntdll.def,v 1.124 2004/07/08 00:40:30 weiden Exp $
+; $Id: ntdll.def,v 1.125 2004/07/15 08:15:20 ekohl Exp $
 ;
 ; ReactOS Operating System
 ;
@@ -294,6 +294,7 @@ RtlAddAce@20
 RtlAddAtomToAtomTable@12
 ;RtlAddAttributeActionToRXact
 RtlAddAuditAccessAce@24
+RtlAddAuditAccessAceEx@28
 ;RtlAddCompoundAce
 RtlAddRange@36
 RtlAdjustPrivilege@16
index ebfbc5a..356d63b 100644 (file)
@@ -1,4 +1,4 @@
-; $Id: ntdll.edf,v 1.114 2004/07/08 00:40:30 weiden Exp $
+; $Id: ntdll.edf,v 1.115 2004/07/15 08:15:21 ekohl Exp $
 ;
 ; ReactOS Operating System
 ;
@@ -294,6 +294,7 @@ RtlAddAce=RtlAddAce@20
 RtlAddAtomToAtomTable=RtlAddAtomToAtomTable@12
 ;RtlAddAttributeActionToRXact
 RtlAddAuditAccessAce=RtlAddAuditAccessAce@24
+RtlAddAuditAccessAceEx=RtlAddAuditAccessAceEx@28
 ;RtlAddCompoundAce
 RtlAddRange=RtlAddRange@36
 RtlAdjustPrivilege=RtlAdjustPrivilege@16
index 1e27a2e..c401def 100644 (file)
@@ -395,6 +395,75 @@ RtlAddAuditAccessAce(PACL Acl,
 }
 
 
+/*
+ * @implemented
+ */
+NTSTATUS STDCALL
+RtlAddAuditAccessAceEx(PACL Acl,
+                       ULONG Revision,
+                       ULONG Flags,
+                       ACCESS_MASK AccessMask,
+                       PSID Sid,
+                       BOOLEAN Success,
+                       BOOLEAN Failure)
+{
+  PACE Ace;
+
+  if (Success != FALSE)
+  {
+    Flags |= SUCCESSFUL_ACCESS_ACE_FLAG;
+  }
+
+  if (Failure != FALSE)
+  {
+    Flags |= FAILED_ACCESS_ACE_FLAG;
+  }
+
+  if (!RtlValidSid(Sid))
+  {
+    return STATUS_INVALID_SID;
+  }
+
+  if (Acl->AclRevision > MAX_ACL_REVISION ||
+      Revision > MAX_ACL_REVISION)
+  {
+    return STATUS_REVISION_MISMATCH;
+  }
+
+  if (Revision < Acl->AclRevision)
+  {
+    Revision = Acl->AclRevision;
+  }
+
+  if (!RtlFirstFreeAce(Acl, &Ace))
+  {
+    return STATUS_INVALID_ACL;
+  }
+
+  if (Ace == NULL)
+  {
+    return STATUS_ALLOTTED_SPACE_EXCEEDED;
+  }
+
+  if (((PVOID)Ace + RtlLengthSid(Sid) + sizeof(ACE)) >= ((PVOID)Acl + Acl->AclSize))
+  {
+    return STATUS_ALLOTTED_SPACE_EXCEEDED;
+  }
+
+  Ace->Header.AceFlags = Flags;
+  Ace->Header.AceType = SYSTEM_AUDIT_ACE_TYPE;
+  Ace->Header.AceSize = RtlLengthSid(Sid) + sizeof(ACE);
+  Ace->AccessMask = AccessMask;
+  RtlCopySid(RtlLengthSid(Sid),
+             (PSID)(Ace + 1),
+             Sid);
+  Acl->AceCount++;
+  Acl->AclRevision = Revision;
+
+  return STATUS_SUCCESS;
+}
+
+
 static VOID
 RtlpDeleteData(PVOID Ace,
                ULONG AceSize,