X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=rostests%2Fkmtests%2Fntos_se%2FSeHelpers.c;h=2a81d5f999776172c76be41c1abfe112fe49877a;hp=c6575a891befc41b559b9bc9aed7589e98041066;hb=643b7c9da93ee1a58ad8ba3f08f9ca268079c698;hpb=5c1a8109c84ed0aefdac2488ff666070a7ae52f6 diff --git a/rostests/kmtests/ntos_se/SeHelpers.c b/rostests/kmtests/ntos_se/SeHelpers.c index c6575a891be..2a81d5f9997 100644 --- a/rostests/kmtests/ntos_se/SeHelpers.c +++ b/rostests/kmtests/ntos_se/SeHelpers.c @@ -49,6 +49,42 @@ RtlxAddAuditAccessAceEx( return Status; } +NTSTATUS +RtlxAddMandatoryLabelAceEx( + _Inout_ PACL Acl, + _In_ ULONG Revision, + _In_ ULONG Flags, + _In_ ACCESS_MASK AccessMask, + _In_ PSID Sid) +{ + NTSTATUS Status; + USHORT AceSize; + PSYSTEM_MANDATORY_LABEL_ACE Ace; + + AceSize = FIELD_OFFSET(SYSTEM_MANDATORY_LABEL_ACE, SidStart) + RtlLengthSid(Sid); + Ace = ExAllocatePoolWithTag(PagedPool, AceSize, 'cAmK'); + if (!Ace) + return STATUS_INSUFFICIENT_RESOURCES; + Ace->Header.AceType = SYSTEM_MANDATORY_LABEL_ACE_TYPE; + Ace->Header.AceFlags = Flags; + Ace->Header.AceSize = AceSize; + Ace->Mask = AccessMask; + Status = RtlCopySid(AceSize - FIELD_OFFSET(SYSTEM_MANDATORY_LABEL_ACE, SidStart), + (PSID)&Ace->SidStart, + Sid); + ASSERT(NT_SUCCESS(Status)); + if (NT_SUCCESS(Status)) + { + Status = RtlAddAce(Acl, + Revision, + MAXULONG, + Ace, + AceSize); + } + ExFreePoolWithTag(Ace, 'cAmK'); + return Status; +} + VOID CheckSid__( _In_ PSID Sid,