123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- // This code is derived from jcifs smb client library <jcifs at samba dot org>
- // Ported by J. Arturo <webmaster at komodosoft dot net>
- //
- // This library is free software; you can redistribute it and/or
- // modify it under the terms of the GNU Lesser General Public
- // License as published by the Free Software Foundation; either
- // version 2.1 of the License, or (at your option) any later version.
- //
- // This library is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- // Lesser General Public License for more details.
- //
- // You should have received a copy of the GNU Lesser General Public
- // License along with this library; if not, write to the Free Software
- // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- using SharpCifs.Util;
- using SharpCifs.Util.Sharpen;
- namespace SharpCifs.Smb
- {
- internal class Trans2QueryPathInformationResponse : SmbComTransactionResponse
- {
- internal const int SMB_QUERY_FILE_BASIC_INFO = unchecked(0x101);
- internal const int SMB_QUERY_FILE_STANDARD_INFO = unchecked(0x102);
- internal class SmbQueryFileBasicInfo : IInfo
- {
- internal long CreateTime;
- internal long LastAccessTime;
- internal long LastWriteTime;
- internal long ChangeTime;
- internal int Attributes;
- // information levels
- public virtual int GetAttributes()
- {
- return Attributes;
- }
- public virtual long GetCreateTime()
- {
- return CreateTime;
- }
- public virtual long GetLastWriteTime()
- {
- return LastWriteTime;
- }
- public virtual long GetSize()
- {
- return 0L;
- }
- public override string ToString()
- {
- return "SmbQueryFileBasicInfo[" + "createTime=" + Extensions.CreateDate
- (CreateTime) + ",lastAccessTime=" + Extensions.CreateDate(LastAccessTime
- ) + ",lastWriteTime=" + Extensions.CreateDate(LastWriteTime) + ",changeTime="
- + Extensions.CreateDate(ChangeTime) + ",attributes=0x" + Hexdump.ToHexString
- (Attributes, 4) + "]";
- }
- internal SmbQueryFileBasicInfo(Trans2QueryPathInformationResponse enclosing)
- {
- this._enclosing = enclosing;
- }
- private readonly Trans2QueryPathInformationResponse _enclosing;
- }
- internal class SmbQueryFileStandardInfo : IInfo
- {
- internal long AllocationSize;
- internal long EndOfFile;
- internal int NumberOfLinks;
- internal bool DeletePending;
- internal bool Directory;
- public virtual int GetAttributes()
- {
- return 0;
- }
- public virtual long GetCreateTime()
- {
- return 0L;
- }
- public virtual long GetLastWriteTime()
- {
- return 0L;
- }
- public virtual long GetSize()
- {
- return EndOfFile;
- }
- public override string ToString()
- {
- return "SmbQueryInfoStandard[" + "allocationSize=" + AllocationSize
- + ",endOfFile=" + EndOfFile + ",numberOfLinks=" + NumberOfLinks + ",deletePending="
- + DeletePending + ",directory=" + Directory + "]";
- }
- internal SmbQueryFileStandardInfo(Trans2QueryPathInformationResponse enclosing)
- {
- this._enclosing = enclosing;
- }
- private readonly Trans2QueryPathInformationResponse _enclosing;
- }
- private int _informationLevel;
- internal IInfo Info;
- internal Trans2QueryPathInformationResponse(int informationLevel)
- {
- this._informationLevel = informationLevel;
- SubCommand = Smb.SmbComTransaction.Trans2QueryPathInformation;
- }
- internal override int WriteSetupWireFormat(byte[] dst, int dstIndex)
- {
- return 0;
- }
- internal override int WriteParametersWireFormat(byte[] dst, int dstIndex)
- {
- return 0;
- }
- internal override int WriteDataWireFormat(byte[] dst, int dstIndex)
- {
- return 0;
- }
- internal override int ReadSetupWireFormat(byte[] buffer, int bufferIndex, int len
- )
- {
- return 0;
- }
- internal override int ReadParametersWireFormat(byte[] buffer, int bufferIndex, int
- len)
- {
- // observed two zero bytes here with at least win98
- return 2;
- }
- internal override int ReadDataWireFormat(byte[] buffer, int bufferIndex, int len)
- {
- switch (_informationLevel)
- {
- case SMB_QUERY_FILE_BASIC_INFO:
- {
- return ReadSmbQueryFileBasicInfoWireFormat(buffer, bufferIndex);
- }
- case SMB_QUERY_FILE_STANDARD_INFO:
- {
- return ReadSmbQueryFileStandardInfoWireFormat(buffer, bufferIndex);
- }
- default:
- {
- return 0;
- }
- }
- }
- internal virtual int ReadSmbQueryFileStandardInfoWireFormat(byte[] buffer, int bufferIndex
- )
- {
- int start = bufferIndex;
- SmbQueryFileStandardInfo info = new SmbQueryFileStandardInfo
- (this);
- info.AllocationSize = ReadInt8(buffer, bufferIndex);
- bufferIndex += 8;
- info.EndOfFile = ReadInt8(buffer, bufferIndex);
- bufferIndex += 8;
- info.NumberOfLinks = ReadInt4(buffer, bufferIndex);
- bufferIndex += 4;
- info.DeletePending = (buffer[bufferIndex++] & unchecked(0xFF)) > 0;
- info.Directory = (buffer[bufferIndex++] & unchecked(0xFF)) > 0;
- this.Info = info;
- return bufferIndex - start;
- }
- internal virtual int ReadSmbQueryFileBasicInfoWireFormat(byte[] buffer, int bufferIndex
- )
- {
- int start = bufferIndex;
- SmbQueryFileBasicInfo info = new SmbQueryFileBasicInfo
- (this);
- info.CreateTime = ReadTime(buffer, bufferIndex);
- bufferIndex += 8;
- info.LastAccessTime = ReadTime(buffer, bufferIndex);
- bufferIndex += 8;
- info.LastWriteTime = ReadTime(buffer, bufferIndex);
- bufferIndex += 8;
- info.ChangeTime = ReadTime(buffer, bufferIndex);
- bufferIndex += 8;
- info.Attributes = ReadInt2(buffer, bufferIndex);
- bufferIndex += 2;
- this.Info = info;
- return bufferIndex - start;
- }
- public override string ToString()
- {
- return "Trans2QueryPathInformationResponse[" + base.ToString() + "]";
- }
- }
- }
|