发明内容
本申请实施例公开了一种信息获得方法及装置,以获得当前登录用户的用户信息。
为达到上述目的,本申请实施例公开了一种信息获得方法,所述方法包括:
接收针对当前登录用户的用户信息获得指令;
获得预设的资源管理器的进程标识;
根据所述进程标识,获得所述预设的资源管理器的进程句柄;
根据所述进程句柄,获得所述预设的资源管理器的令牌句柄;
以安全认证的权限复制所述令牌句柄;
以复制得到的所述令牌句柄为参数,调用预设的系统函数获得当前登录用户的用户信息,其中,所述预设的系统函数为:能够获得当前登录用户的用户信息的系统函数。
在本申请的一种具体实现方式中,所述根据所述进程标识,获得所述预设的资源管理器的进程句柄,包括:
获得查询信息的权限;
根据所述进程标识,以所述查询信息的权限打开所述预设的资源管理器的进程;
获得所打开进程的进程句柄。
在本申请的一种具体实现方式中,所述以复制得到的所述令牌句柄为参数,调用预设的系统函数获得当前登录用户的用户信息,包括:
以复制得到的所述令牌句柄为参数,调用预设的系统函数模拟当前登录用户户,在服务启动程序中获得当前登录用户的用户信息。
在本申请的一种具体实现方式中,所述预设的资源管理器为:Windows操作系统中的explorer.exe。
在本申请的一种具体实现方式中,所述预设的系统函数为:ImpersonateLoggedOnUser函数。
为达到上述目的,本申请实施例公开了一种信息获得装置,所述装置包括:
信息获得指令接收模块,用于接收针对当前登录用户的用户信息获得指令;
进程标识获得模块,用于获得预设的资源管理器的进程标识;
进程句柄获得模块,用于根据所述进程标识,获得所述预设的资源管理器的进程句柄;
令牌句柄获得模块,用于根据所述进程句柄,获得所述预设的资源管理器的令牌句柄;
令牌句柄复制模块,用于以安全认证的权限复制所述令牌句柄;
用户信息获得模块,用于以复制得到的所述令牌句柄为参数,调用预设的系统函数获得当前登录用户的用户信息,其中,所述预设的系统函数为:能够获得当前登录用户的用户信息的系统函数。
在本申请的一种具体实现方式中,所述进程句柄获得模块,包括:
权限获得子模块,用于获得查询信息的权限;
进程打开子模块,用于根据所述进程标识,以所述查询信息的权限打开所述预设的资源管理器的进程;
进程句柄获得子模块,用于获得所打开进程的进程句柄。
在本申请的一种具体实现方式中,所述用户信息获得模块,
具体用于以复制得到的所述令牌句柄为参数,调用预设的系统函数模拟当前登录用户,在服务启动程序中获得当前登录用户的用户信息。
在本申请的一种具体实现方式中,所述预设的资源管理器为:Windows操作系统中的explorer.exe。
在本申请的一种具体实现方式中,所述预设的系统函数为:ImpersonateLoggedOnUser函数。
由以上可见,本申请实施例提供的方案中,接收到针对当前登录用户的用户信息获得指令后,获得预设的资源管理器的进程标识,并根据该进程标识,获得上述预设的资源管理器的进程句柄,然后根据该进程句柄,获得上述预设的资源管理器的令牌句柄,并以安全认证的权限复制该令牌句柄,最后以复制得到的令牌句柄为参数,调用预设的系统函数获得当前登录用户的用户信息。综合以上可见,应用本申请实施例提供的方案能够获得当前登录用户的用户信息。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种信息获得方法的流程示意图,该方法包括:
S101:接收针对当前登录用户的用户信息获得指令。
具体的,上述用户信息可以是指注册表信息、中间目录信息等等,本申请并不对此进行限定。
其中,上述注册表可以理解为:Microsoft Windows操作系统或称为Windows操作系统中的一个重要的数据库,用于存储系统和应用程序的设置信息。
S102:获得预设的资源管理器的进程标识。
其中,上述预设的资源管理器可以理解为:针对程序的资源管理器或者针对文件的资源管理器。
较佳的,在Windows操作系统中,上述预设的资源管理器可以是explorer.exe。具体的,Windows操作系统中的explorer.exe是一个桌面进程,可以理解为是Windows操作系统的程序管理器或者文件资源管理器,它用于管理Windows操作系统中的图形壳,包括桌面和文件管理,删除explorer.exe会导致Windows图形界面无法使用。
需要说明的是,本申请只是以上述为例进行说明,实际应用中预设的资源管理器的具体形式并不仅限于此。
具体的,在获得预设的资源管理器的进程标识时可以通过调用系统函数的方式获得上述进程标识。
S103:根据上述进程标识,获得预设的资源管理器的进程句柄。
具体的,进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
本领域内的技术人员容易理解的是,对于进程而言,一个进程的进程标识,也就是一个进程的进程ID(Identity,身份标识号码)是唯一的,但是该进程的进程句柄并不是唯一的,每次根据进程ID打开该进程时,反馈的进程句柄均可能不同,因此,实际应用中,需要使用一个进程的进程句柄时,需要根据该进程的进程ID获得该进程的进程句柄。
在本申请的一种具体实现方式中,参见图2,提供了另一种信息获得方法的流程示意图,与前述实施例相比,本实施例中,根据上述进程标识,获得预设的资源管理器的进程句柄(S103),包括:
S103A:获得查询信息的权限。
S103B:根据上述进程标识,以上述查询信息的权限打开预设的资源管理器的进程。
需要说明的是,本申请只是以上述为例进行说明,实际应用中并不限定打开预设的资源管理器的进程时所具有的权限,只要能够获得所打开进程的进程句柄信息均可以。
S103C:获得所打开进程的进程句柄。
S104:根据上述进程句柄,获得预设的资源管理器的令牌句柄。
根据进程标识打开预设的资源管理器的进程后,还可以从该进程中获得令牌句柄。
具体的,对于Windows操作系统而言,explorer.exe的进程中包含当前登录用户的令牌句柄,因此可以从该进程中获得该进程的令牌句柄。
另外,在Windows操作系统中,上述令牌句柄可以称之为访问令牌(AccessTokens),具体的,访问令牌是Windows操作系统安全性的一个概念。当用户登录时,操作系统创建一个访问令牌,里面包含登录进程返回的SID(SecurityIdentifier,安全标识符)和由本地安全策略分配给用户和用户的安全组的特权列表。以该用户身份运行的的所有进程都拥有该令牌的一个拷贝。系统使用令牌控制用户可以访问哪些安全对象,并控制用户执行相关系统操作的能力。
S105:以安全认证的权限复制上述令牌句柄。
本步骤中,以安全认证的权限复制的令牌句柄即为当前登录用户的令牌句柄。
本领域内的技术人员可以理解的是,实际应用中除了可以通过上述方式获得令牌句柄之外,还可以通过系统函数获得令牌句柄,例如,在Windows操作系统中,可以通过系统函数WTSQueryUserToken获得当前登录用户的令牌句柄,但是应用该系统函数获得令牌句柄时,有时会失败,这种情况在64位操作系统下尤其严重。
需要说明的是,由于实际应用中复制令牌句柄时需要一个模拟级别,因此,这个模拟级别对于复制令牌句柄而言是一个非常重要的概念,它标识被复制的令牌句柄可以被使用的程度和访问的程度。
具体的,上述模拟级别包含四种模拟级别:
Security Anonymous(匿名):该模拟级别下无法获取有关客户端的标识信息,且无法模拟客户端;
Security Identification(识别):该模拟级别下可以获取有关客户端的信息(如:安全标识符和特权等等),但是无法模拟客户端;
Security Impersonation(模拟):该模拟级别下可以在本地模拟客户端的安全上下文,但无法在远程系统上模拟客户端;
Security Delegation(委托):该模拟级别下可以在本地和远程系统上模拟客户端的安全上下文。
本步骤中上述安全认证的权限可以理解为:Security Identification这个模拟级别。
S106:以复制得到的上述令牌句柄为参数,调用预设的系统函数获得当前登录用户的用户信息。
上述预设的系统函数为:能够获得当前登录用户的用户信息的系统函数。
具体的,复制得到的上述令牌句柄可以作为预设的系统函数的输入参数,然后调用该预设的系统函数即可获得当前登录用户的用户信息。
较佳的,在Windows操作系统中,上述预设的系统函数可以为:ImpersonateLoggedOnUser函数,该函数可以让当前进程模拟登录用户进行相关操作。
在本申请的一种具体实现方式中,以复制得到的上述令牌句柄为参数,调用预设的系统函数获得当前登录用户的用户信息时,可以以复制得到的上述令牌句柄为参数,调用预设的系统函数模拟当前登录用户,在服务启动程序中获得当前登录用户的用户信息。
具体的,可以以复制得到的上述令牌句柄为预设的系统函数的输入参数,并调用该预设的系统函数以模拟当前登录用户,并在服务启动程序中获得当前登录用户的用户信息。
例如,可以以复制得到的上述令牌句柄为ImpersonateLoggedOnUser函数的输入参数,并调用ImpersonateLoggedOnUser函数模拟当前登录用户,然后在服务启动程序中获得当前登录用户的用户信息。
简单的,上述服务启动程序可以理解为以服务方式启动的程序。
服务程序一般可以理解为:Microsoft Windows服务创建在它们自己的Windows会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。
需要说明的是,上述各个实施例可以是在具有System权限的情况下,获得当前登录用户的用户信息的方法。
实际应用中,根据上述方式获得当前登录用户的用户信息后,可以将用户信息传输给相应的应用程序进行相应的操作,例如,传输给服务程序,服务程序根据当前登录用户的用户信息进行相应操作。
由以上可见,上述各个实施例提供的方案中,接收到针对当前登录用户的用户信息获得指令后,获得预设的资源管理器的进程标识,并根据该进程标识,获得上述预设的资源管理器的进程句柄,然后根据该进程句柄,获得上述预设的资源管理器的令牌句柄,并以安全认证的权限复制该令牌句柄,最后以复制得到的令牌句柄为参数,调用预设的系统函数获得当前登录用户的用户信息。综合以上可见,应用上述各个实施例提供的方案能够获得当前登录用户的用户信息。
下面通过一个具体实例再对本申请实施例提供的信息获得方法进行详细说明。
假设金山毒霸中存在一个服务程序,该服务程序需要读取Windows操作系统中当前登录用户的注册表信息,若读取失败,则金山毒霸的该服务程序将不能正常工作,进而导致防御功能不正常。
基于上述情况,在具有System权限的情况下,可以获得explorer.exe的进程ID,然后根据explorer.exe的进程ID打开explorer.exe的进程,并获得该进程的进程句柄,之后从该进程中读取其令牌句柄,并在安全认证的权限下复制该令牌句柄,最后以复制得到的令牌句柄为ImpersonateLoggedOnUser函数的输入参数,调用该函数模拟当前登录用户,并在服务启动程序中获得当前登录用户的注册表信息,这样金山毒霸的服务程序就能够获得当前登录用户的注册表信息,进而能够正常工作,保护用户系统环境安全。
与上述信息获得方法相对应,本申请实施例还提供了一种信息获得装置。
图3为本申请实施例提供的一种信息获得装置的结构示意图,该装置包括:
信息获得指令接收模块301,用于接收针对当前登录用户的用户信息获得指令;
进程标识获得模块302,用于获得预设的资源管理器的进程标识;
进程句柄获得模块303,用于根据所述进程标识,获得所述预设的资源管理器的进程句柄;
令牌句柄获得模块304,用于根据所述进程句柄,获得所述预设的资源管理器的令牌句柄;
令牌句柄复制模块305,用于以安全认证的权限复制所述令牌句柄;
用户信息获得模块306,用于以复制得到的所述令牌句柄为参数,调用预设的系统函数获得当前登录用户的用户信息,其中,所述预设的系统函数为:能够获得当前登录用户的用户信息的系统函数。
在本申请的一种具体实现方式中,参见图4,提供了另一种信息获得装置的结构示意图,与前述实施例相比,本实施例中,所述进程句柄获得模块303,包括:
权限获得子模块303A,用于获得查询信息的权限;
进程打开子模块303B,用于根据所述进程标识,以所述查询信息的权限打开所述预设的资源管理器的进程;
进程句柄获得子模块303C,用于用于获得所打开进程的进程句柄。
具体的,所述用户信息获得模块306,可以具体用于以复制得到的所述令牌句柄为参数,调用预设的系统函数模拟当前登录用户,在服务启动程序中获得当前登录用户的用户信息。
具体的,所述预设的资源管理器可以为:Windows操作系统中的explorer.exe。
具体的,所述预设的系统函数可以为:ImpersonateLoggedOnUser函数。
由以上可见,上述各个实施例提供的方案中,接收到针对当前登录用户的用户信息获得指令后,获得预设的资源管理器的进程标识,并根据该进程标识,获得上述预设的资源管理器的进程句柄,然后根据该进程句柄,获得上述预设的资源管理器的令牌句柄,并以安全认证的权限复制该令牌句柄,最后以复制得到的令牌句柄为参数,调用预设的系统函数获得当前登录用户的用户信息。综合以上可见,应用上述各个实施例提供的方案能够获得当前登录用户的用户信息。
对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。