bhoc++标签之间的数据共享

IE BHO c++ data sharing among tabs

本文关键字:数据共享 之间 标签 bhoc++      更新时间:2023-10-16

我希望我的IE扩展的BHO实例能够共享公共数据。我只需要他们共享几个变量,所以我试图找到一个简单的解决方案的问题。

我能想到的从简单到复杂的替代方案是:

1)从文件系统或注册表中写入/读取数据,请参阅MSDN文章和Codeproject文章。问题:这些信息是否可以从运行在不同线程中的BHO实例访问?

2)开发与所有BHO实例通信的Windows服务或后台应用程序,参见MSDN文章。问题:我不知道如何制作这个,或者从哪里开始。我很担心用户必须安装很多东西。

3)提供IPC机制,使不同的BHO实例可以直接相互通信。与使用IGlobalInterfaceTable一样,请参阅ookii文章。问题:是的,你可以在这个IGlobalInterfaceTable中存储指针,并获得cookie来访问它们,但是你如何与BHO实例2共享一个在BHO实例1中获得的cookie,以便第二个实例可以访问第一个实例插入在IGlobalInterfaceTable中的数据?我们是不是又遇到了同样的数据共享问题?

嗯,正如你所看到的,在寻找了整整一周的解决方案之后,我就是不知道如何开始处理这个问题。

通常,内存映射文件用于此目的。然而,这是一项非常重要的工作,因为您必须确保正确地对它们进行ACL设置,以允许跨进程访问(每个选项卡可能位于不同的进程中),并跨多个完整性级别工作。

1种,除了一个正常的网站可以写的地方与一个可信的网站可以访问的地方是隔离的。

编写服务可能是最简单的方法,因为有大量关于如何编写windows服务的文档(如果使用Visual c++,您甚至可以获得ATL项目向导),并且您的代理代码可以在选项卡进程崩溃甚至用户注销时幸存下来。

3确实你有同样的共享问题,COM消息被UIPI阻止,除非你可以改变消息过滤器,但是COM使用的消息没有记录。我会使用命名管道/内存文件映射之类的东西。

您需要在某处托管通信代理代码,并且只创建一次。你可以写一些东西,比如工作组中的计算机如何选择主浏览器(有点像聊天),或者有一个代理进程来完成通信工作(例如在windows服务中)。