首页 > 系统相关 >Windows网络桥接:事件无法调用任何订户 (异常来自 HRESULT:0x80040201)异常处理

Windows网络桥接:事件无法调用任何订户 (异常来自 HRESULT:0x80040201)异常处理

时间:2024-04-15 17:33:05浏览次数:46  
标签:homeConnection EnableSharing 桥接 null connectionToShare Windows var 网络共享 异常

开发Windows网络桥接使用接口Com组件:Interop.NETCONLib。设置成X64位时调用EnableSharing。出现一下异常

System.Runtime.InteropServices.COMException (0x80040201): 事件无法调用任何订户 (异常来自 HRESULT:0x80040201)
在 NETCONLib.INetSharingConfiguration.EnableSharing(tagSHARINGCONNECTIONTYPE Type)
在 MagicSettingService.NetShare.IcsManager.ShareConnection(INetConnection connectionToShare, INetConnection homeConnection) 位置 C:\Users\t25220\Desktop\网络\NetShareTool\NetShareTool\NetShare\IcsManager.cs:行号 99
在 MagicSettingService.NetShare.NetShareManager.<>c__DisplayClass21_0.<StartShareAsync>b__2() 位置 C:\Users\t25220\Desktop\网络\NetShareTool\NetShareTool\NetShare\NetShareManager.cs:行号 143

以为是EnableSharing函数有关。问题确实暴露在调用这个函数,通过定位发现是在取消共享分享时有问题。

复现步骤是先设置网络分享

1 在x86使用Wmi清楚网络共享

 /// <summary>
 /// 清理之前的网络共享数据
 /// </summary>
 public static void CleanupWMISharingEntries()
 {
     var scope = new ManagementScope("root\\Microsoft\\HomeNet");
     scope.Connect();

     var options = new PutOptions();
     options.Type = PutType.UpdateOnly;

     var query = new ObjectQuery("SELECT * FROM HNet_ConnectionProperties");
     var srchr = new ManagementObjectSearcher(scope, query);
     foreach (ManagementObject entry in srchr.Get())
     {
         if ((bool)entry["IsIcsPrivate"])
             entry["IsIcsPrivate"] = false;
         if ((bool)entry["IsIcsPublic"])
             entry["IsIcsPublic"] = false;
         entry.Put(options);
     }
 }

2 调用Interop.NETCONLib 设置共享

/// <summary>
/// 设置网络共享
/// </summary>
/// <param name="connectionToShare"></param>
/// <param name="homeConnection"></param>
/// <exception cref="ArgumentException"></exception>
public static void ShareConnection(INetConnection connectionToShare, INetConnection homeConnection)
{
    if ((connectionToShare == homeConnection) && (connectionToShare != null))
        throw new ArgumentException("选中共享网络连接不能为同一个");

    CleanupWMISharingEntries();
    if (connectionToShare != null)
    {
        var sc = GetConfiguration(connectionToShare);
        sc.EnableSharing(tagSHARINGCONNECTIONTYPE.ICSSHARINGTYPE_PUBLIC);
    }
    if (homeConnection != null)
    {
        var hc = GetConfiguration(homeConnection);
        hc.EnableSharing(tagSHARINGCONNECTIONTYPE.ICSSHARINGTYPE_PRIVATE);
    }
}

在调用到EnableSharing正常,在x64 时候,则会出现 事件无法调用任何订户 (异常来自 HRESULT:0x80040201)

为了兼容X86和X64架构。取消网络共享使用DisableSharing接口

/// <summary>
/// 停止当前的网络共享
/// </summary>
public static void DisableSharing()
{
    var share = GetCurrentlySharedConnections();
    if (share.SharedConnection != null)
        GetConfiguration(share.SharedConnection).DisableSharing();
    if (share.HomeConnection != null)
        GetConfiguration(share.HomeConnection).DisableSharing();
}

则调用正常

 /// <summary>
 /// 设置网络共享
 /// </summary>
 /// <param name="connectionToShare"></param>
 /// <param name="homeConnection"></param>
 /// <exception cref="ArgumentException"></exception>
 public static void ShareConnection(INetConnection connectionToShare, INetConnection homeConnection)
 {
     if ((connectionToShare == homeConnection) && (connectionToShare != null))
         throw new ArgumentException("选中共享网络连接不能为同一个");

     DisableSharing();
     if (connectionToShare != null)
     {
         var sc = GetConfiguration(connectionToShare);
         sc.EnableSharing(tagSHARINGCONNECTIONTYPE.ICSSHARINGTYPE_PUBLIC);
     }
     if (homeConnection != null)
     {
         var hc = GetConfiguration(homeConnection);
         hc.EnableSharing(tagSHARINGCONNECTIONTYPE.ICSSHARINGTYPE_PRIVATE);
     }
 }

