mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-07-20 16:15:53 +02:00
SMB1: NTTransactionHelper / TransactionHelper: Store MaxParameterCount (required for NT_TRANSACT_NOTIFY_CHANGE)
This commit is contained in:
parent
8aad4adb9c
commit
fc96dfcb4c
3 changed files with 7 additions and 4 deletions
|
@ -13,7 +13,8 @@ namespace SMBLibrary.Server
|
|||
internal class ProcessStateObject
|
||||
{
|
||||
public ushort SubcommandID;
|
||||
public uint MaxDataCount; // The maximum number of TransactionData bytes that the client accepts in the transaction response
|
||||
public uint MaxParameterCount; // The maximum number of Trans_Parameters bytes that the client accepts in the transaction response
|
||||
public uint MaxDataCount; // The maximum number of Trans_Data bytes that the client accepts in the transaction response
|
||||
public string Name; // The pathname of the [..] named pipe to which the transaction subcommand applies, or a client-supplied [..] name for the transaction.
|
||||
public byte[] TransactionSetup;
|
||||
public byte[] TransactionParameters;
|
||||
|
|
|
@ -25,6 +25,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
// A secondary transaction request is pending
|
||||
ProcessStateObject processState = state.CreateProcessState(header.PID);
|
||||
processState.SubcommandID = (ushort)request.Function;
|
||||
processState.MaxParameterCount = request.MaxParameterCount;
|
||||
processState.MaxDataCount = request.MaxDataCount;
|
||||
processState.TransactionSetup = request.Setup;
|
||||
processState.TransactionParameters = new byte[request.TotalParameterCount];
|
||||
|
@ -38,7 +39,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
else
|
||||
{
|
||||
// We have a complete command
|
||||
return GetCompleteNTTransactResponse(header, request.MaxDataCount, request.Function, request.Setup, request.TransParameters, request.TransData, share, state);
|
||||
return GetCompleteNTTransactResponse(header, request.MaxParameterCount, request.MaxDataCount, request.Function, request.Setup, request.TransParameters, request.TransData, share, state);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,11 +68,11 @@ namespace SMBLibrary.Server.SMB1
|
|||
{
|
||||
// We have a complete command
|
||||
state.RemoveProcessState(header.PID);
|
||||
return GetCompleteNTTransactResponse(header, processState.MaxDataCount, (NTTransactSubcommandName)processState.SubcommandID, processState.TransactionSetup, processState.TransactionParameters, processState.TransactionData, share, state);
|
||||
return GetCompleteNTTransactResponse(header, processState.MaxParameterCount, processState.MaxDataCount, (NTTransactSubcommandName)processState.SubcommandID, processState.TransactionSetup, processState.TransactionParameters, processState.TransactionData, share, state);
|
||||
}
|
||||
}
|
||||
|
||||
internal static List<SMB1Command> GetCompleteNTTransactResponse(SMB1Header header, uint maxDataCount, NTTransactSubcommandName subcommandName, byte[] requestSetup, byte[] requestParameters, byte[] requestData, ISMBShare share, SMB1ConnectionState state)
|
||||
internal static List<SMB1Command> GetCompleteNTTransactResponse(SMB1Header header, uint maxParameterCount, uint maxDataCount, NTTransactSubcommandName subcommandName, byte[] requestSetup, byte[] requestParameters, byte[] requestData, ISMBShare share, SMB1ConnectionState state)
|
||||
{
|
||||
NTTransactSubcommand subcommand = NTTransactSubcommand.GetSubcommandRequest(subcommandName, requestSetup, requestParameters, requestData, header.UnicodeFlag);
|
||||
NTTransactSubcommand subcommandResponse = null;
|
||||
|
|
|
@ -27,6 +27,7 @@ namespace SMBLibrary.Server.SMB1
|
|||
{
|
||||
// A secondary transaction request is pending
|
||||
ProcessStateObject processState = state.CreateProcessState(header.PID);
|
||||
processState.MaxParameterCount = request.MaxParameterCount;
|
||||
processState.MaxDataCount = request.MaxDataCount;
|
||||
processState.Name = request.Name;
|
||||
processState.TransactionSetup = request.Setup;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue