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); OpenFileObject openFile = session.GetOpenFileObject(request.FileId.Persistent);
object handle;
if (openFile == null) if (openFile == null)
{
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); return new ErrorResponse(request.CommandName, NTStatus.STATUS_FILE_CLOSED);
} }
}
else
{
handle = openFile.Handle;
}
int maxOutputLength = (int)request.MaxOutputResponse; int maxOutputLength = (int)request.MaxOutputResponse;
byte[] output; 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) if (status != NTStatus.STATUS_SUCCESS)
{ {
return new ErrorResponse(request.CommandName, status); return new ErrorResponse(request.CommandName, status);