/// <summary> /// Create the binary from the buffer /// </summary> /// <param name="binary">The input binary</param> /// <param name="offset">The offset in the binary</param> public void GetBinaryForm(byte[] binary, int offset) { if (binary == null) { throw new ArgumentNullException(nameof(binary)); } int binaryLength = Size; if (offset < 0 || offset > binary.Length - binaryLength) { throw new ArgumentOutOfRangeException(nameof(offset)); } SECURITY_DESCRIPTOR_Control controlFlags = this.controlFlags; binary[offset] = 1; //revision binary[offset + 1] = 0; //Sbz1 DtypUtility.WriteUInt16ToByteArray((ushort)controlFlags, binary, offset + 2); int pointer = DtypUtility.SECURITY_DESCRIPTOR_FIXED_LENGTH; if (Owner != null) { DtypUtility.WriteInt32ToByteArray(pointer, binary, offset + 4); Owner.Value.GetBinaryForm(binary, offset + pointer); pointer += Owner.Value.Size; } else { DtypUtility.WriteInt32ToByteArray(0, binary, offset + 4); } if (Group != null) { DtypUtility.WriteInt32ToByteArray(pointer, binary, offset + 8); Group.Value.GetBinaryForm(binary, offset + pointer); pointer += Group.Value.Size; } else { DtypUtility.WriteInt32ToByteArray(0, binary, offset + 8); } _RawAcl sacl = this.SACL; if (this.controlFlags.HasFlag(SECURITY_DESCRIPTOR_Control.SACLPresent)) { DtypUtility.WriteInt32ToByteArray(pointer, binary, offset + 12); sacl.GetBinaryForm(binary, offset + pointer); pointer += this.SACL.Size; } else { DtypUtility.WriteInt32ToByteArray(0, binary, offset + 12); } _RawAcl dacl = this.DACL; if (this.controlFlags.HasFlag(SECURITY_DESCRIPTOR_Control.DACLPresent)) { DtypUtility.WriteInt32ToByteArray(pointer, binary, offset + 16); dacl.GetBinaryForm(binary, offset + pointer); pointer += this.DACL.Size; } else { DtypUtility.WriteInt32ToByteArray(0, binary, offset + 16); } }