1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Runtime.InteropServices;
6
7 namespace WebApplication1
8 {
9 public class WNetHelper
10 {
11 #region Windows API函数
12 /*
13 * Windows API函数WNetAddConnection2
14 * 其作用是创建一个同网络资源的连接,当调用成功时函数返回0。其参数说明如下:
15 * lpNetResource:数据类型是结构NETRESOURCE,该结构中的各个字段对要连接的网络资源进行了定义,
16 * 包括远程计算机共享文件夹的名字,以及本地系统为网络驱动器分配的盘符“X:”,等等;
17 * lpPassword:数据类型为string,该参数是个可选参数,用来设置网络密码,
18 * 如果该参数的值等于vbNullString,则表示采用系统当前登录用户的默认密码;
19 * 如果是一个空字符串,则表示不需要任何密码就可访问网络资源;
20 * lpUserName:数据类型为string,指定用于网络连接的用户名,如果该参数的值等于vbNullString,则表示使用系统当前的登录用户名;
21 * dwFlags:数据类型为long,该参数可以设为0,也可以指定常量CONNECT_UPDATE_PROFILE(表示创建永久性的网络连接)。
22 */
23 [DllImport("mpr.dll", EntryPoint = "WNetAddConnection2")]
24 private static extern uint WNetAddConnection2(
25 [In] NetResource lpNetResource,
26 string lpPassword,
27 string lpUsername,
28 uint dwFlags);
29 /*Windows API函数WNetCancelConnection2
30 * 其作用是断开一个网络连接,当调用成功时函数返回0。其参数说明如下:
31 * lpName:数据类型是string,用来指定已连接资源的远程名称或本地名称,具体在本文中就是给远程共享文件夹分配的盘符:“X:”;
32 * dwFlags:数据类型为long,可以取两个值,0或CONNECT_UPDATE_PROFILE,
33 * 如果为0,而且建立的网络连接是永久性连接,则在Windows下次重新启动时仍会重新连接;
34 * fForce:数据类型为long,如果为True,那么,即使连接的网络资源上有正在打开的文件或作业,也强制断开网络连接,
35 * 这样就会造成数据的丢失、不完整性,建议将该参数的值设为False,如程序中所做。
36 */
37 [DllImport("Mpr.dll", EntryPoint = "WNetCancelConnection2")]
38 private static extern uint WNetCancelConnection2(
39 string lpName,
40 uint dwFlags,
41 bool fForce);
42 //对要连接的网络资源进行了定义,包括远程计算机共享文件夹的名字,以及本地系统为网络驱动器分配的盘符“X:”,等等;
43 [StructLayout(LayoutKind.Sequential)]
44 public class NetResource
45 {
46 public int dwScope;
47 public int dwType;
48 public int dwDisplayType;
49 public int dwUsage;
50 public string lpLocalName;
51 public string lpRemoteName;
52 public string lpComment;
53 public string lpProvider;
54 }
55
56 /// <summary>
57 /// 创建一个同网络资源的连接
58 /// [为网络共享做本地映射]
59 /// </summary>
60 /// <param name="username">访问用户名(windows系统需要加计算机名,如:comp-1/user-1)</param>
61 /// <param name="password">访问用户密码</param>
62 /// <param name="remoteName">网络共享路径(如://192.168.0.9/share)</param>
63 /// <param name="localName">本地映射盘符</param>
64 /// <returns></returns>
65 public static bool WNetAddConnection(string username, string password, string remoteName, string localName)
66 {
67 NetResource netResource = new NetResource();
68 netResource.dwScope = 2;
69 netResource.dwType = 1;
70 netResource.dwDisplayType = 3;
71 netResource.dwUsage = 1;
72 netResource.lpLocalName = localName;
73 netResource.lpRemoteName = remoteName.TrimEnd('/');
74 netResource.lpProvider = null;
75 uint result = WNetAddConnection2(netResource, password, username, 0);
76 return result == 0 ? true : false;
77 }
78 /// <summary>
79 /// 关闭网络连接
80 /// </summary>
81 /// <param name="localName">映射盘符</param>
82 /// <returns></returns>
83 public static bool WNetCancelConnection(string localName)
84 {
85 uint nret = WNetCancelConnection2(localName, 1, true);
86 return nret == 0 ? true : false;
87 }
88 #endregion
89
90 }
91 }