Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.ComponentModel;
- using System.Net;
- using System.Runtime.InteropServices;
- using System.Runtime.Versioning;
- using System.Security.AccessControl;
- using BOOL = System.Boolean;
- using DWORD = System.UInt32;
- using LPWSTR = System.String;
- using NET_API_STATUS = System.UInt32;
- namespace Integrations.Packing_Slips
- {
- public class UNCAccess : IDisposable
- {
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
- internal struct USE_INFO_2
- {
- internal LPWSTR ui2_local;
- internal LPWSTR ui2_remote;
- internal LPWSTR ui2_password;
- internal DWORD ui2_status;
- internal DWORD ui2_asg_type;
- internal DWORD ui2_refcount;
- internal DWORD ui2_usecount;
- internal LPWSTR ui2_username;
- internal LPWSTR ui2_domainname;
- }
- [DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
- internal static extern NET_API_STATUS NetUseAdd(
- LPWSTR UncServerName,
- DWORD Level,
- ref USE_INFO_2 Buf,
- out DWORD ParmError);
- [DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
- internal static extern NET_API_STATUS NetUseDel(
- LPWSTR UncServerName,
- LPWSTR UseName,
- DWORD ForceCond);
- private string sUNCPath;
- private string sUser;
- private string sPassword;
- private string sDomain;
- private int iLastError;
- public UNCAccess()
- {
- }
- public UNCAccess(string UNCPath, string User, string Domain, string Password)
- {
- login(UNCPath, User, Domain, Password);
- }
- public int LastError
- {
- get { return iLastError; }
- }
- ///
- /// Connects to a UNC share folder with credentials
- ///
- /// UNC share path
- /// Username
- /// Domain
- /// Password
- /// True if login was successful
- public bool login(string UNCPath, string User, string Domain, string Password)
- {
- sUNCPath = UNCPath;
- sUser = User;
- sPassword = Password;
- sDomain = Domain;
- return NetUseWithCredentials();
- }
- private bool NetUseWithCredentials()
- {
- uint returncode;
- try
- {
- USE_INFO_2 useinfo = new USE_INFO_2();
- useinfo.ui2_remote = sUNCPath;
- useinfo.ui2_username = sUser;
- useinfo.ui2_domainname = sDomain;
- useinfo.ui2_password = sPassword;
- useinfo.ui2_asg_type = 0;
- useinfo.ui2_usecount = 1;
- uint paramErrorIndex;
- returncode = NetUseAdd(null, 2, ref useinfo, out paramErrorIndex);
- iLastError = (int)returncode;
- return returncode == 0;
- }
- catch
- {
- iLastError = Marshal.GetLastWin32Error();
- return false;
- }
- }
- ///
- /// Closes the UNC share
- ///
- /// True if closing was successful
- public bool NetUseDelete()
- {
- uint returncode;
- try
- {
- returncode = NetUseDel(null, sUNCPath, 2);
- iLastError = (int)returncode;
- return (returncode == 0);
- }
- catch
- {
- iLastError = Marshal.GetLastWin32Error();
- return false;
- }
- }
- public void Dispose()
- {
- NetUseDelete();
- GC.SuppressFinalize(this);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement