0

我正在托管 WebBrowser 控件(使用 ATL),并且我正在寻找一种阻止特定 ActiveX 控件(通过 CLSID)加载的方法。

我知道 ProcessUrlAction 可以阻止 ActiveX 控件,但这是针对整个 URL,它似乎不允许您通过 CLSID 阻止特定的 ActiveX 控件。

我没有看到在 MSHTML 或 WebBrowser 控件中收到通知的任何特定事件接口。

现在我能想到的唯一解决方案是挂钩 CoCreateInstanceEx 并尝试在那里阻止它。

有更简单的想法吗?

4

1 回答 1

0

ProcessUrlAction 也可以阻止单个控件,您需要检查 dwAction=URLACTION_ACTIVEX_RUN,如果是,则 pContext 将具有即将运行的控件的 CLSID。如果它是您要阻止的,则将 pPolicy 设置为 URLPOLICY_DISALLOW 并返回 S_FALSE:

static CLSID CLSID_BAD = {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
STDMETHOD(ProcessUrlAction)(LPCWSTR pwszUrl, DWORD dwAction, BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext, DWORD dwFlags, DWORD dwReserved)
{
    if(URLACTION_ACTIVEX_RUN == dwAction && CLSID_BAD == *(CLSID *)pContext)
    {
        *pPolicy = URLPOLICY_DISALLOW;
        return S_FALSE;
    }
    return INET_E_DEFAULT_ACTION;
}
于 2019-05-02T16:53:23.893 回答