一种控制Windows文件系统访问权限的方法

文档序号:6399410阅读:285来源:国知局
专利名称:一种控制Windows文件系统访问权限的方法
技术领域
本发明涉及一种控制Windows文件系统访问权限的方法。
背景技术
在存储领域,数据安全一直是一个很重要的技术环节。文件/文件夹访问权限的限制对于防止数据被恶意修改或删除、阻止某些进程修改或删除重要文件/文件夹、保证存储数据的安全起着很大作用。目前,市面上存在着一些可为文件/文件夹加密的软件,这些软件都采用“伪加密”、“伪隐藏”的文件/文件夹加密方法,即在加密时转移文件/文件夹到另外的目录,实现对文件/文件夹的“隐藏”;解密时再将文件/文件夹转移回源目录。这种“伪加密”的方法更改了磁盘中原有的目录结构,一旦完成加密,使用源文件/文件夹路径对文件/文件夹进行操作时,返回的错误并不是拒绝访问,而是找不到文件/文件夹,这并不是真正的限制访问权限的方法。另外,Windows操作系统也有自带的针对用户而言的权限机制,这种机制用于限制操作系统不同账户对于文件/文件夹、注册表等的访问权限,强调的是系统账户的访问权限。如果某个文件/文件夹对于用户A来说不能访问,那么A用户启动的所有程序都对这个文件/文件夹没有访问权限(除非是这些进程能获取到具有访问权限账户的账户名和密码,然后以这个账户的身份来启动)。然而,在某些领域,诸如广播电视行业,在计算机环境部署的时候,设计者只希望本公司的程序能访问指定磁盘,并且计算机上每个账户开启的本公司的程序都能访问该指定磁盘卷,拒绝其他非本公司的程序对磁盘卷的访问。这种情况下,Windows操作系统自带的权限管理就无法满足需求了。