3 当网络共享时已经设置,未取消网络共享时,也会出现事件无法调用任何订户 (异常来自 HRESULT:0x80040201)。因此在x64下采用Wmi 清理不完全,和x86不一致,缺少清理逻辑。建议采用EnableSharing Api。

 

 

 

标签:homeConnection,EnableSharing,桥接,null,connectionToShare,Windows,var,网络共享,异常
From: https://www.cnblogs.com/terryK/p/18136571

相关文章

  • openGauss Anomaly-detection-异常检测使用指导
    使用指导假设指标采集系统运行正常,并且用户已经初始化了配置文件目录confpath,则可以通过下述命令实现本特性的功能:仅启动异常检测功能:gs_dbmindservicestart--confconfpath--only-runanomaly_detection对于某一指标,在全部节点上,从timestamps1到timestamps1时间段内的数......
  • openGauss Anomaly-detection-异常检测获取帮助
    获取帮助模块命令行说明:gs_dbmindcomponentanomaly_detection--help显示如下帮助信息:usage:anomaly_detection.py[-h]--action{overview,plot}-cCONF-mMETRIC-sSTART_TIME-eEND_TIME[-HHOST][-aANOMALY]WorkloadAnomalyd......
  • openGauss Anomaly-detection-异常检测命令参考
    命令参考表1命令行参数说明参数参数说明取值范围-h,--help帮助命令---action动作参数overview:概览plot:可视化-c,--conf配置文件目录--m,--metric-name指定显示指标名--H,--host指定数据来源地址信息,通过地址信息进行过滤-ip地址或......
  • Windows窗口句柄监控
    我说想要一段实现了当发现windows桌面上冒出新窗口就截图保存的功能,AI写的,测了下能用。#pipinstallpyautoguipywin32importtimeimportwin32guiimportpyautoguidefcapture_window_screenshot(hwnd):"""截取截图"""screenshot=pyautogui.screenshot()......
  • Nexpose v6.6.246 for Linux & Windows - 漏洞扫描
    Nexposev6.6.246forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,ReleaseApr10,2024请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时覆盖整个网络,随......
  • IOS开发——调用相册崩溃闪退的异常情况处理
    软件版本:Xcode14.2测试手机:iPhone 6S Plus IOS版本:15.8.2AppStoreConnect反馈如下:Xcode打开反馈内容:问题解析:看着这么多内容,网上的说法也有很多,但首先要看下工程中有没有引入DCTZImagePickerController,如果没有,那么找到SDK中的DCTZImagePickerController.bundle文件......
  • Electerm安装、配置与卸载教程(Windows版)
    Electerm是一款开源免费的终端模拟器,集终端模拟器、文件管理器、SSH远程连接、SFTP客户端等功能于一体。它可以在Windows、macOS和Linux操作系统上运行,为用户提供一个功能丰富、易于使用的终端环境。通过Electerm,用户可以在同一窗口中运行多个SSH会话,轻松管理远程服务器,并使用各......
  • "(UE4Editor.exe中)处有未经处理的异常:0xC0000005:读取位置0x0000000000000000时发生
    报错情况:使用ue4.27Slate编写Widget时想通过获取Worl(通过本地PlayerController获取)来实现“设置定时任务为在音乐结束后自动触发函数”的功能ps:定时执行函数代码 解决方法:使用GWorld替换掉通过第0号PlayerController获取世界 原因分析:(由于本人校验较少,暂做以下估计)在......
  • 异常控制流
    异常(待补充)异常的类别异常分为:中断(interrupt)陷阱(trap)故障(fault)终止(abort)进程当在系统中运行一个程序,会得到一个假象,好像我们的程序在独占系统资源地执行。事实上,这是通过进程的虚拟化来实现的。进程的一个经典定义:一个执行中程序的实例。也就是说,每个运行的程序都是......
  • windows 使用MSVC2022编译 Qt 5.12.11
    准备准备一下安装程序,并添加到PATH环境变量。Perl选择64位Portable:PerlPortableRuby选择64位版本进行安装:ruby64bitPython安装Pythonjomnmake不支持并行编译,使用jom进行并行编译。下载jom,解压并添加到PATH环境变量。jomQt5.12.11编译下载地址:Qt5.12.11。使用MS......