detour
Windows剪切板是一种简单而且开销较小的IPC(InterProcess Communication,进程间通讯)机制,方便用户在不同程序间拷贝数据。在Windows操作系统中存在两种剪切板机制,即标准剪切板机制和OLE剪切板机制。
标准剪切板的基本机制是:Windows系统预留一块全局共享内存,提供数据的进程创建一个全局内存块,并将要传送的数据拷贝到内存中,接受数据的进程获取此内存块的句柄,并拷贝其中的数据。进程使用剪切板的一般步骤为:调用OpenClipboard()函数打开剪切板,调用GetClipboard Data()函数获取剪切板的内容,如果是设置剪切板内容,则调用EmptyClipboard()函数清空剪切板,然后调用SetCipboard Data()设置剪切板内容,调用CloseClipboard()关闭剪切板。因此,防泄密系统可以通过截获进程对USER32.dll中Open Clipboard、GetClipboardData、EmptyClipboard、SetClipboardData API函数的调用,实现对剪切板的控制。
自从OLE(Object Linking and Embedding,对象链接和嵌入)出现后,Windows操作系统出现了另一种剪切板机制――OLE剪切板机制。OLE剪切板使用IDataObject接口,相关的API函数和标准剪切板类似,主要有以下几个:
OleSetClipboard():在剪切板上放置一个IDataObject接口指针;
OleGetClipboard():从剪切板获取一个IDataObject接口指针;
OleFlushClipboard():清除剪切板中的内容,并释放IDataObject接口指针;
OleIsCurrentClipboard():判断剪切板上是否存在指定对象。