public override Value Clone() { ResourceTypeValue resourceTypeValue = CreateInstance <ResourceTypeValue>(); resourceTypeValue.type = type; return(resourceTypeValue); }
protected override void InnerReplaceValues(Dictionary <Value, Value> originalReplace) { if (originalReplace.ContainsKey(resourceTypeValue)) { resourceTypeValue = (ResourceTypeValue)originalReplace[resourceTypeValue]; } if (originalReplace.ContainsKey(resourceFieldValue)) { resourceFieldValue = (ResourceFieldValue)originalReplace[resourceFieldValue]; } }
/// <summary> /// Create SMB_COM_OPEN_ANDX Server Response /// </summary> /// <param name="connection">the connection identified the client</param> /// <param name = "fileId"> /// This field MUST be the SMB file identifier returned by the SMB server for the file or device that was /// opened or created /// </param> /// <param name="fileType">the type of file to open</param> /// <param name="byteCount"> /// This value should be set to zero.Windows-based servers may return a response where the ByteCount field is /// not initialized to 0. /// </param> /// <returns>The SmbOpenAndXResponsePacket </returns> /// <exception cref="ArgumentNullException">connection must not be null</exception> public virtual SmbOpenAndxResponsePacket CreateSmbComOpenResponse( SmbServerConnection connection, ushort fileId, ResourceTypeValue fileType, ushort byteCount) { if (connection == null) { throw new ArgumentNullException("connection"); } SmbOpenAndxResponsePacket packet = new SmbOpenAndxResponsePacket(); // get the request packet SmbPacket request = connection.GetRequestPacket(connection.MessageId); // create smb packet header packet.SmbHeader = CifsMessageUtils.CreateSmbHeader( SmbCommand.SMB_COM_OPEN_ANDX, connection.ProcessId, connection.MessageId, request.SmbHeader.Uid, request.SmbHeader.Tid, (SmbFlags)connection.Capability.Flag, (SmbFlags2)connection.Capability.Flags2); // update smb parameters SMB_COM_OPEN_ANDX_Response_SMB_Parameters smbParameters = packet.SmbParameters; smbParameters.AndXCommand = SmbCommand.SMB_COM_NO_ANDX_COMMAND; smbParameters.FID = fileId; smbParameters.FileAttrs = (SmbFileAttributes)0x00; smbParameters.LastWriteTime.Time = (uint)DateTime.Now.ToFileTime(); smbParameters.DataSize = 0x0; smbParameters.GrantedAccess = (AccessRightsValue)0x00; smbParameters.FileType = fileType; smbParameters.DeviceState = SMB_NMPIPE_STATUS.None; smbParameters.Action = OpenResultsValues.OpenResult3; smbParameters.ServerFid = 0x00; smbParameters.MaximalAccessRights = connection.MaximalShareAccessRights; smbParameters.GuestMaximalAccessRights = connection.GuestMaximalShareAccessRights; smbParameters.WordCount = (byte)(CifsMessageUtils.GetSize<SMB_COM_OPEN_ANDX_Response_SMB_Parameters>( smbParameters) / SmbCapability.NUM_BYTES_OF_WORD); // update smb data SMB_COM_OPEN_ANDX_Response_SMB_Data smbData = packet.SmbData; // update smbData.ByteCount smbData.ByteCount = byteCount; // store the parameters and data to packet. packet.SmbParameters = smbParameters; packet.SmbData = smbData; return packet; }
public SmbOpenAndxResponsePacket CreateOpenAndxResponse( CifsServerPerConnection connection, SmbOpenAndxRequestPacket request, UTime lastWriteTime, uint fileDataSize, AccessRightsValue accessRights, ResourceTypeValue resourceType, SMB_NMPIPE_STATUS nmPipeStatus, OpenResultsValues openResults, SmbPacket andxPacket) { SmbOpenAndxResponsePacket response = new SmbOpenAndxResponsePacket(); response.SmbHeader = CifsMessageUtils.CreateSmbHeader(connection, request); SMB_COM_OPEN_ANDX_Response_SMB_Parameters smbParameters = response.SmbParameters; smbParameters.AndXCommand = andxPacket != null ? andxPacket.SmbHeader.Command : SmbCommand.SMB_COM_NO_ANDX_COMMAND; smbParameters.AndXReserved = 0x00; smbParameters.FID = (ushort)(connection.GenerateFID()); smbParameters.FileAttrs = request.SmbParameters.FileAttrs; smbParameters.LastWriteTime = lastWriteTime; smbParameters.FileDataSize = fileDataSize; smbParameters.AccessRights = accessRights; smbParameters.ResourceType = resourceType; smbParameters.NMPipeStatus = nmPipeStatus; smbParameters.OpenResults = openResults; smbParameters.Reserved = new ushort[3]; smbParameters.AndXOffset = (ushort)(response.HeaderSize + Marshal.SizeOf(response.SmbParameters) + Marshal.SizeOf(response.SmbData)); smbParameters.WordCount = (byte)(TypeMarshal.GetBlockMemorySize(smbParameters) / 2); response.SmbParameters = smbParameters; response.AndxPacket = andxPacket; response.UpdateHeader(); return response; }