发明内容
本发明的目的在于克服现有技术的不足,提供一种基于Windows内核级驱动,通过控制I/o请求包状态值和返回方式来实现的高效、实用的控制Windows文件系统访问权限的方法,克服现有文件/文件夹访问权限限制方法的不足,在保证磁盘中所有的文件目录结构不变动的前提下,针对所有用户而言,对磁盘文件/文件夹进行访问权限白名单设置,配置具有对某个磁盘文件/文件夹有访问权限的进程信息,在内核驱动级对磁盘文件/文件夹访问请求IRP (即1/0请求包)进行过滤拦截,采用高效的分析判断算法来实现对文件/文件夹单次访问请求IRP是否继续下发以及状态值进行控制,最终由一系列的IRP成功或者失败的结果构成宏观的几种访问权限。本发明的目的是通过以下技术方案来实现的一种控制Windows文件系统访问权限的方法,它包括一个对不同I/o请求包对于不同权限返回状态进行划分的步骤、一个权限配置的步骤、一个I/o请求包拦截分析的步骤和一个1/0请求包处理的步骤
所述的对不同I/o请求包对于不同权限返回状态进行划分的步骤包括以下子步骤
SlOl:划分访问权限的种类,访问权限包括但不限于全权限、零权限、只读权限、写入权限、修改权限和执行权限;
5102:列出Windows系统所有I/O请求包的主函数码(Major Function Code)种类,1/0请求包的主函数码种类包括IRP_MJ_CREATE、IRP_MJ_CREATE_NAME_PIPE, IRP_MJ_CL0SE、IRP_MJ_READ,IRP_MJ_WRITE,IRP_MJ_QUERY_INFORMAITON,IRP_MJ_SET_INF0RMAIT0N,IRP_MJ_QUERY_EA、 IRP_MJ_SET_EA、 IRP_MJ_FLUSH_BUFFERS、 IRP_MJ_QUERY_V0LUME_INFORMAITON, IRP_MJ_SET_V0LUME_INFORMAITON, IRP_MJ_DIRECT0RY_C0NTR0L, IRP_MJ_FILE_SYSTEM_C0NTR0L, IRP_MJ_DEVICE_C0NTR0L, I RP_MJ_INTERNAL_DEVICE_C0NTR0L,IRP_MJ_SCSI, IRP_MJ_SHUTDOWN, IRP_MJ_L0CK_C0NTR0L, IRP_MJ_CLEANUP, IRP_MJ_CREATE_MAILSLOT、IRP_MJ_QUERY_SECURITY、IRP_MJ_SET_SECURITY、IRP_MJ_P0WER, IRP_MJ_SYSTEM_C0NTR0L、I RP_MJ_DEV I CE_CHANGE, IRP_MJ_QUERY_QUOTA, IRP_MJ_SET_QUOTA, IRP_MJ_PNP、I RP_M J_MAX I MUM_FUNCT I ON,总计 30 个;
5103:根据步骤S101、S102,制定1/0请求包对应权限返回状态表;
S104:根据不同的主函数码确定其在不同访问权限下的返回状态,或不作任何处理,默认保持1/0请求包的原有状态,继续往驱动栈中的下一级驱动投递该1/0请求包;以IRP_MJ_CREATE为例,它表示当IRP的主函数码为IRP_MJ_CREATE时,在只读权限下返回状态为成功,在全权限下返回状态为成功,在零权限下返回状态为失败;
其中,只读权限下,返回状态必须为成功的1/0请求包包括IRP_MJ_CREATE、IRP_MJ_CL0SE、 IRP_MJ_READ、 IRP_MJ_QUERY_INF0RMAIT0N、 IRP_MJ_QUERY_EA、 IRP_MJ_QUERY_V0LUME_INF0RMAIT0N、 IRP_MJ_DIRECT0RY_C0NTR0L,IRP_MJ_CLEANUP、和 IRP_MJ_QUERY_SECURITY,返回状态必须为失败的1/0请求包包括IRP_MJ_WRITE、IRP_MJ_SET_INF0RMAIT0N、 IRP_MJ_SET_EA、 IRP_MJ_FLUSH_BUFFERS、 IRP_MJ_SET_V0LUME_INF0RMAIT0N和IRP_MJ_SET_SE⑶RITY,其余1/0请求包默认以其原有状态继续往驱动栈中的下一级驱动投递;
所述的权限配置的步骤包括以下子步骤
5201:设定磁盘文件及文件夹的访问权限白名单,白名单中配置进程信息及其对应的访问权限,白名单中的访问权限类型包括除零权限以外的所有权限;
5202:未加入白名单中的进程的访问权限默认为零权限;
5203:未配置白名单的磁盘不受控,对所有进程均开放其访问权限;
所述的1/0请求包拦截分析的步骤包括以下子步骤
S301 :在内核驱动栈中过滤拦截1/0请求包;
S302:获取当前1/0请求包的目标盘符,判断该目标盘符是否为配置中受控的卷,如果不是受控的卷则保持此次1/0请求包的原有状态,继续投递1/0请求包到驱动栈中的下级驱动,保持此I/o请求包的正常运转;
S303:如果该目标盘符是受控的卷,则获取当前1/0请求包所属的进程信息;
S304:查询权限配置步骤所完成的配置信息,获得当前进程对于目标磁盘的访问权
限;
所述的1/0请求包处理的步骤包括以下子步骤
S401:根据步骤S304获得的访问权限值查询步骤S103制定的1/0请求包对应权限返回状态表,获取当前1/0请求包对应步骤S304获得的访问权限值应该返回的结果,返回结果为成功,则跳转至步骤S402,返回结果为失败,则跳转至步骤S403 ;
5402:当返回结果为成功时,继续投递I/O请求包到驱动栈中的下一级驱动,保持当前I/O请求包的正常流程,此次访问继续;
5403:当返回结果为失败时,修改当前I/O请求包的状态值为STATUS_ACCESS_DENIED,直接往驱动栈中的上一级驱动返回该I/O请求包,此次访问被终止,状态为拒绝;
5404:根据得到的一系列I/O请求包的成功及失败组合构成宏观上的访问权限。本发明的有益效果是
(1)本发明对磁盘文件/文件夹访问权限的限制不影响磁盘目录结构,磁盘目录结构不发生改变,实现了真正意义上的文件访问权限的控制,在磁盘目录结构发生改变时也不会影响本发明对磁盘文件/文件夹访问权限的限制;
(2)文件系统访问权限的限制针对运行的程序而言,区别于Windows操作系统自带的权限控制方法只能控制指定账户的访问权限而无法对同一账户不同程序的访问权限实现限制,本发明磁盘访问权限的白名单对操作系统所有账户都起作用,在很多领域中,大大满足了某些磁盘只能由某些程序访问的需求;
(3)本发明在内核层过滤拦截磁盘文件/文件夹的访问请求IRP,通过控制IRP的状态以及返回方式,从文件访问的实质原理上实现访问权限的控制,不影响操作系统其余任何模块或者内容;
(4)在内核驱动层拦截磁盘文件/文件夹的单个访问请求IRP,通过高效的分析判断算法来判定当前IRP的访问权限返回值,以此进一步实现宏观的权限控制,权限控制效率高
且可靠性高。


