访问IInternetHostSecurityManager :: GetSecurityId方法以解决跨域iframe问题

时间:2010-06-21 21:38:46

标签: c# security browser cross-domain

经过大量研究后,似乎在IE中的Web浏览器控件中创建和使用我们自己的安全管理器,我们需要覆盖IInternetHostSecurityManager和IInternetSecurityManager的GetSecurityId方法,因为在某些时候它们会被比较并且如果发现它们返回不同的结果他们抛出UnauthorizedAccess异常。有没有人成功覆盖IInternetHostSecurityManager。 MSDN建议通过SID_SInternetSecurityManager访问它,但我还没有找到任何其他对SID_SInternetSecurityManager的引用。另外我还没有找到IInternetHostSecurityManager的guid所以我无法通过IServiceProvider.QueryService访问它。任何人都成功解决了这个问题,或者在webbrowser控件中找到了一种不同的访问跨域iframe的方法吗?

1 个答案:

答案 0 :(得分:0)

IID_IInternetHostSecurityManager,SID_SInternetSecurityManager和SID_SInternetHostSecurityManager在urlmon.h和urlmon.idl中定义。如果您在C ++中有链接错误,请检查How to avoid error "LNK2001 unresolved external" by using DEFINE_GUID

如果您使用的是脚本语言,则可以使用midl /tlb从urlmon.idl生成类型库,然后导入类型库。您还可以根据urlmon.idl中的定义声明guids和接口。