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 string NTLanManagerDialect = "NT LM 0.12";
|
||||
|
||||
public const int MaxBufferSize = 65535; // Valid range: 512 - 65535
|
||||
public const int MaxMpxCount = 1;
|
||||
public const ushort ClientMaxBufferSize = 65535; // Valid range: 512 - 65535
|
||||
public const ushort ClientMaxMpxCount = 1;
|
||||
|
||||
private SMBTransportType m_transport;
|
||||
private bool m_isConnected;
|
||||
|
@ -38,6 +38,8 @@ namespace SMBLibrary.Client
|
|||
private bool m_infoLevelPassthrough;
|
||||
private bool m_largeRead;
|
||||
private bool m_largeWrite;
|
||||
private uint m_serverMaxBufferSize;
|
||||
private ushort m_maxMpxCount;
|
||||
|
||||
private object m_incomingQueueLock = new object();
|
||||
private List<SMB1Message> m_incomingQueue = new List<SMB1Message>();
|
||||
|
@ -138,6 +140,8 @@ namespace SMBLibrary.Client
|
|||
m_infoLevelPassthrough = ((response.Capabilities & Capabilities.InfoLevelPassthrough) > 0);
|
||||
m_largeRead = ((response.Capabilities & Capabilities.LargeRead) > 0);
|
||||
m_largeWrite = ((response.Capabilities & Capabilities.LargeWrite) > 0);
|
||||
m_serverMaxBufferSize = response.MaxBufferSize;
|
||||
m_maxMpxCount = Math.Min(response.MaxMpxCount, ClientMaxMpxCount);
|
||||
m_serverChallenge = response.Challenge;
|
||||
return ntSMB && rpc && ntStatusCode;
|
||||
}
|
||||
|
@ -152,6 +156,8 @@ namespace SMBLibrary.Client
|
|||
m_infoLevelPassthrough = ((response.Capabilities & Capabilities.InfoLevelPassthrough) > 0);
|
||||
m_largeRead = ((response.Capabilities & Capabilities.LargeRead) > 0);
|
||||
m_largeWrite = ((response.Capabilities & Capabilities.LargeWrite) > 0);
|
||||
m_serverMaxBufferSize = response.MaxBufferSize;
|
||||
m_maxMpxCount = Math.Min(response.MaxMpxCount, ClientMaxMpxCount);
|
||||
m_securityBlob = response.SecurityBlob;
|
||||
return ntSMB && rpc && ntStatusCode;
|
||||
}
|
||||
|
@ -190,8 +196,8 @@ namespace SMBLibrary.Client
|
|||
if (m_serverChallenge != null)
|
||||
{
|
||||
SessionSetupAndXRequest request = new SessionSetupAndXRequest();
|
||||
request.MaxBufferSize = MaxBufferSize;
|
||||
request.MaxMpxCount = MaxMpxCount;
|
||||
request.MaxBufferSize = ClientMaxBufferSize;
|
||||
request.MaxMpxCount = m_maxMpxCount;
|
||||
request.Capabilities = clientCapabilities;
|
||||
request.AccountName = userName;
|
||||
request.PrimaryDomain = domainName;
|
||||
|
@ -232,8 +238,8 @@ namespace SMBLibrary.Client
|
|||
else // m_securityBlob != null
|
||||
{
|
||||
SessionSetupAndXRequestExtended request = new SessionSetupAndXRequestExtended();
|
||||
request.MaxBufferSize = MaxBufferSize;
|
||||
request.MaxMpxCount = MaxMpxCount;
|
||||
request.MaxBufferSize = ClientMaxBufferSize;
|
||||
request.MaxMpxCount = m_maxMpxCount;
|
||||
request.Capabilities = clientCapabilities;
|
||||
request.SecurityBlob = NTLMAuthenticationHelper.GetNegotiateMessage(m_securityBlob, domainName, authenticationMethod);
|
||||
TrySendMessage(request);
|
||||
|
@ -246,8 +252,8 @@ namespace SMBLibrary.Client
|
|||
SessionSetupAndXResponseExtended response = (SessionSetupAndXResponseExtended)reply.Commands[0];
|
||||
m_userID = reply.Header.UID;
|
||||
request = new SessionSetupAndXRequestExtended();
|
||||
request.MaxBufferSize = MaxBufferSize;
|
||||
request.MaxMpxCount = MaxMpxCount;
|
||||
request.MaxBufferSize = ClientMaxBufferSize;
|
||||
request.MaxMpxCount = m_maxMpxCount;
|
||||
request.Capabilities = clientCapabilities;
|
||||
|
||||
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)
|
||||
{
|
||||
SessionMessagePacket packet = new SessionMessagePacket();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue