diff --git a/SMBLibrary/Server/ConnectionState/OpenFileObject.cs b/SMBLibrary/Server/ConnectionState/OpenFileObject.cs index d4ac9ae..506e589 100644 --- a/SMBLibrary/Server/ConnectionState/OpenFileObject.cs +++ b/SMBLibrary/Server/ConnectionState/OpenFileObject.cs @@ -13,11 +13,13 @@ namespace SMBLibrary.Server { internal class OpenFileObject { + public uint TreeID; public string Path; public object Handle; - public OpenFileObject(string path, object handle) + public OpenFileObject(uint treeID, string path, object handle) { + TreeID = treeID; Path = path; Handle = handle; } diff --git a/SMBLibrary/Server/ConnectionState/SMB1Session.cs b/SMBLibrary/Server/ConnectionState/SMB1Session.cs index e2d21b9..3551eb2 100644 --- a/SMBLibrary/Server/ConnectionState/SMB1Session.cs +++ b/SMBLibrary/Server/ConnectionState/SMB1Session.cs @@ -69,17 +69,17 @@ namespace SMBLibrary.Server /// Should include the path relative to the share /// FileID - public ushort? AddOpenFile(string relativePath) + public ushort? AddOpenFile(ushort treeID, string relativePath) { - return AddOpenFile(relativePath, null); + return AddOpenFile(treeID, relativePath, null); } - public ushort? AddOpenFile(string relativePath, object handle) + public ushort? AddOpenFile(ushort treeID, string relativePath, object handle) { ushort? fileID = m_connection.AllocateFileID(); if (fileID.HasValue) { - m_openFiles.Add(fileID.Value, new OpenFileObject(relativePath, handle)); + m_openFiles.Add(fileID.Value, new OpenFileObject(treeID, relativePath, handle)); } return fileID; } diff --git a/SMBLibrary/Server/ConnectionState/SMB2Session.cs b/SMBLibrary/Server/ConnectionState/SMB2Session.cs index bfc83ca..d2e2e2c 100644 --- a/SMBLibrary/Server/ConnectionState/SMB2Session.cs +++ b/SMBLibrary/Server/ConnectionState/SMB2Session.cs @@ -95,12 +95,12 @@ namespace SMBLibrary.Server } /// The persistent portion of the FileID - public ulong? AddOpenFile(string relativePath, object handle) + public ulong? AddOpenFile(uint treeID, string relativePath, object handle) { ulong? persistentID = m_connection.AllocatePersistentFileID(); if (persistentID.HasValue) { - m_openFiles.Add(persistentID.Value, new OpenFileObject(relativePath, handle)); + m_openFiles.Add(persistentID.Value, new OpenFileObject(treeID, relativePath, handle)); } return persistentID; } diff --git a/SMBLibrary/Server/SMB1/NTCreateHelper.cs b/SMBLibrary/Server/SMB1/NTCreateHelper.cs index f4bd729..3a6d01b 100644 --- a/SMBLibrary/Server/SMB1/NTCreateHelper.cs +++ b/SMBLibrary/Server/SMB1/NTCreateHelper.cs @@ -40,7 +40,7 @@ namespace SMBLibrary.Server.SMB1 return new ErrorResponse(request.CommandName); } - ushort? fileID = session.AddOpenFile(path, handle); + ushort? fileID = session.AddOpenFile(header.TID, path, handle); if (!fileID.HasValue) { share.FileStore.CloseFile(handle); diff --git a/SMBLibrary/Server/SMB1/OpenAndXHelper.cs b/SMBLibrary/Server/SMB1/OpenAndXHelper.cs index 51d7093..c296b79 100644 --- a/SMBLibrary/Server/SMB1/OpenAndXHelper.cs +++ b/SMBLibrary/Server/SMB1/OpenAndXHelper.cs @@ -56,7 +56,7 @@ namespace SMBLibrary.Server.SMB1 return new ErrorResponse(request.CommandName); } - ushort? fileID = session.AddOpenFile(path, handle); + ushort? fileID = session.AddOpenFile(header.TID, path, handle); if (!fileID.HasValue) { share.FileStore.CloseFile(handle); diff --git a/SMBLibrary/Server/SMB2/CreateHelper.cs b/SMBLibrary/Server/SMB2/CreateHelper.cs index 713e9a6..5a9c23a 100644 --- a/SMBLibrary/Server/SMB2/CreateHelper.cs +++ b/SMBLibrary/Server/SMB2/CreateHelper.cs @@ -40,7 +40,7 @@ namespace SMBLibrary.Server.SMB2 return new ErrorResponse(request.CommandName, createStatus); } - ulong? persistentFileID = session.AddOpenFile(path, handle); + ulong? persistentFileID = session.AddOpenFile(request.Header.TreeID, path, handle); if (!persistentFileID.HasValue) { share.FileStore.CloseFile(handle);