KeePass源代码分析2---基于插件的架构
KeePass是一个基于插件机制的绿色开源软件,也就是所有的KeePass插件不用像操作系统注册就直接可以使用,这就避免了污染了系统注册表。我们这节来分析KeePass的机制实现机制。
首先确定已经下载了KeePass源代码,并且已经编译成功了。打开KeePass项目工程,可以看到一下的目录结构:
我们不用关注KeePassLibC项目工程,因为它是PwSafe项目工程下KeePassLibCpp的一个dll实现版。首先我们来认识这个目录结构:
(1)HeaderFiles文件夹,不用多说,这个KeePass的头文件。
(2)KeePassLibCpp文件夹,这个是KeePass的核心库,包括了KeePass大部分实现和插件机制的设计。其中Crypto子目录实现了各种加密、解密算法,例如BASE64、SHA2系列、AES算法以及twofish算法。DataExchange子目录主要实现了KeePass文件格式与其他格式(txt、html、cvs、xml等)之间的相互转化。也就是说,KeePass文件格式和其他文件格式可以相互导入和导出。Details子目录主要实现了KeePass向下兼容的功能,也就是说新版的KeePass可以打开旧版的KeePass文件,例如,office 2007可以向下兼容office 2003一样。具体实现在接下来的系列再分析。PasswordGenerator子目录主要实现了强大的密码生成功能。具体实现以后再分析。SDK子目录主要实现了KeePass的插件机制,也是本节重点讨论的东西。SysSpec_windows和Util子目录主要是一些通用的功能类。PwManager类主要实现了KeePass文件格式,有关KeePass的读取和保存等。是KeePass的一个核心类。
(3)NewGUI文件夹主要是一些扩展的windows控件库。
(4)Plugin文件是KeePass实现的一些重要接口,这些接口完成了KeePass的核心功能,并且暴露给外部模块使用,例如编写KeePass插件时就可以使用这些接口。
(5)Util文件也是提供一些通用功能类。
了解了KeePass代码组织结构, 现在来分析KeePass的插件机制。这需要COM方面的知识,如果还不了解COM方面的知识,可以参考潘爱民的com原理与应用。
KeePass机制如下:每个插件都实现一个规范:IKpPlugin接口。IKpPlugin接口包括以下接口。
(6)// *** IKpUnknown methods ***
(7) STDMETHOD(QueryInterface)(REFIID riid, void** ppvObject) = 0;
(8) STDMETHOD_(ULONG, AddRef)() = 0;
(9) STDMETHOD_(ULONG, Release)() = 0;
(10)
// *** IKpPlugin methods ***
/// Plugins are notified of events using this method.
/// @return In general you should always return TRUE. Only return FALSE if
/// you want to block further code execution in KeePass in some cases.