WNet.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace SIMDP.Project
  8. {
  9. public class WNet
  10. {
  11. public enum ERROR_ID
  12. {
  13. ERROR_SUCCESS = 0, // Success
  14. ERROR_BUSY = 170,
  15. ERROR_MORE_DATA = 234,
  16. ERROR_NO_BROWSER_SERVERS_FOUND = 6118,
  17. ERROR_INVALID_LEVEL = 124,
  18. ERROR_ACCESS_DENIED = 5,
  19. ERROR_INVALID_PASSWORD = 86,
  20. ERROR_INVALID_PARAMETER = 87,
  21. ERROR_BAD_DEV_TYPE = 66,
  22. ERROR_NOT_ENOUGH_MEMORY = 8,
  23. ERROR_NETWORK_BUSY = 54,
  24. ERROR_BAD_NETPATH = 53,
  25. ERROR_NO_NETWORK = 1222,
  26. ERROR_INVALID_HANDLE_STATE = 1609,
  27. ERROR_EXTENDED_ERROR = 1208,
  28. ERROR_DEVICE_ALREADY_REMEMBERED = 1202,
  29. ERROR_NO_NET_OR_BAD_PATH = 1203
  30. }
  31. public enum RESOURCE_SCOPE
  32. {
  33. RESOURCE_CONNECTED = 1,
  34. RESOURCE_GLOBALNET = 2,
  35. RESOURCE_REMEMBERED = 3,
  36. RESOURCE_RECENT = 4,
  37. RESOURCE_CONTEXT = 5
  38. }
  39. public enum RESOURCE_TYPE
  40. {
  41. RESOURCETYPE_ANY = 0,
  42. RESOURCETYPE_DISK = 1,
  43. RESOURCETYPE_PRINT = 2,
  44. RESOURCETYPE_RESERVED = 8,
  45. }
  46. public enum RESOURCE_USAGE
  47. {
  48. RESOURCEUSAGE_CONNECTABLE = 1,
  49. RESOURCEUSAGE_CONTAINER = 2,
  50. RESOURCEUSAGE_NOLOCALDEVICE = 4,
  51. RESOURCEUSAGE_SIBLING = 8,
  52. RESOURCEUSAGE_ATTACHED = 16,
  53. RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
  54. }
  55. public enum RESOURCE_DISPLAYTYPE
  56. {
  57. RESOURCEDISPLAYTYPE_GENERIC = 0,
  58. RESOURCEDISPLAYTYPE_DOMAIN = 1,
  59. RESOURCEDISPLAYTYPE_SERVER = 2,
  60. RESOURCEDISPLAYTYPE_SHARE = 3,
  61. RESOURCEDISPLAYTYPE_FILE = 4,
  62. RESOURCEDISPLAYTYPE_GROUP = 5,
  63. RESOURCEDISPLAYTYPE_NETWORK = 6,
  64. RESOURCEDISPLAYTYPE_ROOT = 7,
  65. RESOURCEDISPLAYTYPE_SHAREADMIN = 8,
  66. RESOURCEDISPLAYTYPE_DIRECTORY = 9,
  67. RESOURCEDISPLAYTYPE_TREE = 10,
  68. RESOURCEDISPLAYTYPE_NDSCONTAINER = 11
  69. }
  70. [StructLayout(LayoutKind.Sequential)]
  71. public struct NETRESOURCE
  72. {
  73. public RESOURCE_SCOPE dwScope;
  74. public RESOURCE_TYPE dwType;
  75. public RESOURCE_DISPLAYTYPE dwDisplayType;
  76. public RESOURCE_USAGE dwUsage;
  77. [MarshalAs(UnmanagedType.LPStr)]
  78. public string lpLocalName;
  79. [MarshalAs(UnmanagedType.LPStr)]
  80. public string lpRemoteName;
  81. [MarshalAs(UnmanagedType.LPStr)]
  82. public string lpComment;
  83. [MarshalAs(UnmanagedType.LPStr)]
  84. public string lpProvider;
  85. }
  86. public class NetworkConnection
  87. {
  88. [DllImport("mpr.dll")]
  89. public static extern int WNetAddConnection2A(NETRESOURCE[] lpNetResource, string lpPassword, string lpUserName, int dwFlags);
  90. [DllImport("mpr.dll")]
  91. public static extern int WNetCancelConnection2A(string sharename, int dwFlags, int fForce);
  92. public static int Connect(string remotePath, string localPath, string username, string password)
  93. {
  94. NETRESOURCE[] share_driver = new NETRESOURCE[1];
  95. share_driver[0].dwScope = RESOURCE_SCOPE.RESOURCE_GLOBALNET;
  96. share_driver[0].dwType = RESOURCE_TYPE.RESOURCETYPE_DISK;
  97. share_driver[0].dwDisplayType = RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_SHARE;
  98. share_driver[0].dwUsage = RESOURCE_USAGE.RESOURCEUSAGE_CONNECTABLE;
  99. share_driver[0].lpLocalName = localPath;
  100. share_driver[0].lpRemoteName = remotePath;
  101. Disconnect(localPath);
  102. int ret = WNetAddConnection2A(share_driver, password, username, 1);
  103. return ret;
  104. }
  105. public static int Disconnect(string localpath)
  106. {
  107. return WNetCancelConnection2A(localpath, 1, 1);
  108. }
  109. }
  110. }
  111. }