图1为本发明I/O请求包IRP对应权限返回状态表示意 图2为本发明权限配置示意 图3为本发明核心所在层示意 图4为本发明I/O请求包IRP拦截分析步骤流程 图5为本发明I/O请求包IRP处理步骤流程图。
具体实施例方式下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。—种控制Windows文件系统访问权限的方法,它包括一个对不同I/O请求包对于不同权限返回状态进行划分的步骤、一个权限配置的步骤、一个I/O请求包拦截分析的步骤和一个I/O请求包处理的步骤
所述的对不同I/O请求包对于不同权限返回状态进行划分的步骤包括以下子步骤
5101:划分访问权限的种类,访问权限包括但不限于全权限、零权限、只读权限、写入权限、修改权限和执行权限;
5102:如图1所示,列出Windows系统所有I/O请求包的主函数码(Major FunctionCode)种类,1/0 请求包的主函数码种类包括IRP_MJ_CREATE、IRP_MJ_CREATE_NAME_PIPE,IRP_MJ_CLOSE、IRP_MJ_READ、IRP_MJ_WRITE, IRP_MJ_QUERY_INFORMAITON, IRP_MJ_SET_INFORMAITON、IRP_MJ_QUERY_EA, IRP_MJ_SET_EA、IRP_MJ_FLUSH_BUFFERS、IRP_MJ_QUERY_VOLUME_INFORMAITON, IRP_MJ_SET_VOLUME_INFORMAITON, IRP_MJ_DIRECTORYJONTROL、I RP_MJ_FI LE_SYSTEM_OTNTROL、I RP_MJ_DEVI CEjONTROL、I RP_MJ_INTERNAL_DEVICE_CONTROL、IRP_MJ_SCSI, IRP_MJ_SHUTDOWN, IRP_MJ_LOCK_CONTROL, IRP_MJ_CLEANUP, IRP_MJ_CREATE_MAILSLOT、 IRP_MJ_QUERY_SECURITY、 IRP_MJ_SET_SECURITY、 IRP_MJ_POWER,IRP_MJ_SYSTEMJONTROL、 IRP_MJ_DEVICE_CHANGE,IRP_MJ_QUERY_QUOTA、 IRP_MJ_SET_QUOTA、IRP_MJ_PNP、I RP_M J_MAX I MUM_FUNCT I ON,总计 30 个;
S103 :根据步骤S101、S102,制定I/O请求包对应权限返回状态表,I/O请求包IRP对应权限返回状态表如图1所示;制定出某个权限下,指定的IRP应该返回的状态值,图1例举出了 Windows系统中所有1/0请求在只读权限、全权限和零权限下要返回的状态值;其中,V表示在某权限下当前IRP的返回状态为成功,X表示在某权限下当前IRP的返回状态为失败,-表示不作任何处理、默认保持IRP原有状态(实际为成功)、继续往驱动栈中下一级驱动投递此IRP。S104:根据不同的主函数码确定其在不同访问权限下的返回状态,或不作任何处理,默认保持I/o请求包的原有状态,继续往驱动栈中的下一级驱动投递该1/0请求包;以IRP_MJ_CREATE为例,它表示当IRP的主函数码为IRP_MJ_CREATE时,在只读权限下返回状态为成功,在全权限下返回状态为成功,在零权限下返回状态为失败。其中,只读权限下,返回状态必须为成功的1/0请求包包括IRP_MJ_CREATE、IRP_MJ_CL0SE、 IRP_MJ_READ、 IRP_MJ_QUERY_INF0RMAIT0N、 IRP_MJ_QUERY_EA、 IRP_MJ_QUERY_V0LUME_INF0RMAIT0N、 IRP_MJ_DIRECT0RY_C0NTR0L,IRP_MJ_CLEANUP、和 IRP_MJ_QUERY_SECURITY,返回状态必须为失败的1/0请求包包括IRP_MJ_WRITE、IRP_MJ_SET_INFORMAITON、IRP_MJ_SET_EA, IRP_MJ_FLUSH_BUFFERS, IRP_MJ_SET_V0LUME_INF0RMAIT0N和IRP_MJ_SET_SE⑶RITY,其余1/0请求包默认以其原有状态继续往驱动栈中的下一级驱动投递。如图2所示,所述的权限配置的步骤包括以下子步骤
5201:设定磁盘文件及文件夹的访问权限白名单,白名单中配置进程信息及其对应的访问权限,白名单中的访问权限类型包括除零权限以外的所有权限;
5202:未加入白名单中的进程的访问权限默认为零权限;
S203:未配置白名单的磁盘不受控,对所有进程均开放其访问权限。如图4所示,所述的1/0请求包拦截分析的步骤包括以下子步骤
5301:在如图3所示的内核驱动栈中过滤拦截1/0请求包;
5302:获取当前1/0请求包的目标盘符,判断该目标盘符是否为配置中受控的卷,如果不是受控的卷则保持此次I/o请求包的原有状态,继续投递1/0请求包到驱动栈中的下级驱动,保持此I/o请求包的正常运转;
5303:如果该目标盘符是受控的卷,则获取当前1/0请求包所属的进程信息;
5304:遍历配置信息并获取权限值采用高效查询算法查询权限配置步骤所完成的配置信息,获得当前进程对于目标磁盘的访问权限。如图5所示,所述的1/0请求包处理的步骤包括以下子步骤 5401:查询IRP对应权限返回状态表,获取当前IRP的状态返回值根据步骤S304获得的访问权限值查询步骤S103制定的I/O请求包对应权限返回状态表,获取当前I/O请求包对应步骤S304获得的访问权限值应该返回的结果,返回结果为成功,则跳转至步骤S402,返回结果为失败,则跳转至步骤S403 ;
5402:当返回结果为成功时,继续投递I/O请求包到驱动栈中的下一级驱动,保持当前I/O请求包的正常流程,此次访问继续;
5403:当返回结果为失败时,修改当前I/O请求包的状态值为STATUS_ACCESS_DENIED,直接往驱动栈中的上一级驱动返回该I/O请求包,此次访问被终止,状态为拒绝;
5404:根据得到的一系列I/O请求包的成功及失败组合构成宏观上的访问权限。
权利要求
1.一种控制Windows文件系统访问权限的方法,其特征在于: 它包括一个对不同I/O请求包对于不同权限返回状态进行划分的步骤、一个权限配置的步骤、一个I/O请求包拦截分析的步骤和一个I/O请求包处理的步骤: 所述的对不同I/O请求包对于不同权限返回状态进行划分的步骤包括以下子步骤: 5101:划分访问权限的种类; 5102:列出Windows系统所有I/O请求包的主函数码种类; 5103:根据步骤S101、S102,制定I/O请求包对应权限返回状态表; S104:根据不同的主函数 码确定其在不同访问权限下的返回状态,或不作任何处理,默认保持I/O请求包的原有状态,继续往驱动栈中的下一级驱动投递该I/O请求包; 所述的权限配置的步骤包括以下子步骤: 5201:设定磁盘文件及文件夹的访问权限白名单,白名单中配置进程信息及其对应的访问权限,白名单中的访问权限类型包括除零权限以外的所有权限; 5202:未加入白名单中的进程的访问权限默认为零权限; 5203:未配置白名单的磁盘不受控,对所有进程均开放其访问权限; 所述的I/O请求包拦截分析的步骤包括以下子步骤: 5301:在内核驱动栈中过滤拦截I/O请求包; 5302:获取当前I/O请求包的目标盘符,判断该目标盘符是否为配置中受控的卷,如果不是受控的卷则保持此次I/o请求包的原有状态,继续投递I/O请求包到驱动栈中的下级驱动,保持此I/o请求包的正常运转; 5303:如果该目标盘符是受控的卷,则获取当前I/O请求包所属的进程信息; 5304:查询权限配置步骤所完成的配置信息,获得当前进程对于目标磁盘的访问权限; 所述的I/O请求包处理的步骤包括以下子步骤: 5401:根据步骤S304获得的访问权限值查询步骤S103制定的I/O请求包对应权限返回状态表,获取当前I/O请求包对应步骤S304获得的访问权限值应该返回的结果,返回结果为成功,则跳转至步骤S402,返回结果为失败,则跳转至步骤S403 ; 5402:当返回结果为成功时,继续投递I/O请求包到驱动栈中的下一级驱动,保持当前I/O请求包的正常流程,此次访问继续; 5403:当返回结果为失败时,修改当前I/O请求包的状态值为STATUS_ACCESS_DENIED,直接往驱动栈中的上一级驱动返回该I/O请求包,此次访问被终止,状态为拒绝; 5404:根据得到的一系列I/O请求包的成功及失败组合构成宏观上的访问权限。
2.根据权利要求1所述的一种控制Windows文件系统访问权限的方法,其特征在于:所述的Windows系统所有I/O请求包的主函数码种类包括:IRP_MJ_CREATE、IRP_MJ_CREATE_NAME_PIPE、 IRP_MJ_CLOSE、 IRP_MJ_READ、 IRP_MJ_WRITE、 IRP_MJ_QUERY_INFORMAITON, IRP_MJ_SET_INF0RMAIT0N、IRP_MJ_QUERY_EA、IRP_MJ_SET_EA、IRP_MJ_FLUSH_BUFFERS、IRP_MJ_QUERY_V0LUME_INF0RMAIT0N, IRP_MJ_SET_VOLUME_INFORMAITON,I RP_MJ_D IRECT0RY_C0NTR0L、IRP_MJ_FI LE_SYSTEM_OTNTROL、I RP_MJ_DEVI CEjONTROL、IRP_MJ_INTERNAL_DEVICEJ:0NTR0L、IRP_MJ_SCSI, IRP_MJ_SHUTD0WN, IRP_MJ_L0CK_CONTROL、IRP_MJ_CLEANUP, IRP_MJ_CREATE_MAILSLOT, IRP_MJ_QUERY_SECURITY、IRP_MJ_SET_SECURITY、IRP_MJ_POWER, IRP_MJ_SYSTEM_CONTROL、IRP_MJ_DEVICE_CHANGE, IRP_MJ_QUERY_QUOTA、IRP_MJ_SET_QUOTA, IRP_MJ_PNP, I RP_M J_MAX IMUM_FUNCT I ON
3.根据权利要求1所述的一种控制Windows文件系统访问权限的方法,其特征在于:所述的访问权限包括但不限于全权限、零权限、只读权限、写入权限、修改权限和执行权限。
4.根据权利要求3所述的一种控制Windows文件系统访问权限的方法,其特征在于:所述的只读权限下,返回状态必须为成功的I/O请求包包括:IRP_MJ_CREATE、IRP_MJ_CLOSE、IRP_MJ_READ、IRP_MJ_QUERY_INFORMAITON, IRP_MJ_QUERY_EA、IRP_MJ_QUERY_V0LUME_INF0RMAIT0N、 IRP_MJ_DIRECT0RY_C0NTR0L,IRP_MJ_CLEANUP、和 IRP_MJ_QUERY_SECURITY,返回状态必须为失败的I/O请求包包括:IRP_MJ_WRITE、IRP_MJ_SET_INF0RMAIT0N、IRP_ MJ_SET_EA, IRP_MJ_FLUSH_BUFFERS, IRP_MJ_SET_V0LUME_INF0RMAIT0N和IRP_MJ_SET_SE⑶RITY,其余I/O请求包默认以其原有状态继续往驱动栈中的下一级驱动投递。
全文摘要
本发明公开了一种控制Windows文件系统访问权限的方法,包括对不同I/O请求包对于不同权限返回状态进行划分、权限配置、I/O请求包拦截分析和I/O请求包处理步骤,对不同I/O请求包对于不同权限返回状态进行划分的步骤首先制定I/O请求包对应权限返回状态表;根据不同的主函数码确定其在不同访问权限下的返回状态;根据得到的一系列I/O请求包的成功及失败组合构成宏观上的访问权限。本发明不影响磁盘目录结构,权限的限制针对程序而言,满足对程序访问权限进行控制的需求;在内核层过滤拦截IRP,不影响其余任何模块或者内容;在内核驱动层拦截IRP,通过高效的分析判断算法来判定当前IRP的访问权限返回值,以此进一步实现宏观的权限控制,权限控制效率高且可靠性高。
文档编号G06F17/30GK103077354SQ20131005294
公开日2013年5月1日 申请日期2013年2月19日 优先权日2013年2月19日
发明者李科, 黄俊松 申请人:成都索贝数码科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1