1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
|
/*======================================================
AejW.com - Network Drives
-------------------------
Build: 0015
Author: Adam ej Woods
Modified: 14/05/2004
Ownership: Copyright (c)2004 Adam ej Woods
Source: http://www.aejw.com/
EULA: In no way can this class be disturbed without my
permission, this means reposting on a web site, cdrom, or any other form
of media. The code can be used for commercial or personal purposes, as
long as credit is given to the author. The header (this information) can
not be modified or removed. www.CodeProject.com has permission to
disturbe this class.
=======================================================*/
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace aejw.Network
{
/// <summary>
/// AejW.com - Network Drive Interface
/// </summary>
public class NetworkDrive{
#region API
[DllImport("mpr.dll")] private static extern int WNetAddConnection2A
(ref structNetResource pstNetRes, string psPassword, string psUsername,
int piFlags);
[DllImport("mpr.dll")] private static extern int
WNetCancelConnection2A(string psName, int piFlags, int pfForce);
[DllImport("mpr.dll")] private static extern int WNetConnectionDialog
(int phWnd, int piType);
[DllImport("mpr.dll")] private static extern int WNetDisconnectDialog
(int phWnd, int piType);
[DllImport("mpr.dll")] private static extern int
WNetRestoreConnectionW(int phWnd, string psLocalDrive);
[StructLayout(LayoutKind.Sequential)]
private struct structNetResource{
public int iScope;
public int iType;
public int iDisplayType;
public int iUsage;
public string sLocalName;
public string sRemoteName;
public string sComment;
public string sProvider;
}
private const int RESOURCETYPE_DISK = 0x1;
//Standard
private const int CONNECT_INTERACTIVE = 0x00000008;
private const int CONNECT_PROMPT = 0x00000010;
private const int CONNECT_UPDATE_PROFILE = 0x00000001;
//IE4+
private const int CONNECT_REDIRECT = 0x00000080;
//NT5 only
private const int CONNECT_COMMANDLINE = 0x00000800;
private const int CONNECT_CMD_SAVECRED = 0x00001000;
#endregion
#region Propertys and options
private bool lf_SaveCredentials = false;
/// <summary>
/// Option to save credentials are reconnection...
/// </summary>
public bool SaveCredentials{
get{return(lf_SaveCredentials);}
set{lf_SaveCredentials=value;}
}
private bool lf_Persistent = false;
/// <summary>
/// Option to reconnect drive after log off / reboot ...
/// </summary>
public bool Persistent{
get{return(lf_Persistent);}
set{lf_Persistent=value;}
}
private bool lf_Force = false;
/// <summary>
/// Option to force connection if drive is already mapped...
/// or force disconnection if network path is not responding...
/// </summary>
public bool Force{
get{return(lf_Force);}
set{lf_Force=value;}
}
private bool ls_PromptForCredentials = false;
/// <summary>
/// Option to prompt for user credintals when mapping a drive
/// </summary>
public bool PromptForCredentials{
get{return(ls_PromptForCredentials);}
set{ls_PromptForCredentials=value;}
}
private string ls_Drive = "s:";
/// <summary>
/// Drive to be used in mapping / unmapping...
/// </summary>
public string LocalDrive{
get{return(ls_Drive);}
set{
if(value.Length>=1){
ls_Drive=value.Substring(0,1)+":";
}else{
ls_Drive="";
}
}
}
private string ls_ShareName = "\\\\Computer\\C$";
/// <summary>
/// Share address to map drive to.
/// </summary>
public string ShareName{
get{return(ls_ShareName);}
set{ls_ShareName=value;}
}
#endregion
#region Function mapping
/// <summary>
/// Map network drive
/// </summary>
public void MapDrive(){zMapDrive(null, null);}
/// <summary>
/// Map network drive (using supplied Password)
/// </summary>
public void MapDrive(string Password){zMapDrive(null, Password);}
/// <summary>
/// Map network drive (using supplied Username and Password)
/// </summary>
public void MapDrive(string Username, string Password){zMapDrive
(Username, Password);}
/// <summary>
/// Unmap network drive
/// </summary>
public void UnMapDrive(){zUnMapDrive(this.lf_Force);}
/// <summary>
/// Check / restore persistent network drive
/// </summary>
public void RestoreDrives(){zRestoreDrive();}
/// <summary>
/// Display windows dialog for mapping a network drive
/// </summary>
public void ShowConnectDialog(Form ParentForm){zDisplayDialog
(ParentForm,1);}
/// <summary>
/// Display windows dialog for disconnecting a network drive
/// </summary>
public void ShowDisconnectDialog(Form ParentForm){zDisplayDialog
(ParentForm,2);}
#endregion
#region Core functions
// Map network drive
private void zMapDrive(string psUsername, string psPassword){
//create struct data
structNetResource stNetRes = new structNetResource();
stNetRes.iScope=2;
stNetRes.iType=RESOURCETYPE_DISK;
stNetRes.iDisplayType=3;
stNetRes.iUsage=1;
stNetRes.sRemoteName=ls_ShareName;
stNetRes.sLocalName=ls_Drive;
//prepare params
int iFlags=0;
if(lf_SaveCredentials){iFlags+=CONNECT_CMD_SAVECRED;}
if(lf_Persistent){iFlags+=CONNECT_UPDATE_PROFILE;}
if(ls_PromptForCredentials)
{iFlags+=CONNECT_INTERACTIVE+CONNECT_PROMPT;}
if(psUsername==""){psUsername=null;}
if(psPassword==""){psPassword=null;}
//if force, unmap ready for new connection
if(lf_Force){try{zUnMapDrive(true);}catch{}}
//call and return
int i = WNetAddConnection2A(ref stNetRes, psPassword,
psUsername, iFlags);
if(i>0)
{throw new System.ComponentModel.Win32Exception(i);}
}
// Unmap network drive
private void zUnMapDrive(bool pfForce){
//call unmap and return
int iFlags=0;
if(lf_Persistent){iFlags+=CONNECT_UPDATE_PROFILE;}
int i = WNetCancelConnection2A(ls_Drive, iFlags, Convert.ToInt32
(pfForce));
if(i>0){throw new System.ComponentModel.Win32Exception(i);}
}
// Check / Restore a network drive
private void zRestoreDrive(){
//call restore and return
int i = WNetRestoreConnectionW(0, null);
if(i>0){throw new System.ComponentModel.Win32Exception(i);}
}
// Display windows dialog
private void zDisplayDialog(Form poParentForm, int piDialog)
{
int i = -1;
int iHandle = 0;
//get parent handle
if(poParentForm!=null){
iHandle = poParentForm.Handle.ToInt32();
}
//show dialog
if(piDialog==1){
i = WNetConnectionDialog(iHandle, RESOURCETYPE_DISK);
}else if(piDialog==2){
i = WNetDisconnectDialog(iHandle, RESOURCETYPE_DISK);
}
if(i>0){throw new System.ComponentModel.Win32Exception(i);}
//set focus on parent form
poParentForm.BringToFront();
}
#endregion
}
} |
Partager