diff --git a/SMBLibrary/NTFileStore/Structures/SecurityInformation/ACE/ACE.cs b/SMBLibrary/NTFileStore/Structures/SecurityInformation/ACE/ACE.cs index d27f0c8..b670725 100644 --- a/SMBLibrary/NTFileStore/Structures/SecurityInformation/ACE/ACE.cs +++ b/SMBLibrary/NTFileStore/Structures/SecurityInformation/ACE/ACE.cs @@ -30,6 +30,8 @@ namespace SMBLibrary { case AceType.ACCESS_ALLOWED_ACE_TYPE: return new AccessAllowedACE(buffer, offset); + case AceType.ACCESS_DENIED_ACE_TYPE: + return new AccessDeniedACE(buffer, offset); default: throw new NotImplementedException(); } diff --git a/SMBLibrary/NTFileStore/Structures/SecurityInformation/ACE/AccessDeniedACE.cs b/SMBLibrary/NTFileStore/Structures/SecurityInformation/ACE/AccessDeniedACE.cs new file mode 100644 index 0000000..bcaa0e2 --- /dev/null +++ b/SMBLibrary/NTFileStore/Structures/SecurityInformation/ACE/AccessDeniedACE.cs @@ -0,0 +1,48 @@ +/* Copyright (C) 2014-2017 Tal Aloni . All rights reserved. + * + * You can redistribute this program and/or modify it under the terms of + * the GNU Lesser Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + */ +using Utilities; + +namespace SMBLibrary +{ + public class AccessDeniedACE : ACE + { + public const int FixedLength = 8; + + public AceHeader Header; + public AccessMask Mask; + public SID Sid; + + public AccessDeniedACE() + { + Header = new AceHeader(); + Header.AceType = AceType.ACCESS_DENIED_ACE_TYPE; + } + + public AccessDeniedACE(byte[] buffer, int offset) + { + Header = new AceHeader(buffer, offset + 0); + Mask = (AccessMask)LittleEndianConverter.ToUInt32(buffer, offset + 4); + Sid = new SID(buffer, offset + 8); + } + + public override void WriteBytes(byte[] buffer, ref int offset) + { + Header.AceSize = (ushort)this.Length; + Header.WriteBytes(buffer, ref offset); + LittleEndianWriter.WriteUInt32(buffer, ref offset, (uint)Mask); + Sid.WriteBytes(buffer, ref offset); + } + + public override int Length + { + get + { + return FixedLength + Sid.Length; + } + } + } +}