示例#1
0
        public override ReadOnlyMemory <byte> Marshal()
        {
            using (var buffer = new NdrBuffer())
            {
                buffer.MarshalObject(this);

                return(buffer.ToMemory(alignment: 8));
            }
        }
示例#2
0
        public override ReadOnlyMemory <byte> Marshal()
        {
            using (var buffer = new NdrBuffer())
            {
                buffer.WriteInt32LittleEndian(this.Version);
                buffer.WriteInt32LittleEndian((int)this.EncryptionType);
                buffer.WriteSpan(this.SerializedData.Span);

                return(buffer.ToMemory(alignment: 8));
            }
        }
示例#3
0
        public override ReadOnlyMemory <byte> Marshal()
        {
            using (var buffer = new NdrBuffer())
            {
                buffer.WriteInt32LittleEndian((int)this.Type);
                buffer.WriteSpan(this.Signature.Span);

                if (this.RODCIdentifier > 0)
                {
                    buffer.WriteInt16LittleEndian(this.RODCIdentifier);
                }

                return(buffer.ToMemory());
            }
        }
示例#4
0
        internal byte[] Serialize()
        {
            using (var buffer = new NdrBuffer(align: false))
            {
                buffer.WriteByte(Magic);
                buffer.WriteByte(ExpectedVersion);

                this.WriteHeader(buffer);
                WritePrincipal(this.DefaultPrincipalName, buffer);

                this.WriteCredentials(buffer);

                return(buffer.ToMemory(0).ToArray());
            }
        }
示例#5
0
        private void WriteHeader(NdrBuffer buffer)
        {
            using (var headerBuffer = new NdrBuffer(align: false))
            {
                foreach (var kv in this.Header)
                {
                    headerBuffer.WriteInt16BigEndian((short)kv.Key);
                    headerBuffer.WriteInt16BigEndian((short)kv.Value.Length);
                    headerBuffer.WriteMemory(kv.Value);
                }

                var header = headerBuffer.ToMemory(0);

                buffer.WriteInt16BigEndian((short)header.Length);
                buffer.WriteMemory(header);
            }
        }
示例#6
0
        public override ReadOnlyMemory <byte> Marshal()
        {
            using (var buffer = new NdrBuffer())
            {
                this.NameLength = (short)(this.Name.Length * sizeof(char));

                buffer.WriteStruct(this.ClientId);
                buffer.WriteInt16LittleEndian(this.NameLength);

                if (this.NameLength > 0)
                {
                    buffer.WriteFixedPrimitiveArray(this.Name.AsSpan());
                }

                return(buffer.ToMemory());
            }
        }
示例#7
0
        public override ReadOnlyMemory <byte> Marshal()
        {
            using (var buffer = new NdrBuffer())
            {
                var upnBytes    = MemoryMarshal.Cast <char, byte>(this.Upn.AsSpan());
                var domainBytes = MemoryMarshal.Cast <char, byte>(this.Domain.AsSpan());

                buffer.WriteInt16LittleEndian((short)upnBytes.Length);
                buffer.WriteInt16LittleEndian(2 + 2 + 2 + 2 + 4 + 4); // + 4 to align on 8 boundary

                buffer.WriteInt16LittleEndian((short)domainBytes.Length);
                buffer.WriteInt16LittleEndian((short)(2 + 2 + 2 + 2 + 2 + 4 + 4 + upnBytes.Length));

                buffer.WriteInt32LittleEndian((int)this.Flags);

                buffer.WriteInt32LittleEndian(0);
                buffer.WriteFixedPrimitiveArray(upnBytes);

                buffer.WriteInt16LittleEndian(0);
                buffer.WriteFixedPrimitiveArray(domainBytes);

                return(buffer.ToMemory(alignment: 8));
            }
        }