SharpCifs.Smb.SecurityDescriptor.Decode C# (CSharp) Method

Decode() public method

public Decode ( byte buffer, int bufferIndex, int len ) : int
buffer byte
bufferIndex int
len int
return int
		public virtual int Decode(byte[] buffer, int bufferIndex, int len)
		{
			int start = bufferIndex;
			bufferIndex++;
			// revision
			bufferIndex++;
			Type = ServerMessageBlock.ReadInt2(buffer, bufferIndex);
			bufferIndex += 2;
			ServerMessageBlock.ReadInt4(buffer, bufferIndex);
			// offset to owner sid
			bufferIndex += 4;
			ServerMessageBlock.ReadInt4(buffer, bufferIndex);
			// offset to group sid
			bufferIndex += 4;
			ServerMessageBlock.ReadInt4(buffer, bufferIndex);
			// offset to sacl
			bufferIndex += 4;
			int daclOffset = ServerMessageBlock.ReadInt4(buffer, bufferIndex);
			bufferIndex = start + daclOffset;
			bufferIndex++;
			// revision
			bufferIndex++;
			int size = ServerMessageBlock.ReadInt2(buffer, bufferIndex);
			bufferIndex += 2;
			int numAces = ServerMessageBlock.ReadInt4(buffer, bufferIndex);
			bufferIndex += 4;
			if (numAces > 4096)
			{
				throw new IOException("Invalid SecurityDescriptor");
			}
			if (daclOffset != 0)
			{
				Aces = new Ace[numAces];
				for (int i = 0; i < numAces; i++)
				{
					Aces[i] = new Ace();
					bufferIndex += Aces[i].Decode(buffer, bufferIndex);
				}
			}
			else
			{
				Aces = null;
			}
			return bufferIndex - start;
		}

Usage Example

		internal override int ReadDataWireFormat(byte[] buffer, int bufferIndex, int len)
		{
			int start = bufferIndex;
			if (ErrorCode != 0)
			{
				return 4;
			}
			try
			{
				SecurityDescriptor = new SecurityDescriptor();
				bufferIndex += SecurityDescriptor.Decode(buffer, bufferIndex, len);
			}
			catch (IOException ioe)
			{
				throw new RuntimeException(ioe.Message);
			}
			return bufferIndex - start;
		}
All Usage Examples Of SharpCifs.Smb.SecurityDescriptor::Decode