617 lines
14 KiB
C#
617 lines
14 KiB
C#
// This code is derived from jcifs smb client library <jcifs at samba dot org>
|
|
// Ported by J. Arturo <webmaster at komodosoft dot net>
|
|
//
|
|
// This library is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU Lesser General Public
|
|
// License as published by the Free Software Foundation; either
|
|
// version 2.1 of the License, or (at your option) any later version.
|
|
//
|
|
// This library is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// Lesser General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
// License along with this library; if not, write to the Free Software
|
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
using SharpCifs.Dcerpc.Ndr;
|
|
|
|
namespace SharpCifs.Dcerpc.Msrpc
|
|
{
|
|
public class Netdfs
|
|
{
|
|
public static string GetSyntax()
|
|
{
|
|
return "4fc742e0-4a10-11cf-8273-00aa004ae673:3.0";
|
|
}
|
|
|
|
public const int DfsVolumeFlavorStandalone = unchecked(0x100);
|
|
|
|
public const int DfsVolumeFlavorAdBlob = unchecked(0x200);
|
|
|
|
public const int DfsStorageStateOffline = unchecked(0x0001);
|
|
|
|
public const int DfsStorageStateOnline = unchecked(0x0002);
|
|
|
|
public const int DfsStorageStateActive = unchecked(0x0004);
|
|
|
|
public class DfsInfo1 : NdrObject
|
|
{
|
|
public string EntryPath;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_referent(EntryPath, 1);
|
|
if (EntryPath != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
dst.Enc_ndr_string(EntryPath);
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
int entryPathp = src.Dec_ndr_long();
|
|
if (entryPathp != 0)
|
|
{
|
|
src = src.Deferred;
|
|
EntryPath = src.Dec_ndr_string();
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DfsEnumArray1 : NdrObject
|
|
{
|
|
public int Count;
|
|
|
|
public DfsInfo1[] S;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_long(Count);
|
|
dst.Enc_ndr_referent(S, 1);
|
|
if (S != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
int ss = Count;
|
|
dst.Enc_ndr_long(ss);
|
|
int si = dst.Index;
|
|
dst.Advance(4 * ss);
|
|
dst = dst.Derive(si);
|
|
for (int i = 0; i < ss; i++)
|
|
{
|
|
S[i].Encode(dst);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
Count = src.Dec_ndr_long();
|
|
int sp = src.Dec_ndr_long();
|
|
if (sp != 0)
|
|
{
|
|
src = src.Deferred;
|
|
int ss = src.Dec_ndr_long();
|
|
int si = src.Index;
|
|
src.Advance(4 * ss);
|
|
if (S == null)
|
|
{
|
|
if (ss < 0 || ss > unchecked(0xFFFF))
|
|
{
|
|
throw new NdrException(NdrException.InvalidConformance);
|
|
}
|
|
S = new DfsInfo1[ss];
|
|
}
|
|
src = src.Derive(si);
|
|
for (int i = 0; i < ss; i++)
|
|
{
|
|
if (S[i] == null)
|
|
{
|
|
S[i] = new DfsInfo1();
|
|
}
|
|
S[i].Decode(src);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DfsStorageInfo : NdrObject
|
|
{
|
|
public int State;
|
|
|
|
public string ServerName;
|
|
|
|
public string ShareName;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_long(State);
|
|
dst.Enc_ndr_referent(ServerName, 1);
|
|
dst.Enc_ndr_referent(ShareName, 1);
|
|
if (ServerName != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
dst.Enc_ndr_string(ServerName);
|
|
}
|
|
if (ShareName != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
dst.Enc_ndr_string(ShareName);
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
State = src.Dec_ndr_long();
|
|
int serverNamep = src.Dec_ndr_long();
|
|
int shareNamep = src.Dec_ndr_long();
|
|
if (serverNamep != 0)
|
|
{
|
|
src = src.Deferred;
|
|
ServerName = src.Dec_ndr_string();
|
|
}
|
|
if (shareNamep != 0)
|
|
{
|
|
src = src.Deferred;
|
|
ShareName = src.Dec_ndr_string();
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DfsInfo3 : NdrObject
|
|
{
|
|
public string Path;
|
|
|
|
public string Comment;
|
|
|
|
public int State;
|
|
|
|
public int NumStores;
|
|
|
|
public DfsStorageInfo[] Stores;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_referent(Path, 1);
|
|
dst.Enc_ndr_referent(Comment, 1);
|
|
dst.Enc_ndr_long(State);
|
|
dst.Enc_ndr_long(NumStores);
|
|
dst.Enc_ndr_referent(Stores, 1);
|
|
if (Path != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
dst.Enc_ndr_string(Path);
|
|
}
|
|
if (Comment != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
dst.Enc_ndr_string(Comment);
|
|
}
|
|
if (Stores != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
int storess = NumStores;
|
|
dst.Enc_ndr_long(storess);
|
|
int storesi = dst.Index;
|
|
dst.Advance(12 * storess);
|
|
dst = dst.Derive(storesi);
|
|
for (int i = 0; i < storess; i++)
|
|
{
|
|
Stores[i].Encode(dst);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
int pathp = src.Dec_ndr_long();
|
|
int commentp = src.Dec_ndr_long();
|
|
State = src.Dec_ndr_long();
|
|
NumStores = src.Dec_ndr_long();
|
|
int storesp = src.Dec_ndr_long();
|
|
if (pathp != 0)
|
|
{
|
|
src = src.Deferred;
|
|
Path = src.Dec_ndr_string();
|
|
}
|
|
if (commentp != 0)
|
|
{
|
|
src = src.Deferred;
|
|
Comment = src.Dec_ndr_string();
|
|
}
|
|
if (storesp != 0)
|
|
{
|
|
src = src.Deferred;
|
|
int storess = src.Dec_ndr_long();
|
|
int storesi = src.Index;
|
|
src.Advance(12 * storess);
|
|
if (Stores == null)
|
|
{
|
|
if (storess < 0 || storess > unchecked(0xFFFF))
|
|
{
|
|
throw new NdrException(NdrException.InvalidConformance);
|
|
}
|
|
Stores = new DfsStorageInfo[storess];
|
|
}
|
|
src = src.Derive(storesi);
|
|
for (int i = 0; i < storess; i++)
|
|
{
|
|
if (Stores[i] == null)
|
|
{
|
|
Stores[i] = new DfsStorageInfo();
|
|
}
|
|
Stores[i].Decode(src);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DfsEnumArray3 : NdrObject
|
|
{
|
|
public int Count;
|
|
|
|
public DfsInfo3[] S;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_long(Count);
|
|
dst.Enc_ndr_referent(S, 1);
|
|
if (S != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
int ss = Count;
|
|
dst.Enc_ndr_long(ss);
|
|
int si = dst.Index;
|
|
dst.Advance(20 * ss);
|
|
dst = dst.Derive(si);
|
|
for (int i = 0; i < ss; i++)
|
|
{
|
|
S[i].Encode(dst);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
Count = src.Dec_ndr_long();
|
|
int sp = src.Dec_ndr_long();
|
|
if (sp != 0)
|
|
{
|
|
src = src.Deferred;
|
|
int ss = src.Dec_ndr_long();
|
|
int si = src.Index;
|
|
src.Advance(20 * ss);
|
|
if (S == null)
|
|
{
|
|
if (ss < 0 || ss > unchecked(0xFFFF))
|
|
{
|
|
throw new NdrException(NdrException.InvalidConformance);
|
|
}
|
|
S = new DfsInfo3[ss];
|
|
}
|
|
src = src.Derive(si);
|
|
for (int i = 0; i < ss; i++)
|
|
{
|
|
if (S[i] == null)
|
|
{
|
|
S[i] = new DfsInfo3();
|
|
}
|
|
S[i].Decode(src);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DfsInfo200 : NdrObject
|
|
{
|
|
public string DfsName;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_referent(DfsName, 1);
|
|
if (DfsName != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
dst.Enc_ndr_string(DfsName);
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
int dfsNamep = src.Dec_ndr_long();
|
|
if (dfsNamep != 0)
|
|
{
|
|
src = src.Deferred;
|
|
DfsName = src.Dec_ndr_string();
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DfsEnumArray200 : NdrObject
|
|
{
|
|
public int Count;
|
|
|
|
public DfsInfo200[] S;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_long(Count);
|
|
dst.Enc_ndr_referent(S, 1);
|
|
if (S != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
int ss = Count;
|
|
dst.Enc_ndr_long(ss);
|
|
int si = dst.Index;
|
|
dst.Advance(4 * ss);
|
|
dst = dst.Derive(si);
|
|
for (int i = 0; i < ss; i++)
|
|
{
|
|
S[i].Encode(dst);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
Count = src.Dec_ndr_long();
|
|
int sp = src.Dec_ndr_long();
|
|
if (sp != 0)
|
|
{
|
|
src = src.Deferred;
|
|
int ss = src.Dec_ndr_long();
|
|
int si = src.Index;
|
|
src.Advance(4 * ss);
|
|
if (S == null)
|
|
{
|
|
if (ss < 0 || ss > unchecked(0xFFFF))
|
|
{
|
|
throw new NdrException(NdrException.InvalidConformance);
|
|
}
|
|
S = new DfsInfo200[ss];
|
|
}
|
|
src = src.Derive(si);
|
|
for (int i = 0; i < ss; i++)
|
|
{
|
|
if (S[i] == null)
|
|
{
|
|
S[i] = new DfsInfo200();
|
|
}
|
|
S[i].Decode(src);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DfsInfo300 : NdrObject
|
|
{
|
|
public int Flags;
|
|
|
|
public string DfsName;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_long(Flags);
|
|
dst.Enc_ndr_referent(DfsName, 1);
|
|
if (DfsName != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
dst.Enc_ndr_string(DfsName);
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
Flags = src.Dec_ndr_long();
|
|
int dfsNamep = src.Dec_ndr_long();
|
|
if (dfsNamep != 0)
|
|
{
|
|
src = src.Deferred;
|
|
DfsName = src.Dec_ndr_string();
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DfsEnumArray300 : NdrObject
|
|
{
|
|
public int Count;
|
|
|
|
public DfsInfo300[] S;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_long(Count);
|
|
dst.Enc_ndr_referent(S, 1);
|
|
if (S != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
int ss = Count;
|
|
dst.Enc_ndr_long(ss);
|
|
int si = dst.Index;
|
|
dst.Advance(8 * ss);
|
|
dst = dst.Derive(si);
|
|
for (int i = 0; i < ss; i++)
|
|
{
|
|
S[i].Encode(dst);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
Count = src.Dec_ndr_long();
|
|
int sp = src.Dec_ndr_long();
|
|
if (sp != 0)
|
|
{
|
|
src = src.Deferred;
|
|
int ss = src.Dec_ndr_long();
|
|
int si = src.Index;
|
|
src.Advance(8 * ss);
|
|
if (S == null)
|
|
{
|
|
if (ss < 0 || ss > unchecked(0xFFFF))
|
|
{
|
|
throw new NdrException(NdrException.InvalidConformance);
|
|
}
|
|
S = new DfsInfo300[ss];
|
|
}
|
|
src = src.Derive(si);
|
|
for (int i = 0; i < ss; i++)
|
|
{
|
|
if (S[i] == null)
|
|
{
|
|
S[i] = new DfsInfo300();
|
|
}
|
|
S[i].Decode(src);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class DfsEnumStruct : NdrObject
|
|
{
|
|
public int Level;
|
|
|
|
public NdrObject E;
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode(NdrBuffer dst)
|
|
{
|
|
dst.Align(4);
|
|
dst.Enc_ndr_long(Level);
|
|
int descr = Level;
|
|
dst.Enc_ndr_long(descr);
|
|
dst.Enc_ndr_referent(E, 1);
|
|
if (E != null)
|
|
{
|
|
dst = dst.Deferred;
|
|
E.Encode(dst);
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode(NdrBuffer src)
|
|
{
|
|
src.Align(4);
|
|
Level = src.Dec_ndr_long();
|
|
src.Dec_ndr_long();
|
|
int ep = src.Dec_ndr_long();
|
|
if (ep != 0)
|
|
{
|
|
if (E == null)
|
|
{
|
|
E = new DfsEnumArray1();
|
|
}
|
|
src = src.Deferred;
|
|
E.Decode(src);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class NetrDfsEnumEx : DcerpcMessage
|
|
{
|
|
public override int GetOpnum()
|
|
{
|
|
return unchecked(0x15);
|
|
}
|
|
|
|
public int Retval;
|
|
|
|
public string DfsName;
|
|
|
|
public int Level;
|
|
|
|
public int Prefmaxlen;
|
|
|
|
public DfsEnumStruct Info;
|
|
|
|
public NdrLong Totalentries;
|
|
|
|
public NetrDfsEnumEx(string dfsName, int level, int prefmaxlen, DfsEnumStruct
|
|
info, NdrLong totalentries)
|
|
{
|
|
this.DfsName = dfsName;
|
|
this.Level = level;
|
|
this.Prefmaxlen = prefmaxlen;
|
|
this.Info = info;
|
|
this.Totalentries = totalentries;
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Encode_in(NdrBuffer dst)
|
|
{
|
|
dst.Enc_ndr_string(DfsName);
|
|
dst.Enc_ndr_long(Level);
|
|
dst.Enc_ndr_long(Prefmaxlen);
|
|
dst.Enc_ndr_referent(Info, 1);
|
|
if (Info != null)
|
|
{
|
|
Info.Encode(dst);
|
|
}
|
|
dst.Enc_ndr_referent(Totalentries, 1);
|
|
if (Totalentries != null)
|
|
{
|
|
Totalentries.Encode(dst);
|
|
}
|
|
}
|
|
|
|
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
|
public override void Decode_out(NdrBuffer src)
|
|
{
|
|
int infop = src.Dec_ndr_long();
|
|
if (infop != 0)
|
|
{
|
|
if (Info == null)
|
|
{
|
|
Info = new DfsEnumStruct();
|
|
}
|
|
Info.Decode(src);
|
|
}
|
|
int totalentriesp = src.Dec_ndr_long();
|
|
if (totalentriesp != 0)
|
|
{
|
|
Totalentries.Decode(src);
|
|
}
|
|
Retval = src.Dec_ndr_long();
|
|
}
|
|
}
|
|
}
|
|
}
|