Module: wine Branch: master Commit: 641ca44c9711cc468e721f1ee66f0af7c1329a00 URL: http://source.winehq.org/git/wine.git/?a=commit;h=641ca44c9711cc468e721f1ee6...
Author: Michael Müller michael@fds-team.de Date: Thu Feb 16 20:57:43 2017 +0100
ntdll: Implement RtlAddMandatoryAce.
Signed-off-by: Michael Müller michael@fds-team.de Signed-off-by: Sebastian Lackner sebastian@fds-team.de Signed-off-by: Alexandre Julliard julliard@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);