143 lines
3.6 KiB
C#
143 lines
3.6 KiB
C#
using C4IT.Logging;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.DirectoryServices.AccountManagement;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
using System.Security.AccessControl;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace LiamAD
|
|
{
|
|
public class cADBase
|
|
{
|
|
private cADLogonInfo privLogonInfo = null;
|
|
private int scanningDepth;
|
|
public PrincipalContext adContext = null;
|
|
public Exception LastException { get; private set; } = null;
|
|
public string LastErrorMessage { get; private set; } = null;
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public void ResetError()
|
|
{
|
|
LastException = null;
|
|
LastErrorMessage = null;
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public void SetErrorException(string Action, Exception E, LogLevels lev = LogLevels.Error)
|
|
{
|
|
LastException = E;
|
|
LastErrorMessage = Action + ": " + E.Message;
|
|
cLogManager.LogEntry(Action, lev);
|
|
}
|
|
|
|
|
|
[DllImport("mpr.dll")]
|
|
private static extern int WNetAddConnection2(NetResource netResource, string password, string username, int flags);
|
|
|
|
[DllImport("mpr.dll")]
|
|
private static extern int WNetCancelConnection2(string name, int flags,
|
|
bool force);
|
|
|
|
}
|
|
|
|
|
|
public class cADLogonInfo
|
|
{
|
|
public string Domain;
|
|
public string User;
|
|
public string UserSecret;
|
|
public string TargetGroupPath;
|
|
}
|
|
|
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public class NetResource
|
|
{
|
|
public ResourceScope Scope;
|
|
public ResourceType ResourceType;
|
|
public ResourceDisplaytype DisplayType;
|
|
public int Usage;
|
|
public string LocalName;
|
|
public string RemoteName;
|
|
public string Comment;
|
|
public string Provider;
|
|
}
|
|
|
|
public enum ResourceScope : int
|
|
{
|
|
Connected = 1,
|
|
GlobalNetwork,
|
|
Remembered,
|
|
Recent,
|
|
Context
|
|
};
|
|
|
|
public enum ResourceType : int
|
|
{
|
|
Any = 0,
|
|
Disk = 1,
|
|
Print = 2,
|
|
Reserved = 8,
|
|
}
|
|
|
|
public enum ResourceDisplaytype : int
|
|
{
|
|
Generic = 0x0,
|
|
Domain = 0x01,
|
|
Server = 0x02,
|
|
Share = 0x03,
|
|
File = 0x04,
|
|
Group = 0x05,
|
|
Network = 0x06,
|
|
Root = 0x07,
|
|
Shareadmin = 0x08,
|
|
Directory = 0x09,
|
|
Tree = 0x0a,
|
|
Ndscontainer = 0x0b
|
|
}
|
|
|
|
public enum NetError : uint
|
|
{
|
|
NERR_Success = 0,
|
|
NERR_BASE = 2100,
|
|
NERR_UnknownDevDir = (NERR_BASE + 16),
|
|
NERR_DuplicateShare = (NERR_BASE + 18),
|
|
NERR_BufTooSmall = (NERR_BASE + 23),
|
|
}
|
|
public enum SHARE_TYPE : uint
|
|
{
|
|
STYPE_DISKTREE = 0,
|
|
STYPE_PRINTQ = 1,
|
|
STYPE_DEVICE = 2,
|
|
STYPE_IPC = 3,
|
|
STYPE_SPECIAL = 0x80000000,
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
|
public struct SHARE_INFO_1
|
|
{
|
|
public string shi1_netname;
|
|
public uint shi1_type;
|
|
public string shi1_remark;
|
|
public SHARE_INFO_1(string sharename, uint sharetype, string remark)
|
|
{
|
|
this.shi1_netname = sharename;
|
|
this.shi1_type = sharetype;
|
|
this.shi1_remark = remark;
|
|
}
|
|
public override string ToString()
|
|
{
|
|
return shi1_netname;
|
|
}
|
|
}
|
|
}
|