usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceFileTools
{public classNetworkShareConnect
{#region WNetUseConnection枚举参数
//dwScope
const int RESOURCE_CONNECTED = 0x00000001;const int RESOURCE_GLOBALNET = 0x00000002;const int RESOURCE_REMEMBERED = 0x00000003;//dwType
const int RESOURCETYPE_ANY = 0x00000000;const int RESOURCETYPE_DISK = 0x00000001;const int RESOURCETYPE_PRINT = 0x00000002;//dwDisplayType
const int RESOURCEDISPLAYTYPE_GENERIC = 0x00000000;const int RESOURCEDISPLAYTYPE_DOMAIN = 0x00000001;const int RESOURCEDISPLAYTYPE_SERVER = 0x00000002;const int RESOURCEDISPLAYTYPE_SHARE = 0x00000003;const int RESOURCEDISPLAYTYPE_FILE = 0x00000004;const int RESOURCEDISPLAYTYPE_GROUP = 0x00000005;//dwUsage
const int RESOURCEUSAGE_CONNECTABLE = 0x00000001;const int RESOURCEUSAGE_CONTAINER = 0x00000002;//dwFlags
const int CONNECT_INTERACTIVE = 0x00000008;const int CONNECT_PROMPT = 0x00000010;const int CONNECT_REDIRECT = 0x00000080;const int CONNECT_UPDATE_PROFILE = 0x00000001;const int CONNECT_COMMANDLINE = 0x00000800;const int CONNECT_CMD_SAVECRED = 0x00001000;const int CONNECT_LOCALDRIVE = 0x00000100;#endregion
#region Errors参数
const int NO_ERROR = 0;const int ERROR_ACCESS_DENIED = 5;const int ERROR_ALREADY_ASSIGNED = 85;const int ERROR_BAD_DEVICE = 1200;const int ERROR_BAD_NET_NAME = 67;const int ERROR_BAD_PROVIDER = 1204;const int ERROR_CANCELLED = 1223;const int ERROR_EXTENDED_ERROR = 1208;const int ERROR_INVALID_ADDRESS = 487;const int ERROR_INVALID_PARAMETER = 87;const int ERROR_INVALID_PASSWORD = 1216;const int ERROR_MORE_DATA = 234;const int ERROR_NO_MORE_ITEMS = 259;const int ERROR_NO_NET_OR_BAD_PATH = 1203;const int ERROR_NO_NETWORK = 1222;const int ERROR_BAD_PROFILE = 1206;const int ERROR_CANNOT_OPEN_PROFILE = 1205;const int ERROR_DEVICE_IN_USE = 2404;const int ERROR_NOT_CONNECTED = 2250;const int ERROR_OPEN_FILES = 2401;private structErrorClass
{//定义错误类结构体
public intnum;public stringmessage;public ErrorClass(int num, stringmessage)
{this.num =num;this.message =message;
}
}//连接失败信息汇总
private static ErrorClass[] ERROR_LIST = newErrorClass[] {new ErrorClass(ERROR_ACCESS_DENIED, "Error: Access Denied"),new ErrorClass(ERROR_ALREADY_ASSIGNED, "Error: Already Assigned"),new ErrorClass(ERROR_BAD_DEVICE, "Error: Bad Device"),new ErrorClass(ERROR_BAD_NET_NAME, "Error: Bad Net Name"),new ErrorClass(ERROR_BAD_PROVIDER, "Error: Bad Provider"),new ErrorClass(ERROR_CANCELLED, "Error: Cancelled"),new ErrorClass(ERROR_EXTENDED_ERROR, "Error: Extended Error"),new ErrorClass(ERROR_INVALID_ADDRESS, "Error: Invalid Address"),new ErrorClass(ERROR_INVALID_PARAMETER, "Error: Invalid Parameter"),new ErrorClass(ERROR_INVALID_PASSWORD, "Error: Invalid Password"),new ErrorClass(ERROR_MORE_DATA, "Error: More Data"),new ErrorClass(ERROR_NO_MORE_ITEMS, "Error: No More Items"),new ErrorClass(ERROR_NO_NET_OR_BAD_PATH, "Error: No Net Or Bad Path"),new ErrorClass(ERROR_NO_NETWORK, "Error: No Network"),new ErrorClass(ERROR_BAD_PROFILE, "Error: Bad Profile"),new ErrorClass(ERROR_CANNOT_OPEN_PROFILE, "Error: Cannot Open Profile"),new ErrorClass(ERROR_DEVICE_IN_USE, "Error: Device In Use"),new ErrorClass(ERROR_EXTENDED_ERROR, "Error: Extended Error"),new ErrorClass(ERROR_NOT_CONNECTED, "Error: Not Connected"),new ErrorClass(ERROR_OPEN_FILES, "Error: Open Files"),
};private static string getErrorForNumber(interrNum)
{//遍历获得错误代码
foreach (ErrorClass er inERROR_LIST)
{if (er.num == errNum) returner.message;
}return "Error: Unknown," +errNum;
}#endregion
//调用系统函数WNetUseConnection//用于连接共享
[DllImport("Mpr.dll")]private static extern intWNetUseConnection(
IntPtr hwndOwner,
NETRESOURCE lpNetResource,stringlpPassword,stringlpUserID,intdwFlags,stringlpAccessName,stringlpBufferSize,stringlpResult
);//用于删除连接
[DllImport("Mpr.dll")]private static extern intWNetCancelConnection2(stringlpName,intdwFlags,boolfForce
);
[StructLayout(LayoutKind.Sequential)]private classNETRESOURCE
{public int dwScope = 0;public int dwType = 0;public int dwDisplayType = 0;public int dwUsage = 0;public string lpLocalName = "";//映射到本地的盘符,如"Z:"。不做驱动器映射,可为空
public string lpRemoteName = "";//共享的网络路径
public string lpComment = "";public string lpProvider = "";
}///
///连接共享///
/// 共享网络路径
/// 登录用户名
/// 密码
///
public static string connectToShare(string remoteUNC, string username, stringpassword)
{return connectToRemote(remoteUNC, username, password, false);
}///
///没用户密码连接///
/// 共享网络路径
///
public static string connectToShare(stringremoteUNC)
{return connectToRemote(remoteUNC, "", "", true);
}private static string connectToRemote(string remoteUNC, string username, string password, boolpromptUser)
{
NETRESOURCE nr= newNETRESOURCE
{
dwType=RESOURCETYPE_DISK,
lpRemoteName=remoteUNC
};intret;if(promptUser)
ret= WNetUseConnection(IntPtr.Zero, nr, "", "", CONNECT_INTERACTIVE | CONNECT_PROMPT, null, null, null);elseret= WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null);if (ret == NO_ERROR) return null;returngetErrorForNumber(ret);
}public static string disconnectRemote(stringremoteUNC)
{int ret = WNetCancelConnection2(remoteUNC, CONNECT_UPDATE_PROFILE, false);if (ret == NO_ERROR) return null;returngetErrorForNumber(ret);
}
}
}