=?UTF-8?Q?Michael=20M=C3=BCller=20?=: ntdll: Implement RtlAddMandatoryAce.

Alexandre Julliard julliard at winehq.org
Fri Feb 17 14:37:10 CST 2017


Module: wine
Branch: master
Commit: 641ca44c9711cc468e721f1ee66f0af7c1329a00
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=641ca44c9711cc468e721f1ee66f0af7c1329a00

Author: Michael Müller <michael at fds-team.de>
Date:   Thu Feb 16 20:57:43 2017 +0100

ntdll: Implement RtlAddMandatoryAce.

Signed-off-by: Michael Müller <michael at fds-team.de>
Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/ntdll.spec |  1 +
 dlls/ntdll/sec.c      | 27 +++++++++++++++++++++++++++
 include/winternl.h    |  1 +
 3 files changed, 29 insertions(+)

diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 6e99af9..66618fc 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -423,6 +423,7 @@
 @ stdcall RtlAddAuditAccessAceEx(ptr long long long ptr long long)
 @ stdcall RtlAddAuditAccessObjectAce(ptr long long long ptr ptr ptr long long)
 # @ stub RtlAddCompoundAce
+@ stdcall RtlAddMandatoryAce(ptr long long long long ptr)
 # @ stub RtlAddRange
 @ cdecl -arch=arm,x86_64 RtlAddFunctionTable(ptr long long)
 @ stdcall RtlAddRefActivationContext(ptr)
diff --git a/dlls/ntdll/sec.c b/dlls/ntdll/sec.c
index 3bc52ac..3f7aa79 100644
--- a/dlls/ntdll/sec.c
+++ b/dlls/ntdll/sec.c
@@ -1379,6 +1379,33 @@ NTSTATUS WINAPI RtlAddAuditAccessObjectAce(
     return STATUS_NOT_IMPLEMENTED;
 }
 
+/**************************************************************************
+ *  RtlAddMandatoryAce     [NTDLL.@]
+ */
+NTSTATUS WINAPI RtlAddMandatoryAce(
+    IN OUT PACL pAcl,
+    IN DWORD dwAceRevision,
+    IN DWORD dwAceFlags,
+    IN DWORD dwMandatoryFlags,
+    IN DWORD dwAceType,
+    IN PSID pSid)
+{
+    static const DWORD valid_flags = SYSTEM_MANDATORY_LABEL_NO_WRITE_UP |
+                                     SYSTEM_MANDATORY_LABEL_NO_READ_UP |
+                                     SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP;
+
+    TRACE("(%p, %u, 0x%08x, 0x%08x, %u, %p)\n", pAcl, dwAceRevision, dwAceFlags,
+                                                dwMandatoryFlags, dwAceType, pSid);
+
+    if (dwAceType != SYSTEM_MANDATORY_LABEL_ACE_TYPE)
+        return STATUS_INVALID_PARAMETER;
+
+    if (dwMandatoryFlags & ~valid_flags)
+        return STATUS_INVALID_PARAMETER;
+
+    return add_access_ace(pAcl, dwAceRevision, dwAceFlags, dwMandatoryFlags, pSid, dwAceType);
+}
+
 /******************************************************************************
  *  RtlValidAcl		[NTDLL.@]
  */
diff --git a/include/winternl.h b/include/winternl.h
index 2f2ea86..f6308f5 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -2421,6 +2421,7 @@ NTSYSAPI NTSTATUS  WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_
 NTSYSAPI NTSTATUS  WINAPI RtlAddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);
 NTSYSAPI NTSTATUS  WINAPI RtlAddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);
 NTSYSAPI NTSTATUS  WINAPI RtlAddAuditAccessObjectAce(PACL,DWORD,DWORD,DWORD,GUID*,GUID*,PSID,BOOL,BOOL);
+NTSYSAPI NTSTATUS  WINAPI RtlAddMandatoryAce(PACL,DWORD,DWORD,DWORD,DWORD,PSID);
 NTSYSAPI void      WINAPI RtlAddRefActivationContext(HANDLE);
 NTSYSAPI PVOID     WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
 NTSYSAPI NTSTATUS  WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN);




More information about the wine-cvs mailing list