Pass FSCTL_PIPE_WAIT to the INTFileStore layer

This commit is contained in:
Tal Aloni 2017-02-26 18:54:18 +02:00
parent 1d532ed758
commit eaa8300e11

View file

@ -25,14 +25,27 @@ namespace SMBLibrary.Server.SMB2
}
OpenFileObject openFile = session.GetOpenFileObject(request.FileId.Persistent);
object handle;
if (openFile == null)
{
return new ErrorResponse(request.CommandName, NTStatus.STATUS_FILE_CLOSED);
if (request.CtlCode == (uint)IoControlCode.FSCTL_PIPE_WAIT)
{
// [MS-SMB2] 3.2.4.20.9 - FSCTL_PIPE_WAIT request has FileId set to 0xFFFFFFFFFFFFFFFF
handle = null;
}
else
{
return new ErrorResponse(request.CommandName, NTStatus.STATUS_FILE_CLOSED);
}
}
else
{
handle = openFile.Handle;
}
int maxOutputLength = (int)request.MaxOutputResponse;
byte[] output;
NTStatus status = share.FileStore.DeviceIOControl(openFile.Handle, request.CtlCode, request.Input, out output, maxOutputLength);
NTStatus status = share.FileStore.DeviceIOControl(handle, request.CtlCode, request.Input, out output, maxOutputLength);
if (status != NTStatus.STATUS_SUCCESS)
{
return new ErrorResponse(request.CommandName, status);