/// <summary>Just bypasses TransWaitNamedPipe - used by DCERPC bind.</summary>
/// <remarks>Just bypasses TransWaitNamedPipe - used by DCERPC bind.</remarks>
/// <exception cref="System.IO.IOException"></exception>
public virtual void WriteDirect(byte[] b, int off, int len, int flags)
{
if (len <= 0)
{
return;
}
if (_tmp == null)
{
throw new IOException("Bad file descriptor");
}
EnsureOpen();
/*
* if (file.log.level >= 4)
* {
* file.log.WriteLine("write: fid=" + file.fid + ",off=" + off + ",len=" + len);
* }
*/
int w;
do
{
w = len > _writeSize ? _writeSize : len;
if (_useNtSmbs)
{
_reqx.SetParam(_file.Fid, _fp, len - w, b, off, w);
if ((flags & 1) != 0)
{
_reqx.SetParam(_file.Fid, _fp, len, b, off, w);
_reqx.WriteMode = 0x8;
}
else
{
_reqx.WriteMode = 0;
}
_file.Send(_reqx, _rspx);
_fp += _rspx.Count;
len -= (int)_rspx.Count;
off += (int)_rspx.Count;
}
else
{
_req.SetParam(_file.Fid, _fp, len - w, b, off, w);
_fp += _rsp.Count;
len -= (int)_rsp.Count;
off += (int)_rsp.Count;
_file.Send(_req, _rsp);
}
}while (len > 0);
}