栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从具有凭据的远程非受信任域访问共享文件(UNC)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从具有凭据的远程非受信任域访问共享文件(UNC)

解决问题的方法是使用称为WNetUseConnection的Win32 API 。
使用此功能可通过身份验证连接到UNC路径,而不是映射驱动器

即使您不在同一域中,并且具有不同的用户名和密码,这也将允许您连接到远程计算机。

一旦使用了WNetUseConnection,就可以通过UNC路径访问文件,就好像您在同一域中一样。最好的方法可能是通过内置的共享管理程序。
示例:\计算机名 c $ 程序文件文件夹 file.txt

这是一些使用WNetUseConnection的示例C#代码。
注意,对于NetResource,应为lpLocalName和lpProvider传递null。dwType应该为RESOURCETYPE_DISK。lpRemoteName应该是\
ComputerName。

using System;using System.Runtime.InteropServices ;using System.Threading;namespace ExtremeMirror{    public class PinvokeWindowsNetworking    {        #region Consts        const int RESOURCE_ConNECTED = 0x00000001;        const int RESOURCE_GLOBALNET = 0x00000002;        const int RESOURCE_REMEMBERED = 0x00000003;        const int RESOURCETYPE_ANY = 0x00000000;        const int RESOURCETYPE_DISK = 0x00000001;        const int RESOURCETYPE_PRINT = 0x00000002;        const int RESOURCEDISPLAYTYPE_GENERIC = 0x00000000;        const int RESOURCEDISPLAYTYPE_DOMAIN = 0x00000001;        const int RESOURCEDISPLAYTYPE_SERVER = 0x00000002;        const int RESOURCEDISPLAYTYPE_SHARE = 0x00000003;        const int RESOURCEDISPLAYTYPE_FILE = 0x00000004;        const int RESOURCEDISPLAYTYPE_GROUP = 0x00000005;        const int RESOURCEUSAGE_ConNECTABLE = 0x00000001;        const int RESOURCEUSAGE_ConTAINER = 0x00000002;        const int CONNECT_INTERACTIVE = 0x00000008;        const int CONNECT_prompt = 0x00000010;        const int CONNECT_REDIRECT = 0x00000080;        const int CONNECT_UPDATE_PROFILE = 0x00000001;        const int CONNECT_COMMANDLINE = 0x00000800;        const int CONNECT_CMD_SAVECRED = 0x00001000;        const int CONNECT_LOCALDRIVE = 0x00000100;        #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_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; }        }        // Created with excel formula:        // ="new ErrorClass("&A1&", """&PROPER(SUBSTITUTE(MId(A1,7,LEN(A1)-6), "_", " "))&"""), "        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"),         };        private static string getErrorForNumber(int errNum)         { foreach (ErrorClass er in ERROR_LIST)  {     if (er.num == errNum) return er.message; } return "Error: Unknown, " + errNum;        }        #endregion        [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 WNetCancelConnection2( string lpName, int dwFlags, 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 = "";        }        public static string connectToRemote(string remoteUNC, string username, string password)         { return connectToRemote(remoteUNC, username, password, false);        }        public static string connectToRemote(string remoteUNC, string username, string password, bool promptUser)         { NETRESOURCE nr = new NETRESOURCE(); nr.dwType = RESOURCETYPE_DISK; nr.lpRemoteName = remoteUNC; //          nr.lpLocalName = "F:"; int ret; if (promptUser)      ret = WNetUseConnection(IntPtr.Zero, nr, "", "", CONNECT_INTERACTIVE | CONNECT_prompt, null, null, null); else      ret = WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null); if (ret == NO_ERROR) return null; return getErrorForNumber(ret);        }        public static string disconnectRemote(string remoteUNC)         { int ret = WNetCancelConnection2(remoteUNC, CONNECT_UPDATE_PROFILE, false); if (ret == NO_ERROR) return null; return getErrorForNumber(ret);        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/400753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号