C++ CoreRegisterClassObject返回错误(会话0?)

C++ CoreRegisterClassObject返回错误(会话0?),c++,session,C++,Session,客户正在运行我们的一个程序,通常作为服务运行,作为应用程序运行。客户在CoRegisterClassObject()上遇到以下错误: 该类被配置为作为不同于调用方的安全id运行 它看起来像是某种类型的会话0错误,但是为什么CoRegisterClassObject()应该关心会话0呢?COM应该同时允许服务(会话0)和应用(会话>0),而不关心什么注册了什么,不是吗 此外,我不喜欢这样的事实,即根据Microsoft doc网页,它不在可由CoreRegisterClassObject()返回的

客户正在运行我们的一个程序,通常作为服务运行,作为应用程序运行。客户在
CoRegisterClassObject()
上遇到以下错误:

该类被配置为作为不同于调用方的安全id运行

它看起来像是某种类型的会话0错误,但是为什么
CoRegisterClassObject()
应该关心会话0呢?COM应该同时允许服务(会话0)和应用(会话>0),而不关心什么注册了什么,不是吗


此外,我不喜欢这样的事实,即根据Microsoft doc网页,它不在可由
CoreRegisterClassObject()
返回的错误列表中。

所讨论的错误代码是
CO_E_error_SERVER_IDENTITY
(0x80004015)

每页:

Q6为什么CoreRegisterClassObject返回错误的服务器标识?当以.exe文件启动ATL 1.1服务器服务时,我从CoreRegisterClassObject接收到错误的服务器标识。(该类被配置为作为不同于调用方的安全ID运行。)无论我是否跳过CoInitializeSecurity,似乎都会发生这种情况。它无法作为服务或.exe文件运行

A.许多服务都是通过在交互式用户标识中作为控制台应用程序运行来调试的。由于服务已注册为以不同的标识运行(可由服务控制面板小程序配置),OLE通过返回错误的服务器标识来执行安全性并防止恶意服务器欺骗服务器,从而使CoreRegisterClassObject和RunningObjectTable::Register(ROTFLAGS\u ALLOWANYCLIENT)调用失败。要通过以交互用户的身份运行进行调试,请在服务器的注册表项中进行以下更改以防止这些故障:

•为防止CoreRegisterClassObject失败,请删除以下命名值:

[HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}]
"LocalService"="HelloOleServerService"  
•要防止IRunningObjectTable::Register(ROTFLAGS\u ALLOWANYCLIENT)故障,请执行以下步骤:

  • 删除以下命名值:

    [HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}]
    "LocalService"="HelloOleServerService" 
    
    [HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}]
    "RunAs"="Interactive User"  
    
  • 然后添加以下命名值:

    [HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}]
    "LocalService"="HelloOleServerService" 
    
    [HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}]
    "RunAs"="Interactive User"  
    
  • 您可以在调试后恢复修改后的注册表项


    我假设您必须用COM对象的实际CLSID替换
    {0bf52b15-8cab-11cf-8572-00aa00c006cf}

    您在谈论什么框架?你也许应该把这个作为问题的标签。