コード例 #1
0
ファイル: ResourceTypeValue.cs プロジェクト: RhythNS/Toybox
    public override Value Clone()
    {
        ResourceTypeValue resourceTypeValue = CreateInstance <ResourceTypeValue>();

        resourceTypeValue.type = type;
        return(resourceTypeValue);
    }
コード例 #2
0
 protected override void InnerReplaceValues(Dictionary <Value, Value> originalReplace)
 {
     if (originalReplace.ContainsKey(resourceTypeValue))
     {
         resourceTypeValue = (ResourceTypeValue)originalReplace[resourceTypeValue];
     }
     if (originalReplace.ContainsKey(resourceFieldValue))
     {
         resourceFieldValue = (ResourceFieldValue)originalReplace[resourceFieldValue];
     }
 }
コード例 #3
0
        /// <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;
        }
コード例 #4
0
        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;
        }