224 lines
5.3 KiB
C#
224 lines
5.3 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Net;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace SteamWare
|
|
{
|
|
/// <summary>
|
|
/// Helper x gestione accesso device di rete
|
|
/// </summary>
|
|
public class NetworkConnection : IDisposable
|
|
{
|
|
string _networkName;
|
|
|
|
/// <summary>
|
|
/// Init classe
|
|
/// </summary>
|
|
/// <param name="networkName"></param>
|
|
/// <param name="credentials"></param>
|
|
public NetworkConnection(string networkName, NetworkCredential credentials)
|
|
{
|
|
_networkName = networkName;
|
|
|
|
var netResource = new NetResource()
|
|
{
|
|
Scope = ResourceScope.GlobalNetwork,
|
|
ResourceType = ResourceType.Disk,
|
|
DisplayType = ResourceDisplaytype.Share,
|
|
RemoteName = networkName
|
|
};
|
|
|
|
var userName = string.IsNullOrEmpty(credentials.Domain)
|
|
? credentials.UserName
|
|
: string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);
|
|
|
|
var result = WNetAddConnection2(
|
|
netResource,
|
|
credentials.Password,
|
|
userName,
|
|
0);
|
|
|
|
if (result != 0)
|
|
{
|
|
throw new Win32Exception(result);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Dispose classe
|
|
/// </summary>
|
|
~NetworkConnection()
|
|
{
|
|
Dispose(false);
|
|
}
|
|
/// <summary>
|
|
/// Dispose classe
|
|
/// </summary>
|
|
public void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
/// <summary>
|
|
/// Dispose classe
|
|
/// </summary>
|
|
/// <param name="disposing"></param>
|
|
protected virtual void Dispose(bool disposing)
|
|
{
|
|
WNetCancelConnection2(_networkName, 0, true);
|
|
}
|
|
|
|
[DllImport("mpr.dll")]
|
|
private static extern int WNetAddConnection2(NetResource netResource,
|
|
string password, string username, int flags);
|
|
|
|
[DllImport("mpr.dll")]
|
|
private static extern int WNetCancelConnection2(string name, int flags,
|
|
bool force);
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public class NetResource
|
|
{
|
|
/// <summary>
|
|
/// Scope delal risorsa
|
|
/// </summary>
|
|
public ResourceScope Scope;
|
|
/// <summary>
|
|
/// TIpo di risorsa
|
|
/// </summary>
|
|
public ResourceType ResourceType;
|
|
/// <summary>
|
|
/// Tipèo display
|
|
/// </summary>
|
|
public ResourceDisplaytype DisplayType;
|
|
/// <summary>
|
|
/// Impiego
|
|
/// </summary>
|
|
public int Usage;
|
|
/// <summary>
|
|
/// Nome locale
|
|
/// </summary>
|
|
public string LocalName;
|
|
/// <summary>
|
|
/// Nome remoto
|
|
/// </summary>
|
|
public string RemoteName;
|
|
/// <summary>
|
|
/// Commento
|
|
/// </summary>
|
|
public string Comment;
|
|
/// <summary>
|
|
/// Provider
|
|
/// </summary>
|
|
public string Provider;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Enum Scope della risorsa
|
|
/// </summary>
|
|
public enum ResourceScope : int
|
|
{
|
|
/// <summary>
|
|
/// connessa
|
|
/// </summary>
|
|
Connected = 1,
|
|
/// <summary>
|
|
/// rete globale
|
|
/// </summary>
|
|
GlobalNetwork,
|
|
/// <summary>
|
|
/// memorizzata
|
|
/// </summary>
|
|
Remembered,
|
|
/// <summary>
|
|
/// recente
|
|
/// </summary>
|
|
Recent,
|
|
/// <summary>
|
|
/// contesto
|
|
/// </summary>
|
|
Context
|
|
};
|
|
/// <summary>
|
|
/// Enum tipo res
|
|
/// </summary>
|
|
public enum ResourceType : int
|
|
{
|
|
/// <summary>
|
|
/// Qualsiasi
|
|
/// </summary>
|
|
Any = 0,
|
|
/// <summary>
|
|
/// Disco
|
|
/// </summary>
|
|
Disk = 1,
|
|
/// <summary>
|
|
/// Printer
|
|
/// </summary>
|
|
Print = 2,
|
|
/// <summary>
|
|
/// Riservato
|
|
/// </summary>
|
|
Reserved = 8,
|
|
}
|
|
/// <summary>
|
|
/// Enum tipo display
|
|
/// </summary>
|
|
public enum ResourceDisplaytype : int
|
|
{
|
|
/// <summary>
|
|
/// Generico
|
|
/// </summary>
|
|
Generic = 0x0,
|
|
/// <summary>
|
|
/// Dominio
|
|
/// </summary>
|
|
Domain = 0x01,
|
|
/// <summary>
|
|
/// Server
|
|
/// </summary>
|
|
Server = 0x02,
|
|
/// <summary>
|
|
/// COndivisione
|
|
/// </summary>
|
|
Share = 0x03,
|
|
/// <summary>
|
|
/// File
|
|
/// </summary>
|
|
File = 0x04,
|
|
/// <summary>
|
|
/// Gruppo
|
|
/// </summary>
|
|
Group = 0x05,
|
|
/// <summary>
|
|
/// Rete
|
|
/// </summary>
|
|
Network = 0x06,
|
|
/// <summary>
|
|
/// Radice
|
|
/// </summary>
|
|
Root = 0x07,
|
|
/// <summary>
|
|
/// Share admin
|
|
/// </summary>
|
|
Shareadmin = 0x08,
|
|
/// <summary>
|
|
/// Cartella
|
|
/// </summary>
|
|
Directory = 0x09,
|
|
/// <summary>
|
|
/// Albero
|
|
/// </summary>
|
|
Tree = 0x0a,
|
|
/// <summary>
|
|
/// NDS container
|
|
/// </summary>
|
|
Ndscontainer = 0x0b
|
|
}
|
|
}
|