Instantly share code, notes, and snippets.
Created
September 29, 2018 02:19
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save jinan-kordab/ab270772a0a56716e4cf807e3b4d427e to your computer and use it in GitHub Desktop.
Network Share class I found online. It assists you access remote computer shares.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Runtime.InteropServices; | |
using System.Web; | |
namespace YourApp.Helpers | |
{ | |
public static class NetworkShare | |
{ | |
/// <summary> | |
/// Connects to the remote share | |
/// </summary> | |
/// <returns>Null if successful, otherwise error message.</returns> | |
public static string ConnectToShare(string uri, string username, string password) | |
{ | |
//Create netresource and point it at the share | |
NETRESOURCE nr = new NETRESOURCE(); | |
nr.dwType = RESOURCETYPE_DISK; | |
nr.lpRemoteName = uri; | |
//Create the share | |
int ret = WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null); | |
//Check for errors | |
if (ret == NO_ERROR) | |
return null; | |
else | |
return GetError(ret); | |
} | |
/// <summary> | |
/// Remove the share from cache. | |
/// </summary> | |
/// <returns>Null if successful, otherwise error message.</returns> | |
public static string DisconnectFromShare(string uri, bool force) | |
{ | |
//remove the share | |
int ret = WNetCancelConnection(uri, force); | |
//Check for errors | |
if (ret == NO_ERROR) | |
return null; | |
else | |
return GetError(ret); | |
} | |
#region P/Invoke Stuff | |
[DllImport("Mpr.dll")] | |
private static extern int WNetUseConnection( | |
IntPtr hwndOwner, | |
NETRESOURCE lpNetResource, | |
string lpPassword, | |
string lpUserID, | |
int dwFlags, | |
string lpAccessName, | |
string lpBufferSize, | |
string lpResult | |
); | |
[DllImport("Mpr.dll")] | |
private static extern int WNetCancelConnection( | |
string lpName, | |
bool fForce | |
); | |
[StructLayout(LayoutKind.Sequential)] | |
private class NETRESOURCE | |
{ | |
public int dwScope = 0; | |
public int dwType = 0; | |
public int dwDisplayType = 0; | |
public int dwUsage = 0; | |
public string lpLocalName = ""; | |
public string lpRemoteName = ""; | |
public string lpComment = ""; | |
public string lpProvider = ""; | |
} | |
#region Consts | |
const int RESOURCETYPE_DISK = 0x00000001; | |
const int CONNECT_UPDATE_PROFILE = 0x00000001; | |
#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_SESSION_CREDENTIAL_CONFLICT = 1219; | |
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 struct ErrorClass | |
{ | |
public int num; | |
public string message; | |
public ErrorClass(int num, string message) | |
{ | |
this.num = num; | |
this.message = message; | |
} | |
} | |
private static ErrorClass[] ERROR_LIST = new ErrorClass[] { | |
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"), | |
new ErrorClass(ERROR_SESSION_CREDENTIAL_CONFLICT, "Error: Credential Conflict"), | |
}; | |
private static string GetError(int errNum) | |
{ | |
foreach (ErrorClass er in ERROR_LIST) | |
{ | |
if (er.num == errNum) return er.message; | |
} | |
return "Error: Unknown, " + errNum; | |
} | |
#endregion | |
#endregion | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment