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);