关于异常RPC_NT_INVALID_STRING_BINDING(0xC0020001)

简介

RPC_NT_INVALID_STRING_BINDING即无效的字符串绑定,值为0xC0020001。其定义如下:

/
// MessageId: RPC_NT_INVALID_STRING_BINDING
//
// MessageText:
//
// The string binding is invalid.
//
#define RPC_NT_INVALID_STRING_BINDING    ((NTSTATUS)0xC0020001L)

说明

默认情况下,作为DLL创建的C++项目的托管扩展不链接到诸如C/C++运行库(CRT)库、ATL或MFC的本地C/C++库,不使用任何静态变量。此外,项目设置还指定应在启用/NOENTRY选项的情况下链接DLL。这样做是因为与入口点的链接会导致托管代码在DllMain期间运行,这是不安全的。没有入口点的DLL无法初始化静态变量,除非是非常简单的类型,例如整数。通常在/NOENTRY DLL中没有静态变量。ATL、MFC和CRT库都依赖于静态变量,因此如果不首先进行修改,也不能从这些DLL中使用这些库。如果混合模式DLL需要使用依赖于静态的静态或库(如ATL、MFC或CRT),则必须修改DLL,以便手动初始化静态。手动初始化的第一步是确保禁用自动初始化代码,这对于混合DLL是不安全的,并且可能导致死锁。要禁用初始化代码,请执行以下步骤。

某些DLL不与本机库链接,因此它们的DllMain不会初始化一些所需的本机子系统(如CRT或ATL)。一种推荐的解决方案是从托管DLL中删除入口点:
删除托管DLL的入口点

  1. 与/ NOENTRY联系。在解决方案资源管理器中,右键单击该项目
    单击节点,单击属性。在“属性页”对话框中,单击“确定”
    链接器,单击命令行,然后将此开关添加到
    附加选项字段。
  2. 链接msvcrt.lib。在“属性页”对话框中,单击“链接器”,
    单击输入。,然后将msvcrt.lib添加到其他依赖项
    属性。
  3. 删除nochkclr.obj。在“输入”页面(与上一步骤相同的页面)中,从“附加依赖项”属性中删除nochkclr.obj。
  4. CRT中的链接。在“输入”页面(与上一步骤相同的页面)中,将__DllMainCRTStartup @ 12添加到“强制符号引用”属性中。

异常结构信息

ExceptionAddress: 775d4402 (KERNELBASE!RaiseException+0x00000062)
   ExceptionCode: c0020001
  ExceptionFlags: 00000001
NumberParameters: 1
   Parameter[0]: 8007042b//真实错误码或进程退出码

 

原文链接: https://www.cnblogs.com/yilang/p/13298079.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    关于异常RPC_NT_INVALID_STRING_BINDING(0xC0020001)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/367460

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午5:48
下一篇 2023年3月2日 下午5:48

相关推荐