一种进程水印方法、系统及电子设备与流程

文档序号:23719574发布日期:2021-01-24 07:15阅读:100来源:国知局
一种进程水印方法、系统及电子设备与流程

[0001]
本发明涉及数据防护技术领域,尤其涉及一种进程水印方法、系统及电子设备。


背景技术:

[0002]
目前,绝大多数数据都是以电子文档的形式存储在计算机中。日常,人与人、企业与企业之间的协作交流,均离不开电子文档。电子文档,在工作、生活中扮演者重要的角色。电子数据的编辑、流转十分方便,相对于传统的纸质文档,其成本低廉、易于运输、流转,大大方便了人们之间的协作。方便的同时,电子文档的流转安全问题也就变的十分突出。
[0003]
当下,windows平台上有成熟的dlp(data leakage prevention,数据泄露防护)产品,对含有敏感数据的文档进行加密处理,同时不影响用户的正常使用。linux平台上,由于使用用户少,没有类似windows平台上的这些防护功能。
[0004]
随着贸易战白热化,对国产、安全、可信的操作系统及软件需求更加迫切,因此许多软件厂商都对国产化加大了投入。在初期阶段,支持国产操作系统的进程防护类软件,处于空白期。


技术实现要素:

[0005]
本发明提供一种进程水印方法、系统及电子设备,解决现有技术中在国产操作系统环境下不能实现进程防护功能的问题。
[0006]
在本发明实施的第一方面,提供了一种进程水印方法,包括:
[0007]
启动水印处理进程,并修改主窗体的事件通知属性为水印处理进程可以接收所有窗体消息通知事件;
[0008]
拦截所有窗体消息通知事件,当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的窗体信息;
[0009]
根据所述窗体信息判断是否需要为所述新建窗体添加水印;
[0010]
当需要为所述新建窗体添加水印时,在所述新建窗体的原始窗体上创建水印窗体,并在所述新建窗体的原始窗体上创建水印窗体之后,继续拦截所有窗体消息通知事件;
[0011]
当不需要为所述新建窗体添加水印时,继续拦截所有窗体消息通知事件。
[0012]
优选的,修改主窗体的事件通知属性为水印处理进程可以接收所有窗体消息通知事件的步骤包括:
[0013]
调用修改窗体属性函数xchangewindowattributes修改主窗体的事件通知属性为子结构通知掩码substructurenotifymask和结构通知掩码structurenotifymask。
[0014]
优选的,修改主窗体的事件通知属性为水印处理进程可以接收所有窗体消息通知事件之后,拦截所有窗体消息通知事件之前,所述方法还包括:
[0015]
调用xnextevent函数进入事件消息循环主体,进入所述事件消息循环主体后执行拦截所有窗体消息通知事件;
[0016]
在所述新建窗体的原始窗体上创建水印窗体之后,继续拦截所有窗体消息通知事
件的步骤包括:
[0017]
在所述新建窗体的原始窗体上创建水印窗体之后,返回调用xnextevent函数进入所述事件消息循环主体;
[0018]
当不需要为所述新建窗体添加水印时,继续拦截所有窗体消息通知事件的步骤包括:
[0019]
当不需要为所述新建窗体添加水印时,返回调用xnextevent函数进入所述事件消息循环主体。
[0020]
优选的,当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的窗体信息的步骤包括:
[0021]
当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的标题、类名、窗体标识符wid和/或进程标识符pid。
[0022]
优选的,根据所述窗体信息判断是否需要为所述新建窗体添加水印的步骤包括:
[0023]
根据所述新建窗体的标题、类名、窗体标识符wid和/或进程标识符pid,判断所述新建窗体是否属于预设的需要添加水印的目标窗体,当属于时,确定需要为所述新建窗体添加水印,当不属于时,不做任何处理。
[0024]
优选的,在所述新建窗体的原始窗体上创建水印窗体的步骤包括:
[0025]
根据所述新建窗体的尺寸信息和位置信息,创建一层透明且可点击穿透的水印窗体,并将所述水印窗体叠加在所述新建窗体的原始窗体上进行显示。
[0026]
优选的,根据所述新建窗体的尺寸信息和位置信息,创建一层透明且可点击穿透的水印窗体的步骤包括:
[0027]
调用xshapecombinerectangles函数和/或xcreatewindow函数,执行根据所述新建窗体的尺寸信息和位置信息,创建一层透明且可点击穿透的水印窗体。
[0028]
优选的,拦截所有窗体消息通知事件之后,所述方法还包括:
[0029]
当拦截到的窗体消息通知事件为销毁窗体事件时,清除已创建的水印窗体;
[0030]
当拦截到的窗体消息通知事件为除新建窗体事件和销毁窗体事件外的其他事件时,继续拦截所有窗体消息通知事件。
[0031]
在本发明实施的第二方面,还提供了一种进程水印系统,包括:
[0032]
修改模块,用于启动水印处理进程,并修改主窗体的事件通知属性为水印处理进程可以接收所有窗体消息通知事件;
[0033]
拦截模块,用于拦截所有窗体消息通知事件,当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的窗体信息;
[0034]
判断模块,用于根据所述窗体信息判断是否需要为所述新建窗体添加水印;
[0035]
水印添加模块,用于当需要为所述新建窗体添加水印时,在所述新建窗体的原始窗体上创建水印窗体;
[0036]
所述拦截模块还用于,当不需要为所述新建窗体添加水印时,或者在所述新建窗体的原始窗体上创建水印窗体之后,继续拦截所有窗体消息通知事件。
[0037]
在本发明实施的第三方面,还提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线;其中,处理器、通信接口以及存储器通过通信总线完成相互间的通信;
[0038]
存储器,用于存放计算机程序;
[0039]
处理器,用于执行存储器上所存放的程序时,实现如上任一项所述的进程水印方法中的步骤。
[0040]
在本发明实施的第四方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上任一项所述的进程水印方法。
[0041]
针对在先技术,本发明具备如下优点:
[0042]
本发明实施例中,使用x11协议的事件通知机制,首先启动水印处理进程,并修改主窗体的事件通知属性为水印处理进程可以接收所有窗体消息通知事件;然后拦截所有窗体消息通知事件,当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的窗体信息;根据窗体信息判断是否需要为新建窗体添加水印;当需要为新建窗体添加水印时,在新建窗体的原始窗体上创建水印窗体,并在新建窗体的原始窗体上创建水印窗体之后,继续拦截所有窗体消息通知事件;当不需要为新建窗体添加水印时,继续拦截所有窗体消息通知事件。从而基于国产操作系统的特点,使用x11协议的事件通知机制,对相关界面程序的事件进行拦截,分析对应的事件动作类型,识别窗体的创建过程,从而实现了对进程动态添加水印,解决了在国产操作系统环境下不能实现进程防护功能的问题。
[0043]
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
[0044]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
[0045]
图1为本发明实施例提供的进程水印方法的流程示意图;
[0046]
图2为本发明实施例提供的进程水印方法的另一流程示意图;
[0047]
图3为本发明实施例提供的进程水印方法的另一流程示意图;
[0048]
图4为本发明实施例提供的进程水印系统的示意框图;
[0049]
图5为本发明实施例提供的电子设备的示意框图。
具体实施方式
[0050]
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解的是,还可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
[0051]
为了更好地理解本发明,首先对本发明实施例中出现的技术名词解释如下。
[0052]
国产操作系统:多为以linux操作系统为基础二次开发的操作系统,如统信uos、中标麒麟、深度linux、中兴新支点操作系统、湖南麒麟等。
[0053]
x window system:简称x,或者x11,或者x-windows。之所以称作x,是因为在字母表中x位于w之后,而w是mit在x之前所使用的gui(graphical user interface,图形用户界面)系统。之所以称作x11,是因为在1987年的时候,x window system已经进化到第11个版本了,后续所有的x,都是基于x11版本发展而来的(变动不是很大)。为了方便,后续我们都
以x代指x window system。
[0054]
libx11/libxcb:是一个用c语言编写的x window system协议的客户端库,它包含有与x服务器进行通信的函数。
[0055]
现有技术中windows平台上的进程水印功能,使用windows全局消息钩子技术,截获系统全局的窗体消息事件,从而实现动态水印的显示与隐藏的相关功能,但在linux系统下,由于系统架构和实现方法不同,windows平台上的水印显示方案失效。linux系统下,基于x window system实现图形界面,并没有实现对应的全局消息钩子处理器。
[0056]
本发明方案从实际需求和应用的角度出发,提出一种基于国产操作系统的进程水印方法及系统,使用x11协议的事件通知机制技术,对libx11/libxcb库实现的相关界面程序的事件进行拦截,分析对应的事件动作类型,识别窗体的创建过程,从而实现对进程添加动态水印,解决国产操作系统进程水印添加的问题。
[0057]
图1是本发明实施例提供的进程水印方法的流程示意图,参见图1所示,该方法,包括:
[0058]
步骤101:启动水印处理进程,并修改主窗体的事件通知属性为水印处理进程可以接收所有窗体消息通知事件。
[0059]
这里,启动水印处理主进程后,改变主窗体root窗体的属性,使当前进程可以接受x11协议的所有窗体消息通知事件,从而可以拦截窗体事件,并实现对窗体动态添加水印。
[0060]
其中,水印处理进程指的是本发明实施例的进程水印方法的主进程。
[0061]
优选的,上述步骤101包括:
[0062]
调用修改窗体属性函数xchangewindowattributes修改主窗体的事件通知属性为子结构通知掩码substructurenotifymask和结构通知掩码structurenotifymask。
[0063]
此时,使用libx11库函数xchangewindowattributes给系统默认的主窗体修改事件通知属性(substructurenotifymask|structurenotifymask),从而达到当前进程可以接受x11协议的所有窗体消息通知事件的目的。
[0064]
当然,也可使用其他方式达到当前进程可以接受x11协议的所有窗体消息通知事件的目的,例如使用libxcb库中的函数修改主窗体属性。
[0065]
步骤102:拦截所有窗体消息通知事件,当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的窗体信息。
[0066]
这里,拦截所有窗体消息通知事件,包括窗体的创建通知(createnotify)、销毁通知(destroynotify)、重置父窗体通知(reparentnotify)、鼠标移动通知、窗体大小改变通知等事件,当拦截到新建窗体事件时,获取新建窗体的窗体信息,以判断是否需要动态添加水印。
[0067]
步骤103:根据所述窗体信息判断是否需要为所述新建窗体添加水印。
[0068]
这里,根据新建窗体的窗体信息判断是否需要动态添加水印。
[0069]
其中,具体的判断规则可根据需求灵活设置。例如根据窗体信息识别出窗体对应的应用程序开发商以及窗体类型,对于某些应用程序开发商的办公软件窗体动态添加水印,其他应用程序开发商窗体不添加水印,或者对于某些应用程序开发商的加密文件窗体动态添加水印,其他窗体不添加水印,或者对于某些应用程序开发商的办公软件窗体在检测到用户的加密操作时动态添加水印(用户可手动选择指定类型文件进行加密)等等。本发
明实施例对于具体的判断规则不做限定。
[0070]
另外,本发明实施例还可对于不同的用户可以设置不同的文档使用权限,例如对于不同用户设置对word文档使用权限为只读或正常读写、可编辑或不可编辑、可打印或不可打印、开启水印功能或不开启水印功能等。上述步骤103的判断还可加入对用户使用权限的判断,即首先判断当前用户是否具有开启水印功能的权限,当具有时再根据窗体信息判断是否为新建窗体添加水印。或者可在上述步骤101之前,先判断当前用户是否具有开启水印功能的权限,当具有时再启动水印处理主进程执行后续的步骤。
[0071]
步骤104:当需要为所述新建窗体添加水印时,在所述新建窗体的原始窗体上创建水印窗体,并在所述新建窗体的原始窗体上创建水印窗体之后,继续拦截所有窗体消息通知事件。
[0072]
这里,当需要为新建窗体添加水印时,启动水印处理线程,在新建窗体的原始窗体上创建水印窗体,实现了对窗体文件的动态防护。为新建窗体添加完水印后,返回步骤102继续拦截所有窗体消息通知事件,从而循环检测窗体事件动态添加水印,提高防护性能。
[0073]
步骤103之后当不需要为所述新建窗体添加水印时,继续拦截所有窗体消息通知事件。
[0074]
这里,当不需要为新建窗体添加水印,返回步骤102继续拦截所有窗体消息通知事件,从而循环检测窗体事件动态添加水印,提高防护性能。
[0075]
本发明实施例的进程水印方法,基于国产操作系统的特点,使用x11协议的事件通知机制,对相关界面程序的事件进行拦截,分析对应的事件动作类型,识别窗体的创建过程,从而实现了对进程动态添加水印,解决了在国产操作系统环境下不能实现进程防护功能的问题。
[0076]
优选的,上述步骤101之后,上述步骤102之前,所述方法还包括:
[0077]
调用xnextevent函数进入事件消息循环主体,进入所述事件消息循环主体后执行拦截所有窗体消息通知事件。
[0078]
此时,使用libx11库函数xnextevent函数进入事件消息循环主体中,在事件消息循环主体中循环执行拦截窗体消息通知事件并在需要时动态添加水印,直至窗体销毁,提高防护性能。
[0079]
上述步骤104在所述新建窗体的原始窗体上创建水印窗体之后,继续拦截所有窗体消息通知事件的步骤包括:
[0080]
在所述新建窗体的原始窗体上创建水印窗体之后,返回调用xnextevent函数进入所述事件消息循环主体;
[0081]
上述步骤103之后当不需要为所述新建窗体添加水印时,继续拦截所有窗体消息通知事件的步骤包括:
[0082]
当不需要为所述新建窗体添加水印时,返回调用xnextevent函数进入所述事件消息循环主体。
[0083]
此时,当不需要为新建窗体添加水印,或者添加完水印后,返回调用xnextevent函数进入事件消息循环主体中,继续执行拦截窗体消息通知事件并在需要时动态添加水印,提高防护性能。
[0084]
优选的,上述步骤102当拦截到的窗体消息通知事件为新建窗体事件时,获取新建
窗体的窗体信息的步骤包括:
[0085]
步骤1021:当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的标题、类名、窗体标识符wid和/或进程标识符pid。
[0086]
此时,根据拦截到的事件类型,分析对应的窗体,对于新建窗体事件,获取新建窗体的标题、类名、wid(windows identification,窗体标识)和/或pid(process identification,进程标识),以基这些信息识别窗体的操作系统等信息,从而判断是否为新建窗体添加水印。
[0087]
其中,pid指的是运行在终端中的应用程序进程的id。例如终端可以为pc终端,则pid可以为运行在pc终端的浏览器、文档编写软件、即时通讯软件等等应用程序进程的id。
[0088]
具体的,步骤1021可调用xgettext property、xmbtextpropertytotextlist、xfetchname、xgetwmname和/或xgetatomname库函数实现对新建的窗体的标题、类名、id、pid等信息的获取。
[0089]
优选的,上述步骤103包括:
[0090]
步骤1031:根据所述新建窗体的标题、类名、窗体标识符wid和/或进程标识符pid,判断所述新建窗体是否属于预设的需要添加水印的目标窗体,当属于时,确定需要为所述新建窗体添加水印,当不属于时,不做任何处理。
[0091]
此时,可预先设置需要添加水印的目标窗体,当获取到新建窗体的标题、类名、id、pid等信息时,根据这些信息判断新建窗体是否属于目标窗体,属于时,进入水印添加进程,不属于时,不做任何处理,返回事件消息循环主体中,继续拦截监控窗体消息通知事件并在需要时动态添加水印。从而通过设置目标窗体的方式能够准确、快速的判断出是否需要为新建窗体添加水印,提高了处理效率。
[0092]
其中,用户可根据需求灵活设置需要添加水印的目标窗体,例如设置某办公软件(如wps办公软件)的word文档窗体为目标窗体等,本发明实施例对于目标窗体的设置方式不做限定。
[0093]
优选的,上述步骤104包括:
[0094]
步骤1041:根据所述新建窗体的尺寸信息和位置信息,创建一层透明且可点击穿透的水印窗体,并将所述水印窗体叠加在所述新建窗体的原始窗体上进行显示。
[0095]
此时,综合新建窗体的尺寸信息和位置信息,动态创建一层与原始窗体的尺寸和位置相匹配、透明且可点击穿透的水印窗体,并将水印窗体叠加在新建窗体的原始窗体上进行显示,实现了为新建窗体动态添加水印,保护窗体文件的数据安全的目的,且水印窗体为透明窗体,尺寸和位置都与原始窗体匹配,不会影响原始窗体的正常显示,且水印窗体为可点击穿透,不会影响用户在原始窗体上的操作。
[0096]
优选的,上述步骤1041中根据所述新建窗体的尺寸信息和位置信息,创建一层透明且可点击穿透的水印窗体的步骤包括:
[0097]
调用xshapecombinerectangles函数和/或xcreatewindow函数,执行根据所述新建窗体的尺寸信息和位置信息,创建一层透明且可点击穿透的水印窗体。
[0098]
此时,可通过xshapecombinerectangles函数和/或xcreatewindow函数,创建水印窗体,达到保护原始窗体数据安全的目的。
[0099]
具体的,上述步骤1041中在创建动态水印窗体时,可设置水印窗体的父窗体为新
建窗体,使水印窗体可以依附在待保护进程的可视区域。
[0100]
优选的,上述步骤102拦截所有窗体消息通知事件之后,所述方法还包括:
[0101]
步骤106:当拦截到的窗体消息通知事件为销毁窗体事件时,清除已创建的水印窗体。
[0102]
这里,当消息通知事件为销毁窗体事件时,清除已创建的水印窗体包括清除水印窗体本身以及水印窗体占用的内存数据,从而在原窗体销毁时,释放内存资源,并避免已创建的水印窗体对显示产生干扰。
[0103]
其中,清除水印窗体本身时可通过隐藏水印窗体或者删除水印窗体方式实现。
[0104]
步骤107:当拦截到的窗体消息通知事件为除新建窗体事件和销毁窗体事件外的其他事件时,继续拦截所有窗体消息通知事件。
[0105]
这里,当窗体消息通知事件为其他事件时,例如窗体移动、改变大小等事件,继续返回步骤102拦截所有窗体消息通知事件并在需要时动态添加水印。
[0106]
本发明实施例中,当拦截到的窗体消息通知事件为销毁窗体事件时可在清除已创建的水印窗体后,结束当前进程,即不再拦截所有窗体消息通知事件,退出循环主体,以释放内存资源。
[0107]
下面对本发明实施例的一具体实现流程举例说明如下。
[0108]
如图2所示,本发明实施例的进程水印方法执行流程包括:
[0109]
步骤201:开始。
[0110]
步骤202:系统开机后,启动水印处理主进程。
[0111]
步骤203:修改root窗体的事件通知属性为水印处理主进程可以接收x11协议所有窗体消息通知事件。
[0112]
本步骤具体使用libx11库函数xchangewindowattributes给系统默认的主窗体修改事件通知属性(substructurenotifymask|structurenotifymask)。
[0113]
步骤204:调用xnextevent函数进入事件消息循环主体。
[0114]
步骤205:拦截所有窗体消息通知事件。
[0115]
步骤206:判断拦截到的窗体消息通知事件是否为新建窗体事件,若是,则进入步骤207,若否,则进入步骤209。
[0116]
步骤207:获取新建窗体的标题、类名、wid和pid,并根据获取到的窗体信息判断新建窗体是否属于预设的需要添加水印的目标窗体,若是,则进入步骤208,若否,则返回步骤204。
[0117]
步骤208:启动水印处理线程:调用xshapecombinerectangles和xcreate window函数,根据新建窗体的尺寸信息和位置信息动态创建一层依附在此窗口上的透明可点击穿透的水印窗体,并将水印窗体叠加在原始窗体上显示,之后返回步骤204。
[0118]
本步骤创建动态水印窗体,设置水印窗体的父窗体为新建窗体,使水印窗体可以依附在待保护进程的可视区域。
[0119]
步骤209:判断拦截到的窗体消息通知事件是否为销毁窗体事件,若是,则进入步骤2011,若否,则进入步骤2010。
[0120]
步骤2010:确定窗体消息通知事件为除新建窗体事件和销毁窗体事件外的其他事件,例如窗体移动、改变大小等事件,返回步骤204。
[0121]
步骤2011:清除水印窗体本身以及水印窗体占用的内存数据,之后进入步骤2012。
[0122]
步骤2012:结束。
[0123]
本发明实施例的进程水印方法,基于国产操作系统的特点,使用x11协议的事件通知机制,对相关界面程序的事件进行拦截,分析对应的事件动作类型,识别窗体的创建过程,从而实现了对进程动态添加水印,解决了在国产操作系统环境下不能实现进程防护功能的问题。
[0124]
下面结合应用场景对本发明实施例的进程水印方法做进一步说明。
[0125]
示例一,假设本发明实施例的进程水印方法应用于统信uos或中标麒麟桌面操作系统,如图3所示,本发明实施例的进程水印方法包括:
[0126]
步骤301:开始。
[0127]
步骤302:用户通过客户端登录系统账号。
[0128]
步骤303:服务器根据系统账号同步密级及密文使用权限策略。
[0129]
这里的密级及密文使用权限即对于不同的用户设置的不同的文档使用权限,其中包括是否开启水印功能的密文使用权限,理论上只有当前系统账号具有开启水印功能的密文使用权限时才会执行后续水印添加的步骤。
[0130]
步骤304:用户手动加密指定类型文件。
[0131]
这里,用户可以手动选择指定类型文件进行加密。
[0132]
步骤305:用户双击打开加密文件。
[0133]
步骤306:检测当前进程是否需要添加水印,若是,进入步骤307,若否,则进入步骤308。
[0134]
步骤307:创建水印窗体并显示在文档窗体前端。
[0135]
这里,步骤306和307的执行过程可参见图2的步骤201-2012执行过程,在此不做赘述。
[0136]
此时如果用户打开加密文件的同时打开截屏或录屏软件,当用户截屏或录屏时获得的截屏文件或录屏文件为添加水印的文件,从而保护了数据安全。
[0137]
步骤308:检测用户是否退出系统账号,若是,则进入步骤309,若否,则返回步骤303。
[0138]
步骤309:结束。
[0139]
示例二,近几年,随着各种泄密事件突发,对国家安全和长远发展都构成了极大威胁。因此国家专门成立了国家信息安全小组,十分重视网络安全。针对关系到国计民生的金融行业等提出了更高的安全防护要求,避免发生泄密事件。
[0140]
最近以来,随着贸易战的白热化,各行业加快了对国外操作系统及软件的国产化替代步伐。金融行业,积极探讨国产化操作系统及配套软件的评估。基于本发明实施例的进程水印方法可实现金融行业的银行数据防泄漏等安全防护功能,具体的实现流程可参见示例一,在此不做赘述。
[0141]
本发明实施例的进程水印方法,适用于国产操作系统,实现了国产操作系统下进程水印添加,填补了国产操作系统环境下进程防护功能的空白。而且架构先进,技术稳定,兼容性高,且部署方便灵活,使用便利,无需改变用户使用习惯。
[0142]
参见图4所示,本发明实施例还提供了一种进程水印系统400,包括:
[0143]
修改模块401,用于启动水印处理进程,并修改主窗体的事件通知属性为水印处理进程可以接收所有窗体消息通知事件;
[0144]
拦截模块402,用于拦截所有窗体消息通知事件,当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的窗体信息;
[0145]
判断模块403,用于根据所述窗体信息判断是否需要为所述新建窗体添加水印;
[0146]
水印添加模块404,用于当需要为所述新建窗体添加水印时,在所述新建窗体的原始窗体上创建水印窗体;
[0147]
所述拦截模块402还用于,当不需要为所述新建窗体添加水印时,或者在所述新建窗体的原始窗体上创建水印窗体之后,继续拦截所有窗体消息通知事件。
[0148]
本发明实施例的进程水印系统400,基于国产操作系统的特点,使用x11协议的事件通知机制,对相关界面程序的事件进行拦截,分析对应的事件动作类型,识别窗体的创建过程,从而实现了对进程动态添加水印,解决了在国产操作系统环境下不能实现进程防护功能的问题。
[0149]
优选的,所述修改模块401包括:
[0150]
修改子模块,用于调用修改窗体属性函数xchangewindowattributes修改主窗体的事件通知属性为子结构通知掩码substructurenotifymask和结构通知掩码structurenotifymask。
[0151]
优选的,所述系统还包括:
[0152]
调用模块,用于调用xnextevent函数进入事件消息循环主体,进入所述事件消息循环主体后执行拦截所有窗体消息通知事件;
[0153]
所述拦截模块402具体用于:
[0154]
当不需要为所述新建窗体添加水印时,或者在所述新建窗体的原始窗体上创建水印窗体之后,返回所述调用模块调用xnextevent函数进入所述事件消息循环主体。
[0155]
优选的,所述拦截模块402包括:
[0156]
获取子模块,用于当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的标题、类名、窗体标识符wid和/或进程标识符pid。
[0157]
优选的,所述判断模块403包括:
[0158]
判断子模块,用于根据所述新建窗体的标题、类名、窗体标识符wid和/或进程标识符pid,判断所述新建窗体是否属于预设的需要添加水印的目标窗体,当属于时,确定需要为所述新建窗体添加水印,当不属于时,不做任何处理。
[0159]
优选的,所述水印添加模块404包括:
[0160]
水印添加子模块,用于根据所述新建窗体的尺寸信息和位置信息,创建一层透明且可点击穿透的水印窗体,并将所述水印窗体叠加在所述新建窗体的原始窗体上进行显示。
[0161]
优选的,所述水印添加子模块具体用于:
[0162]
调用xshapecombinerectangles函数和/或xcreatewindow函数,执行根据所述新建窗体的尺寸信息和位置信息,创建一层透明且可点击穿透的水印窗体。
[0163]
优选的,所述系统还包括:
[0164]
清除模块,用于当拦截到的窗体消息通知事件为销毁窗体事件时,清除已创建的
水印窗体;
[0165]
所述拦截模块402还用于,当拦截到的窗体消息通知事件为除新建窗体事件和销毁窗体事件外的其他事件时,继续拦截所有窗体消息通知事件。
[0166]
本发明实施例的进程水印系统400,基于国产操作系统的特点,使用x11协议的事件通知机制,对相关界面程序的事件进行拦截,分析对应的事件动作类型,识别窗体的创建过程,从而实现了对进程动态添加水印,解决了在国产操作系统环境下不能实现对应的进程防护功能的问题。
[0167]
对于上述系统实施例而言,由于其与方法实施例基本相似,相关之处参见方法实施例的部分说明即可。
[0168]
本发明实施例还提供了一种电子设备。如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信。
[0169]
存储器503,用于存放计算机程序。
[0170]
处理器501用于执行存储器503上所存放的程序时,实现如下步骤:
[0171]
启动水印处理进程,并修改主窗体的事件通知属性为水印处理进程可以接收所有窗体消息通知事件;
[0172]
拦截所有窗体消息通知事件,当拦截到的窗体消息通知事件为新建窗体事件时,获取新建窗体的窗体信息;
[0173]
根据所述窗体信息判断是否需要为所述新建窗体添加水印;
[0174]
当需要为所述新建窗体添加水印时,在所述新建窗体的原始窗体上创建水印窗体,并在所述新建窗体的原始窗体上创建水印窗体之后,继续拦截所有窗体消息通知事件;
[0175]
当不需要为所述新建窗体添加水印时,继续拦截所有窗体消息通知事件。
[0176]
上述电子设备提到的通信总线可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standardarchitecture,简称eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0177]
通信接口用于上述电子设备与其他设备之间的通信。
[0178]
存储器可以包括随机存取存储器(randomaccess memory,简称ram),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
[0179]
上述的处理器可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0180]
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中所述的进程水印方法。
[0181]
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中所述的进程水印方法。
[0182]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
[0183]
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0184]
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0185]
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,包含在本发明的保护范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1