public AccessMask(byte[] buffer, int offset) { uint value = LittleEndianConverter.ToUInt32(buffer, offset); File = (FileAccessMask)value; Directory = (FileAccessMask)value; }
public NTTransactCreateRequest(byte[] parameters, byte[] data, bool isUnicode) { int parametersOffset = 0; Flags = (NTCreateFlags)LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); RootDirectoryFID = LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); DesiredAccess = (FileAccessMask)LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); AllocationSize = LittleEndianReader.ReadInt64(parameters, ref parametersOffset); ExtFileAttributes = (ExtendedFileAttributes)LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); ShareAccess = (ShareAccess)LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); CreateDisposition = (CreateDisposition)LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); CreateOptions = (CreateOptions)LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); uint securityDescriptiorLength = LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); uint eaLength = LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); uint nameLength = LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); ImpersonationLevel = (ImpersonationLevel)LittleEndianReader.ReadUInt32(parameters, ref parametersOffset); SecurityFlags = (SecurityFlags)ByteReader.ReadByte(parameters, ref parametersOffset); if (isUnicode) { parametersOffset++; } Name = SMB1Helper.ReadFixedLengthString(parameters, ref parametersOffset, isUnicode, (int)nameLength); if (securityDescriptiorLength > 0) { SecurityDescriptor = new SecurityDescriptor(data, 0); } ExtendedAttributes = FileFullEAInformation.ReadList(data, (int)securityDescriptiorLength); }
public NTCreateAndXRequest(byte[] buffer, int offset, bool isUnicode) : base(buffer, offset, isUnicode) { Reserved = ByteReader.ReadByte(this.SMBParameters, 4); NameLength = LittleEndianConverter.ToUInt16(this.SMBParameters, 5); Flags = (NTCreateFlags)LittleEndianConverter.ToUInt32(this.SMBParameters, 7); RootDirectoryFID = LittleEndianConverter.ToUInt32(this.SMBParameters, 11); DesiredAccess = (FileAccessMask)LittleEndianConverter.ToUInt32(this.SMBParameters, 15); AllocationSize = LittleEndianConverter.ToInt64(this.SMBParameters, 19); ExtFileAttributes = (ExtendedFileAttributes)LittleEndianConverter.ToUInt32(this.SMBParameters, 27); ShareAccess = (ShareAccess)LittleEndianConverter.ToUInt32(this.SMBParameters, 31); CreateDisposition = (CreateDisposition)LittleEndianConverter.ToUInt32(this.SMBParameters, 35); CreateOptions = (CreateOptions)LittleEndianConverter.ToUInt32(this.SMBParameters, 39); ImpersonationLevel = (ImpersonationLevel)LittleEndianConverter.ToUInt32(this.SMBParameters, 43); SecurityFlags = (SecurityFlags)ByteReader.ReadByte(this.SMBParameters, 47); int dataOffset = 0; if (isUnicode) { // A Unicode string MUST be aligned to a 16-bit boundary with respect to the beginning of the SMB Header. // Note: SMBData starts at an odd offset. dataOffset = 1; } FileName = SMB1Helper.ReadSMBString(this.SMBData, dataOffset, isUnicode); }
/// <summary> /// Will return desired FileAccess rights to the file data. /// </summary> public static FileAccess ToFileAccess(FileAccessMask desiredAccess) { FileAccess result = 0; if ((desiredAccess & FileAccessMask.FILE_READ_DATA) > 0 || (desiredAccess & FileAccessMask.MAXIMUM_ALLOWED) > 0 || (desiredAccess & FileAccessMask.GENERIC_ALL) > 0 || (desiredAccess & FileAccessMask.GENERIC_READ) > 0) { result |= FileAccess.Read; } if ((desiredAccess & FileAccessMask.FILE_WRITE_DATA) > 0 || (desiredAccess & FileAccessMask.FILE_APPEND_DATA) > 0 || (desiredAccess & FileAccessMask.MAXIMUM_ALLOWED) > 0 || (desiredAccess & FileAccessMask.GENERIC_ALL) > 0 || (desiredAccess & FileAccessMask.GENERIC_WRITE) > 0) { result |= FileAccess.Write; } return(result); }
public static extern SafeFileHandle CreateFile(string path, FileAccessMask accessMask, FileShareMode shareMode, IntPtr sd, CreationDisposition disposition, CreateFileFlags flags, IntPtr hTemplateFile);