使用 XmlUriResolver 为远程共享提供凭据

麦金尼斯-派珀

在此先感谢您的任何帮助。

我在Stack Overflow和网络上的其他网站(包括Microsoft Docs上看到了几篇文章,但似乎都没有帮助解决我的问题。

我正在开发一个项目,该项目从 WinPE 连接到远程文件共享上的 xml 文件。我已经使用了关于使用 XmlUriResolver 类来“适度”成功的另一篇关于 SO 的帖子的建议。

我目前面临的问题是“拒绝访问”错误(多次尝试修改 XmlUriResolver.Credentials 类)或完全失败而没有任何失败原因。我假设这将是另一个“拒绝访问”错误,但我的 try/catch(异常 e)没有捕捉到原因。

下面是我试图实现的方法的一个片段和相关部分:

relativeSysData = relativeSysData.Replace(@"\", "/");
SysdataXml = $"file://{_globaldata.Server}/{_globaldata.Share}/{relativeSysData}";

XmlUrlResolver XmlResolver = new XmlUrlResolver();
XmlResolver.Credentials = new NetworkCredential(_UserName, 
                                                _Password);

XmlReaderSettings xmlSettings = new XmlReaderSettings();
xmlSettings.XmlResolver = XmlResolver;
LogWriter.WriteLogFile((int)LogWriter.EventID.Xml, (int)LogWriter.EventType.Info,
                      $"Connecting to (remote) System information store at: {SysdataXml}");

xDoc = XDocument.Load(XmlReader.Create(SysdataXml, xmlSettings));
if (xDoc == null)
{
    LogWriter.WriteLogFile((int)LogWriter.EventID.XmlError, (int)LogWriter.EventType.Error,
                          $"Unable to connect to the (remote) data store located at: {SysdataXml}");
    deploy = false;
    capture = false;
    return result;
}

该方法的这一部分特定于访问远程数据。我有一个包含所有方法的 try/catch 语句。

如果我有一个到网络共享的开放连接,该方法将完美运行,但会导致该应用程序开始失败 - 由于已经打开连接。

我有一个可能的替代方案来解决这个解决方案,但会花费额外的代码行。

不诉诸 WNetAddConnection() 解决此问题的任何帮助将不胜感激

亲切的问候

里奇

注意,我知道这是一个身份验证问题。

麦金尼斯-派珀

在研究 XmlUrlResolver 类的工作原理后,我认为它可能引用/访问了 WinPE API 框架中未包含的 API。

经过测试,我已经使用 WNetAddConnection2() API 连接到服务器并在发生任何事情之前进行身份验证,确保 NETRESOURCE 结构的本地名称留空,并且 DisplayType 设置为服务器。

public static int ConnectToServer()
    {
        int result = 0;

        var _netresource = new NetResource()
        {
            scope = _ResourceScope.GlobalNetwork,
            ResourceType = _ResourceType.Any,
            DisplayType = _ResourceDisplayType.Server,
            RemoteName = $@"\\{Program._globaldata.Server}"
        };

        string _username = $@"{Program._globaldata.Server}\RemoteDKBuild";
        string _passsword = "Hic3nuasno6epyndtenars4yDifrts";

        var _connectiontype = (int)_ConnectionType.Interactive | (int)_ConnectionType.Temporary;

        LogWriter.WriteLogFile((int)LogWriter.EventID.NetMan, (int)LogWriter.EventType.Info,
                                $@"Attempting to connect to: \\{_netresource.RemoteName}");
        result = WNetAddConnection2(_netresource, _passsword, _username, _connectiontype);
        var res = Marshal.GetLastWin32Error();
        if (result !=0)
        {
            LogWriter.WriteLogFile((int)LogWriter.EventID.NetMan, (int)LogWriter.EventType.Error,
                                    $@"Failed to connect to: \\{_netresource.RemoteName}, Return Result: {result.ToString()}, Win32 Error Code: {res.ToString()}");
            result = res;
        }
        else
        {
            LogWriter.WriteLogFile((int)LogWriter.EventID.NetMan, (int)LogWriter.EventType.Info,
                                    $@"Connection to: \\{_netresource.RemoteName} has been successfull.");
        }

        return result;
    }

[DllImport("mpr.dll", SetLastError = true)]
private static extern int WNetAddConnection2(NetResource netResource, string password, string username, int flags);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用UIActivityViewController为每个活动提供不同的共享项

来自分类Dev

如何使用GoogleApiClient为云端点客户端提供凭据

来自分类Dev

在C#中使用WebRequest时为Microsoft Report Server提供凭据

来自分类Dev

Team Foundation Client未使用提供的凭据

来自分类Dev

无法使用提供的凭据登录django DRF

来自分类Dev

如何使用VNCServer为CentOS提供远程桌面的色彩深度或像素清晰度?

来自分类Dev

使用Azure AD凭据的Windows 10远程桌面连接

来自分类Dev

sbt使用凭据发布到远程服务器

来自分类Dev

跨域远程处理 - 确定要使用的凭据的问题

来自分类Dev

无法使用凭据连接到远程 SOAP 服务

来自分类Dev

使用远程桌面共享Android设备

来自分类Dev

如何使用凭据测试写入文件共享路径?

来自分类Dev

使用不同的凭据从共享网络运行vbs脚本。(winforms)

来自分类Dev

使用不同的登录凭据访问UNC共享

来自分类Dev

在Firefox中使用跨域脚本标签共享凭据

来自分类Dev

使用不同的凭据访问网络共享

来自分类Dev

如何在Linux上使用凭据共享文件夹?

来自分类Dev

使用不同的凭据从共享网络运行vbs脚本。(winforms)

来自分类Dev

Powershell为RunAs提供凭据

来自分类Dev

使用Silhouette 4.0播放2.5-凭据提供程序

来自分类Dev

使用HttpClient提供凭据后以编程方式注销

来自分类Dev

使用Silhouette 4.0播放2.5-凭据提供程序

来自分类Dev

凭据提供程序使用场景是如何定义的

来自分类Dev

使用域上的(远程计算机的)本地凭据访问远程注册表

来自分类Dev

使用WatchService监视远程共享文件夹(Windows / SMB)

来自分类Dev

使用主机名挂载远程CIF共享

来自分类Dev

在 MappedSuperclass 中为 ElementCollection 使用共享表

来自分类Dev

在ADSI中使用凭据重置远程本地计算机帐户密码

来自分类Dev

如何将当前的凭据与远程桌面一起使用?

Related 相关文章

  1. 1

    使用UIActivityViewController为每个活动提供不同的共享项

  2. 2

    如何使用GoogleApiClient为云端点客户端提供凭据

  3. 3

    在C#中使用WebRequest时为Microsoft Report Server提供凭据

  4. 4

    Team Foundation Client未使用提供的凭据

  5. 5

    无法使用提供的凭据登录django DRF

  6. 6

    如何使用VNCServer为CentOS提供远程桌面的色彩深度或像素清晰度?

  7. 7

    使用Azure AD凭据的Windows 10远程桌面连接

  8. 8

    sbt使用凭据发布到远程服务器

  9. 9

    跨域远程处理 - 确定要使用的凭据的问题

  10. 10

    无法使用凭据连接到远程 SOAP 服务

  11. 11

    使用远程桌面共享Android设备

  12. 12

    如何使用凭据测试写入文件共享路径?

  13. 13

    使用不同的凭据从共享网络运行vbs脚本。(winforms)

  14. 14

    使用不同的登录凭据访问UNC共享

  15. 15

    在Firefox中使用跨域脚本标签共享凭据

  16. 16

    使用不同的凭据访问网络共享

  17. 17

    如何在Linux上使用凭据共享文件夹?

  18. 18

    使用不同的凭据从共享网络运行vbs脚本。(winforms)

  19. 19

    Powershell为RunAs提供凭据

  20. 20

    使用Silhouette 4.0播放2.5-凭据提供程序

  21. 21

    使用HttpClient提供凭据后以编程方式注销

  22. 22

    使用Silhouette 4.0播放2.5-凭据提供程序

  23. 23

    凭据提供程序使用场景是如何定义的

  24. 24

    使用域上的(远程计算机的)本地凭据访问远程注册表

  25. 25

    使用WatchService监视远程共享文件夹(Windows / SMB)

  26. 26

    使用主机名挂载远程CIF共享

  27. 27

    在 MappedSuperclass 中为 ElementCollection 使用共享表

  28. 28

    在ADSI中使用凭据重置远程本地计算机帐户密码

  29. 29

    如何将当前的凭据与远程桌面一起使用?

热门标签

归档