1234567891011121314151617181920212223242526272829303132333435363738394041 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using SMBLibrary.RPC;
- using SMBLibrary.SMB1;
- using SMBLibrary.Services;
- using Utilities;
- namespace SMBLibrary.Server.SMB1
- {
- public class TransactionSubcommandHelper
- {
- internal static TransactionTransactNamedPipeResponse GetSubcommandResponse(SMB1Header header, TransactionTransactNamedPipeRequest subcommand, ISMBShare share, SMB1ConnectionState state)
- {
- SMB1Session session = state.GetSession(header.UID);
- OpenFileObject openFile = session.GetOpenFileObject(subcommand.FID);
- if (openFile == null)
- {
- header.Status = NTStatus.STATUS_INVALID_HANDLE;
- return null;
- }
- int maxOutputLength = UInt16.MaxValue;
- byte[] output;
- header.Status = share.FileStore.DeviceIOControl(openFile.Handle, (uint)IoControlCode.FSCTL_PIPE_TRANSCEIVE, subcommand.WriteData, out output, maxOutputLength);
- if (header.Status != NTStatus.STATUS_SUCCESS)
- {
- return null;
- }
- TransactionTransactNamedPipeResponse response = new TransactionTransactNamedPipeResponse();
- response.ReadData = output;
- return response;
- }
- }
- }
|