mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-07-21 16:55:54 +02:00
SMB1Client: Added ServerMaxBufferSize and MaxMpxCount properties
This commit is contained in:
parent
0f754ee55c
commit
73b5557987
1 changed files with 30 additions and 8 deletions
|
@ -24,8 +24,8 @@ namespace SMBLibrary.Client
|
||||||
public const int DirectTCPPort = 445;
|
public const int DirectTCPPort = 445;
|
||||||
public const string NTLanManagerDialect = "NT LM 0.12";
|
public const string NTLanManagerDialect = "NT LM 0.12";
|
||||||
|
|
||||||
public const int MaxBufferSize = 65535; // Valid range: 512 - 65535
|
public const ushort ClientMaxBufferSize = 65535; // Valid range: 512 - 65535
|
||||||
public const int MaxMpxCount = 1;
|
public const ushort ClientMaxMpxCount = 1;
|
||||||
|
|
||||||
private SMBTransportType m_transport;
|
private SMBTransportType m_transport;
|
||||||
private bool m_isConnected;
|
private bool m_isConnected;
|
||||||
|
@ -38,6 +38,8 @@ namespace SMBLibrary.Client
|
||||||
private bool m_infoLevelPassthrough;
|
private bool m_infoLevelPassthrough;
|
||||||
private bool m_largeRead;
|
private bool m_largeRead;
|
||||||
private bool m_largeWrite;
|
private bool m_largeWrite;
|
||||||
|
private uint m_serverMaxBufferSize;
|
||||||
|
private ushort m_maxMpxCount;
|
||||||
|
|
||||||
private object m_incomingQueueLock = new object();
|
private object m_incomingQueueLock = new object();
|
||||||
private List<SMB1Message> m_incomingQueue = new List<SMB1Message>();
|
private List<SMB1Message> m_incomingQueue = new List<SMB1Message>();
|
||||||
|
@ -138,6 +140,8 @@ namespace SMBLibrary.Client
|
||||||
m_infoLevelPassthrough = ((response.Capabilities & Capabilities.InfoLevelPassthrough) > 0);
|
m_infoLevelPassthrough = ((response.Capabilities & Capabilities.InfoLevelPassthrough) > 0);
|
||||||
m_largeRead = ((response.Capabilities & Capabilities.LargeRead) > 0);
|
m_largeRead = ((response.Capabilities & Capabilities.LargeRead) > 0);
|
||||||
m_largeWrite = ((response.Capabilities & Capabilities.LargeWrite) > 0);
|
m_largeWrite = ((response.Capabilities & Capabilities.LargeWrite) > 0);
|
||||||
|
m_serverMaxBufferSize = response.MaxBufferSize;
|
||||||
|
m_maxMpxCount = Math.Min(response.MaxMpxCount, ClientMaxMpxCount);
|
||||||
m_serverChallenge = response.Challenge;
|
m_serverChallenge = response.Challenge;
|
||||||
return ntSMB && rpc && ntStatusCode;
|
return ntSMB && rpc && ntStatusCode;
|
||||||
}
|
}
|
||||||
|
@ -152,6 +156,8 @@ namespace SMBLibrary.Client
|
||||||
m_infoLevelPassthrough = ((response.Capabilities & Capabilities.InfoLevelPassthrough) > 0);
|
m_infoLevelPassthrough = ((response.Capabilities & Capabilities.InfoLevelPassthrough) > 0);
|
||||||
m_largeRead = ((response.Capabilities & Capabilities.LargeRead) > 0);
|
m_largeRead = ((response.Capabilities & Capabilities.LargeRead) > 0);
|
||||||
m_largeWrite = ((response.Capabilities & Capabilities.LargeWrite) > 0);
|
m_largeWrite = ((response.Capabilities & Capabilities.LargeWrite) > 0);
|
||||||
|
m_serverMaxBufferSize = response.MaxBufferSize;
|
||||||
|
m_maxMpxCount = Math.Min(response.MaxMpxCount, ClientMaxMpxCount);
|
||||||
m_securityBlob = response.SecurityBlob;
|
m_securityBlob = response.SecurityBlob;
|
||||||
return ntSMB && rpc && ntStatusCode;
|
return ntSMB && rpc && ntStatusCode;
|
||||||
}
|
}
|
||||||
|
@ -190,8 +196,8 @@ namespace SMBLibrary.Client
|
||||||
if (m_serverChallenge != null)
|
if (m_serverChallenge != null)
|
||||||
{
|
{
|
||||||
SessionSetupAndXRequest request = new SessionSetupAndXRequest();
|
SessionSetupAndXRequest request = new SessionSetupAndXRequest();
|
||||||
request.MaxBufferSize = MaxBufferSize;
|
request.MaxBufferSize = ClientMaxBufferSize;
|
||||||
request.MaxMpxCount = MaxMpxCount;
|
request.MaxMpxCount = m_maxMpxCount;
|
||||||
request.Capabilities = clientCapabilities;
|
request.Capabilities = clientCapabilities;
|
||||||
request.AccountName = userName;
|
request.AccountName = userName;
|
||||||
request.PrimaryDomain = domainName;
|
request.PrimaryDomain = domainName;
|
||||||
|
@ -232,8 +238,8 @@ namespace SMBLibrary.Client
|
||||||
else // m_securityBlob != null
|
else // m_securityBlob != null
|
||||||
{
|
{
|
||||||
SessionSetupAndXRequestExtended request = new SessionSetupAndXRequestExtended();
|
SessionSetupAndXRequestExtended request = new SessionSetupAndXRequestExtended();
|
||||||
request.MaxBufferSize = MaxBufferSize;
|
request.MaxBufferSize = ClientMaxBufferSize;
|
||||||
request.MaxMpxCount = MaxMpxCount;
|
request.MaxMpxCount = m_maxMpxCount;
|
||||||
request.Capabilities = clientCapabilities;
|
request.Capabilities = clientCapabilities;
|
||||||
request.SecurityBlob = NTLMAuthenticationHelper.GetNegotiateMessage(m_securityBlob, domainName, authenticationMethod);
|
request.SecurityBlob = NTLMAuthenticationHelper.GetNegotiateMessage(m_securityBlob, domainName, authenticationMethod);
|
||||||
TrySendMessage(request);
|
TrySendMessage(request);
|
||||||
|
@ -246,8 +252,8 @@ namespace SMBLibrary.Client
|
||||||
SessionSetupAndXResponseExtended response = (SessionSetupAndXResponseExtended)reply.Commands[0];
|
SessionSetupAndXResponseExtended response = (SessionSetupAndXResponseExtended)reply.Commands[0];
|
||||||
m_userID = reply.Header.UID;
|
m_userID = reply.Header.UID;
|
||||||
request = new SessionSetupAndXRequestExtended();
|
request = new SessionSetupAndXRequestExtended();
|
||||||
request.MaxBufferSize = MaxBufferSize;
|
request.MaxBufferSize = ClientMaxBufferSize;
|
||||||
request.MaxMpxCount = MaxMpxCount;
|
request.MaxMpxCount = m_maxMpxCount;
|
||||||
request.Capabilities = clientCapabilities;
|
request.Capabilities = clientCapabilities;
|
||||||
|
|
||||||
request.SecurityBlob = NTLMAuthenticationHelper.GetAuthenticateMessage(response.SecurityBlob, domainName, userName, password, authenticationMethod, out m_sessionKey);
|
request.SecurityBlob = NTLMAuthenticationHelper.GetAuthenticateMessage(response.SecurityBlob, domainName, userName, password, authenticationMethod, out m_sessionKey);
|
||||||
|
@ -545,6 +551,22 @@ namespace SMBLibrary.Client
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public uint ServerMaxBufferSize
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return m_serverMaxBufferSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int MaxMpxCount
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return m_maxMpxCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void TrySendMessage(Socket socket, SMB1Message message)
|
public static void TrySendMessage(Socket socket, SMB1Message message)
|
||||||
{
|
{
|
||||||
SessionMessagePacket packet = new SessionMessagePacket();
|
SessionMessagePacket packet = new SessionMessagePacket();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue