Win32 NetApi.cs

using System;
using System.Runtime.InteropServices;
using System.Text;

using HANDLE = System.IntPtr;
using HWND = System.IntPtr;

namespace Win32
{
	public struct NETRESOURCE 
	{
		public int dwScope;
		public int dwType;
		public int dwDisplayType;
		public int dwUsage;
		public string lpLocalName;
		public string lpRemoteName;
		public string lpComment;
		public string lpProvider;
	}
	public struct USER_INFO_3 
	{
		public int Name;
		public int Password;
		public int PasswordAge;
		public int Privilege;
		public int HomeDir;
		public int Comment;
		public int Flags;
		public int ScriptPath;
		public int AuthFlags;
		public int FullName;
		public int UserComment;
		public int Parms;
		public int Workstations;
		public int LastLogon;
		public int LastLogoff;
		public int AcctExpires;
		public int MaxStorage;
		public int UnitsPerWeek;
		public int LogonHours;
		public int BadPwCount;
		public int NumLogons;
		public int LogonServer;
		public int CountryCode;
		public int CodePage;
		public int UserID;
		public int PrimaryGroupID;
		public int Profile;
		public int HomeDirDrive;
		public int PasswordExpired;
	}
	public struct GROUP_INFO_2 
	{
		public int Name;
		public int Comment;
		public int GroupID;
		public int Attributes;
	}
	public struct LOCALGROUP_MEMBERS_INFO_0 
	{
		public int pSID;
	}
	public struct LOCALGROUP_MEMBERS_INFO_1 
	{
		public int pSID;
		public g_netSID_NAME_USE eUsage;
		public int psName;
	}
	public struct WKSTA_INFO_102 
	{
		public int wki102_platform_id;
		public int wki102_computername;
		public int wki102_langroup;
		public int wki102_ver_major;
		public int wki102_ver_minor;
		public int wki102_lanroot;
		public int wki102_logged_on_users;
	}
	public struct WKSTA_USER_INFO_1 
	{
		public int wkui1_username;
		public int wkui1_logon_domain;
		public int wkui1_oth_domains;
		public int wkui1_logon_server;
	}
	public enum g_netSID_NAME_USE 
	{
		SidTypeUser = 1,
		SidTypeGroup = 2,
		SidTypeDomain = 3,
		SidTypeAlias = 4,
		SidTypeWellKnownGroup = 5,
		SidTypeDeletedAccount = 6,
		SidTypeInvalid = 7,
		SidTypeUnknown = 8,
	}


	public abstract class Mpr
	{
		[DllImport("mpr")] public static extern int WNetAddConnection(string lpszNetPath, string lpszPassword, string lpszLocalName);
		[DllImport("mpr")] public static extern int WNetAddConnection2(ref NETRESOURCE lpNetResource, string lpPassword, string lpUserName, int dwFlags);
		[DllImport("mpr")] public static extern int WNetCancelConnection(string lpszName, int bForce);
		[DllImport("mpr")] public static extern int WNetCancelConnection2(string lpName, int dwFlags, int fForce);
		[DllImport("mpr")] public static extern int WNetCloseEnum(HANDLE hEnum);
		[DllImport("mpr")] public static extern int WNetConnectionDialog(HWND hwnd, int dwType);
		[DllImport("mpr")] public static extern int WNetDisconnectDialog(HWND hwnd, int dwType);
		[DllImport("mpr")] public static extern int WNetEnumResource(HANDLE hEnum, ref int lpcCount, ref NETRESOURCE lpBuffer, ref int lpBufferSize);
		[DllImport("mpr")] public static extern int WNetGetConnection(string lpszLocalName, string lpszRemoteName, int cbRemoteName);
		[DllImport("mpr")] public static extern int WNetGetLastError(int lpError, StringBuilder lpErrorBuf, int nErrorBufSize, string lpNameBuf, int nNameBufSize);
		[DllImport("mpr")] public static extern int WNetGetUser(string lpName, StringBuilder lpUserName, ref int lpnLength);
		[DllImport("mpr")] public static extern int WNetOpenEnum(int dwScope, int dwType, int dwUsage, ref NETRESOURCE lpNetResource, ref int lphEnum);
	}

	public abstract class NetApi
	{
		[DllImport("Netapi32")] public static extern int NetApiBufferFree(int lpBuffer);
		[DllImport("Netapi32")] public static extern int NetRemoteTOD(IntPtr yServer, int pBuffer);
		[DllImport("Netapi32")] public static extern int NetUserChangePassword(IntPtr Domain, IntPtr User, Byte OldPass, Byte NewPass);
		[DllImport("Netapi32")] public static extern int NetUserGetGroups(IntPtr lpServer, Byte UserName, int Level, ref int lpBuffer, int PrefMaxLen, ref int lpEntriesRead, ref int lpTotalEntries);
		[DllImport("Netapi32")] public static extern int NetUserGetInfo(IntPtr lpServer, Byte UserName, int Level, ref int lpBuffer);
		[DllImport("Netapi32")] public static extern int NetUserGetLocalGroups(IntPtr lpServer, Byte UserName, int Level, int Flags, ref int lpBuffer, int MaxLen, ref int lpEntriesRead, ref int lpTotalEntries);
		[DllImport("Netapi32")] public static extern int NetWkstaGetInfo(IntPtr lpServer, int Level, IntPtr lpBuffer);
		[DllImport("Netapi32")] public static extern int NetWkstaUserGetInfo(IntPtr reserved, int Level, IntPtr lpBuffer);
		[DllImport("netapi32")] public static extern int NetUserAdd(IntPtr lpServer, int Level, ref USER_INFO_3 lpUser, ref int lpError);
		[DllImport("netapi32")] public static extern int NetLocalGroupDelMembers(int psServer, int psLocalGroup, int lLevel, ref LOCALGROUP_MEMBERS_INFO_0 uMember, int lMemberCount);
		[DllImport("netapi32")] public static extern int NetLocalGroupGetMembers(int psServer, int psLocalGroup, int lLevel, int pBuffer, int lMaxLength, int plEntriesRead, int plTotalEntries, int phResume);

		public const int CNLEN = 15; 
		public const int CONNECT_UPDATE_PROFILE = 0x1;
		public const int FILTER_INTERDOMAIN_TRUST_ACCOUNT = 0x8;
		public const int FILTER_NORMAL_ACCOUNT = 0x2;
		public const int FILTER_PROXY_ACCOUNT = 0x4;
		public const int FILTER_SERVER_TRUST_ACCOUNT = 0x20;
		public const int FILTER_TEMP_DUPLICATE_ACCOUNT = 0x1;
		public const int FILTER_WORKSTATION_TRUST_ACCOUNT = 0x10;
		public const int GNLEN = UNLEN; 
		public const int LG_INCLUDE_INDIRECT = 0x1;
		public const int LM20_PWLEN = 14; 
		public const int MAXCOMMENTSZ = 256; 
		public const int NERR_BASE = 2100;
		public const int NERR_GroupExists = (NERR_BASE + 123);
		public const int NERR_InvalidComputer = (NERR_BASE + 251);
		public const int NERR_NotPrimary = (NERR_BASE + 126);
		public const int NERR_PasswordTooShort = (NERR_BASE + 145);
		public const int NERR_Success = 0;
		public const int NERR_UserExists = (NERR_BASE + 124);
		public const int PWLEN = 256; 
		public const int RESOURCEDISPLAYTYPE_DOMAIN = 0x1;
		public const int RESOURCEDISPLAYTYPE_FILE = 0x4;
		public const int RESOURCEDISPLAYTYPE_GENERIC = 0x0;
		public const int RESOURCEDISPLAYTYPE_GROUP = 0x5;
		public const int RESOURCEDISPLAYTYPE_SERVER = 0x2;
		public const int RESOURCEDISPLAYTYPE_SHARE = 0x3;
		public const int RESOURCETYPE_ANY = 0x0;
		public const int RESOURCETYPE_DISK = 0x1;
		public const int RESOURCETYPE_PRINT = 0x2;
		public const int RESOURCETYPE_UNKNOWN = 0xFFFF;
		public const int RESOURCEUSAGE_ALL = 0x0;
		public const int RESOURCEUSAGE_CONNECTABLE = 0x1;
		public const int RESOURCEUSAGE_CONTAINER = 0x2;
		public const int RESOURCEUSAGE_RESERVED = unchecked((int)0x80000000);
		public const int RESOURCE_CONNECTED = 0x1;
		public const int RESOURCE_ENUM_ALL = 0xFFFF;
		public const int RESOURCE_GLOBALNET = 0x2;
		public const int RESOURCE_PUBLICNET = 0x2;
		public const int RESOURCE_REMEMBERED = 0x3;
		public const int TIMEQ_FOREVER = -1; 
		public const int UF_ACCOUNTDISABLE = 0x2;
		public const int UF_HOMEDIR_REQUIRED = 0x8;
		public const int UF_LOCKOUT = 0x10;
		public const int UF_PASSWD_CANT_CHANGE = 0x40;
		public const int UF_PASSWD_NOTREQD = 0x20;
		public const int UF_SCRIPT = 0x1;
		public const int UNITS_PER_DAY = 24;
		public const int UNITS_PER_WEEK = UNITS_PER_DAY * 7;
		public const int UNLEN = 256; 
		public const int USER_MAXSTORAGE_UNLIMITED = -1; 
		public const int USER_NO_LOGOFF = -1; 
		public const int USER_PRIV_ADMIN = 2;
		public const int USER_PRIV_GUEST = 0;
		public const int USER_PRIV_MASK = 3;
		public const int USER_PRIV_USER = 1;
		public const int WN_ACCESS_DENIED = ERROR.ERROR_ACCESS_DENIED;
		public const int WN_ALREADY_CONNECTED = ERROR.ERROR_ALREADY_ASSIGNED;
		public const int WN_BAD_LOCALNAME = ERROR.ERROR_BAD_DEVICE;
		public const int WN_BAD_NETNAME = ERROR.ERROR_BAD_NET_NAME;
		public const int WN_BAD_PASSWORD = ERROR.ERROR_INVALID_PASSWORD;
		public const int WN_BAD_POINTER = ERROR.ERROR_INVALID_ADDRESS;
		public const int WN_BAD_PROFILE = ERROR.ERROR_BAD_PROFILE;
		public const int WN_BAD_PROVIDER = ERROR.ERROR_BAD_PROVIDER;
		public const int WN_BAD_USER = ERROR.ERROR_BAD_USERNAME;
		public const int WN_BAD_VALUE = ERROR.ERROR_INVALID_PARAMETER;
		public const int WN_CANNOT_OPEN_PROFILE = ERROR.ERROR_CANNOT_OPEN_PROFILE;
		public const int WN_CONNECTION_CLOSED = ERROR.ERROR_CONNECTION_UNAVAIL;
		public const int WN_DEVICE_ERROR = ERROR.ERROR_GEN_FAILURE;
		public const int WN_DEVICE_IN_USE = ERROR.ERROR_DEVICE_IN_USE;
		public const int WN_EXTENDED_ERROR = ERROR.ERROR_EXTENDED_ERROR;
		public const int WN_FUNCTION_BUSY = ERROR.ERROR_BUSY;
		public const int WN_MORE_DATA = ERROR.ERROR_MORE_DATA;
		public const int WN_NET_ERROR = ERROR.ERROR_UNEXP_NET_ERR;
		public const int WN_NOT_CONNECTED = ERROR.ERROR_NOT_CONNECTED;
		public const int WN_NOT_SUPPORTED = ERROR.ERROR_NOT_SUPPORTED;
		public const int WN_NO_NETWORK = ERROR.ERROR_NO_NETWORK;
		public const int WN_NO_NET_OR_BAD_PATH = ERROR.ERROR_NO_NET_OR_BAD_PATH;
		public const int WN_OPEN_FILES = ERROR.ERROR_OPEN_FILES;
		public const int WN_OUT_OF_MEMORY = ERROR.ERROR_NOT_ENOUGH_MEMORY;
		public const int WN_SUCCESS = ERROR.NO_ERROR;
		public const int WN_WINDOWS_ERROR = ERROR.ERROR_UNEXP_NET_ERR;
	}
}