【问题标题】:How to implement IObjectSafety for untrusted callers如何为不受信任的调用者实现 IObjectSafety
【发布时间】:2012-08-19 04:43:37
【问题描述】:

我有一个使用 ATL 用 C++ 编写的 ActiveX 控件,它有几个不安全的方法(读取和写入文件)。

我查看了IObjectSafety 接口,但不清楚我是否可以保护个别方法。由于该控件主要通过IDispatch 接口使用,我不希望将整个接口标记为不安全。

有没有关于界面的很好的教程以及InternetExplorer如何使用它?

【问题讨论】:

    标签: internet-explorer com activex atl


    【解决方案1】:

    IObjectSafety 标记接口,而不是单个方法。如果您查看它的语法,您会发现参数不提供标记单个方法的灵活性。

    HRESULT SetInterfaceSafetyOptions(
        REFIID riid,
        DWORD dwOptionSetMask,
        DWORD dwEnabledOptions
    );
    

    另请参阅:How To IObjectSafety Marks ATL Controls Safe for Initializing

    【讨论】:

    • 所以我觉得自己很愚蠢,觉得我需要一个参考来描述它的使用。为什么客户端会调用 SetInterfaceSafetlyOptions,我原以为客户端会调用 GetInterfaceSafetlyOptions。
    • GetInterfaceSafetlyOptions 返回支持和启用的选项。 SetInterfaceSafetlyOptions 允许启用/禁用支持的选项。关键是对象所有者将使用SetInterfaceSafetlyOptions 来初始化对象(在使用之前)以指定特定的操作模式。如果对象没有实现接口,IE 会要求用户确认。否则,它将以编程方式启用该模式并在假设控件负责安全的情况下静默运行。
    • 这开始有意义了。如果 SetInterfaceSafetlyOptions 被称为传递 INTERFACESAFE_FOR_UNTRUSTED_CALLER 那么我是否正确地相信我的不安全函数应该失败,并且在没有调用的情况下它们可以安全运行?非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多