CN102693397A - 一种扫描文件的方法和装置 - Google Patents
一种扫描文件的方法和装置 Download PDFInfo
- Publication number
- CN102693397A CN102693397A CN2011100701648A CN201110070164A CN102693397A CN 102693397 A CN102693397 A CN 102693397A CN 2011100701648 A CN2011100701648 A CN 2011100701648A CN 201110070164 A CN201110070164 A CN 201110070164A CN 102693397 A CN102693397 A CN 102693397A
- Authority
- CN
- China
- Prior art keywords
- file
- memory
- file object
- mapped
- scanning engine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种扫描文件的方法和装置,其中方法包括:监测到文件的操作时,获取所述文件的文件对象;切换到扫描引擎的进程空间,为所述文件对象创建内存映射,将所述文件对象的内存映射句柄传递到所述扫描引擎的进程空间;扫描引擎利用所述文件对象的内存映射句柄扫描所述文件。本发明能够避免扫描引擎第二次打开文件,从而提高效率,避免多个杀毒软件互相拦截。
Description
技术领域
本发明涉及杀毒软件技术领域,尤其涉及一种扫描文件的方法和装置。
背景技术
目前,很多杀毒软件都是在监控到文件操作时,将文件名传递到扫描引擎,扫描引擎通过文件名打开文件后进行文件的扫描。这种方式需要扫描引擎通过文件名再次打开文件,效率低;并且,扫描引擎再次打开文件可能会造成在多个杀毒软件共存的情况下,多个杀毒软件互相拦截的情况。
发明内容
本发明提供了一种扫描文件的方法,能够避免扫描引擎第二次打开文件。
本发明还提供了一种扫描文件的装置,能够避免扫描引擎第二次打开文件。
本发明的技术方案是这样实现的:
一种扫描文件的方法,应用于杀毒软件中扫描引擎对文件的扫描,该方法包括:
监测到文件的操作时,获取所述文件的文件对象;
切换到扫描引擎的进程空间,为所述文件对象创建内存映射,将所述文件对象的内存映射句柄传递到所述扫描引擎的进程空间;
扫描引擎利用所述文件对象的内存映射句柄扫描所述文件。
上述方法中,获取文件的文件对象的方式为:通过微过滤驱动(Minifilter)提供的数据结构指针获取所述文件的文件对象。
切换到扫描引擎的进程空间的方式为:通过KeStackAttachProcess应用程序编程接口(API)实现切换到扫描引擎的进程空间。
为文件对象创建内存映射的方式为:使用FsRtlCreateSectionForDataScan创建内存映射。
为文件对象创建内存映射的方式为:
当文件对象指向的内存映射区对象指针不为空、并且当前I/O请求不在系统其他内核组件的路径时,进入临界区获取所述文件对象的互斥锁,并设置禁止系统其他内核组件进入当前I/O请求所在路径的标记;
获取所述文件的大小,当所述文件的大小不为零时,为文件对象创建内存映射区,将内存映射区对象插入到对象管理器中;
释放所述互斥锁,退出所述临界区。
将文件对象的内存映射句柄传递到扫描引擎的进程空间的方式为:通过Minifilter提供的FltSendMessage进行传递。
一种扫描文件的装置,包括:
文件对象获取模块,用于监测到文件的操作时,获取所述文件的文件对象;
映射模块,用于按照所述文件对象获取模块的指示切换到扫描引擎的进程空间,为所述文件对象创建内存映射,将所述文件对象的内存映射句柄传递到所述扫描引擎的进程空间;
扫描引擎模块,用于利用所述文件对象的内存映射句柄扫描所述文件。
上述装置中,映射模块包括:
初始设置子模块,用于当文件对象指向的内存映射区对象指针不为空、并且当前I/O请求不在系统其他内核组件的路径时,进入临界区获取所述文件对象的互斥锁,并设置禁止系统其他内核组件进入当前I/O请求所在路径的标记,指示映射执行子模块为文件对象创建内存映射;
映射执行子模块,用于在接收到初始设置子模块的指示时,获取所述文件的大小,当所述文件的大小不为零时,为文件对象创建内存映射区,将内存映射区对象插入到对象管理器中,指示完成设置子模块退出初始设置;
完成设置子模块,用于在接收到映射执行子模块的指示时,释放所述互斥锁,并退出所述临界区。
可见,本发明提出的扫描文件的方法和装置,通过扫描引擎在扫描时直接利用已打开的文件对象的内存映射句柄来对文件进行扫描,避免了扫描引擎第二次打开文件,从而提高效率,避免多个杀毒软件互相拦截。
附图说明
图1为本发明提出的扫描文件的方法流程图;
图2为本发明实施例二中步骤三的实现流程图;
图3为本发明提出的扫描文件的装置结构示意图。
具体实施方式
本发明提出一种扫描文件的方法,应用于杀毒软件中扫描引擎对文件的扫描。如图1为本发明提出的扫描文件的方法流程图,包括以下步骤:
步骤101:监测到文件的操作时,获取所述文件的文件对象;
步骤102:切换到扫描引擎的进程空间,为所述文件对象创建内存映射,将所述文件对象的内存映射句柄传递到所述扫描引擎的进程空间;
步骤103:扫描引擎利用所述文件对象的内存映射句柄扫描所述文件。
以下举具体的实施例详细介绍。
实施例一:本实施例主要包括以下四个步骤:
步骤一、获取文件对象,可以通过Minifilter提供的数据结构指针获取文件对象,具体实现代码可以为:
步骤二、切换到扫描引擎进程空间,可以通过KeStackAttachProcess API实现,具体实现代码可以为:
KeStackAttachProcess(FilterData.UserProcess,& kAcpState);
/*调用KeStackAttachProcess切换到扫描引擎的进程空间(扫描引擎的进程空间由UserProcess变量指定),并保存当前的进程空间到kAcpState*/
步骤三、为文件对象创建内存映射,在windows xp sp3以上内核(包括windows xp sp3内核)中,可以使用FsRtlCreateSectionForDataScan,在windowsxp sp3以下内核(不包括windows xp sp3内核)中,采用本发明提出的方法实现此应用程序编程接口(API)。以下首先详细介绍在windows xp sp3以上内核中使用FsRtlCreateSectionForDataScan的具体实现方式,windows xp sp3以下内核中的实现方式将在实施例二中进行介绍。
步骤四、将内存映射句柄传递到扫描引擎进程,可以通过Minifilter提供的FltSendMessage传递,具体实现代码可以为:
实施例二:
本实施例主要包括四个步骤:步骤一,获取文件对象;步骤二,切换到扫描引擎进程空间;步骤三,为文件对象创建内存映射;步骤四,将内存映射句柄传递到扫描引擎进程。其中,步骤一、二和四的具体实现过程与实施例一相同,在此不赘;以下主要介绍本实施例的步骤三,即在windows xp sp3以下内核中创建内存映射的方法,如图2为本发明实施例二中步骤三的实现流程图,包括:
步骤201:判断文件对象的SectionObjectPointer是否为空,如果为空,表示系统未为该文件对象建立缓存,则释放资源,返回错误码,并退出;如果不为空,则继续执行步骤202。
步骤202:判断当前线程的TopLevelIrp是否不为空,如果不为空,表示当前I/O请求在系统其他内核组件的代码路径中,有可能死锁,故释放资源,返回错误码,并退出;如果为空,则继续执行步骤203。
步骤203:进入临界区并获取文件互斥锁。
步骤204:设置TolLevelIrp为FSRTL_FSP_TOP_LEVEL_IRP,表明此次I/O请求在为文件对象创建内存映射的代码路径里,以避免其他内核组件重入。
步骤205:获取文件大小,判断文件大小是否为0,如果为0,则无法创建映射,故退出临界区,恢复TopLevelIrp为空,释放资源,返回错误码,并退出;如果不为0,则执行步骤206。
步骤206:调用MmCreateSection创建内存映射区。
步骤207:增加区对象引用技术,并将内存映射区对象插入到对象管理器中。
步骤208:退出临界区,恢复TopLevelIrp为空,返回成功,退出。
上述过程可以具体采用以下代码实现:
本发明还提出一种扫描文件的装置,如图3为本发明提出的扫描文件的装置结构示意图,该装置包括:
文件对象获取模块310,用于监测到文件的操作时,获取所述文件的文件对象;
映射模块320,用于按照文件对象获取模块310的指示切换到扫描引擎的进程空间,为所述文件对象创建内存映射,将所述文件对象的内存映射句柄传递到所述扫描引擎的进程空间;
扫描引擎模块330,用于利用所述文件对象的内存映射句柄扫描所述文件。
上述映射模块320可以包括:
初始设置子模块321,用于当文件对象指向的内存映射区对象指针不为空、并且当前I/O请求不在系统其他内核组件的路径时,进入临界区获取所述文件对象的互斥锁,并设置禁止系统其他内核组件进入当前I/O请求所在路径的标记,指示映射执行子模块322为文件对象创建内存映射;
映射执行子模块322,用于在接收到初始设置子模块321的指示时,获取所述文件的大小,当所述文件的大小不为零时,为文件对象创建内存映射区,将内存映射区对象插入到对象管理器中,指示完成设置子模块323退出初始设置;
完成设置子模块323,用于在接收到映射执行子模块322的指示时,释放所述互斥锁,并退出所述临界区。
综上可见,本发明提出的一种扫描文件的方法和装置,当监控到文件操作并传递给扫描引擎时,可以复用打开的文件对象,通过此文件对象在扫描引擎的进程中创建内存映射,则扫描引擎在扫描时可以直接利用已打开的文件句柄来对文件进行扫描,从而避免了扫描引擎对第二次打开文件,提高了效率,同时避免多个杀毒软件互相拦截的情况。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (8)
1.一种扫描文件的方法,应用于杀毒软件中扫描引擎对文件的扫描,其特征在于,所述方法包括:
监测到文件的操作时,获取所述文件的文件对象;
切换到扫描引擎的进程空间,为所述文件对象创建内存映射,将所述文件对象的内存映射句柄传递到所述扫描引擎的进程空间;
扫描引擎利用所述文件对象的内存映射句柄扫描所述文件。
2.根据权利要求1所述的方法,其特征在于,所述获取文件的文件对象的方式为:通过微过滤驱动Minifilter提供的数据结构指针获取所述文件的文件对象。
3.根据权利要求1所述的方法,其特征在于,所述切换到扫描引擎的进程空间的方式为:通过KeStackAttachProcess应用程序编程接口API实现切换到扫描引擎的进程空间。
4.根据权利要求1、2或3所述的方法,其特征在于,所述为文件对象创建内存映射的方式为:使用FsRtlCreateSectionForDataScan创建内存映射。
5.根据权利要求1、2或3所述的方法,其特征在于,所述为文件对象创建内存映射的方式为:
当文件对象指向的内存映射区对象指针不为空、并且当前I/O请求不在系统其他内核组件的路径时,进入临界区获取所述文件对象的互斥锁,并设置禁止系统其他内核组件进入当前I/O请求所在路径的标记;
获取所述文件的大小,当所述文件的大小不为零时,为文件对象创建内存映射区,将内存映射区对象插入到对象管理器中;
释放所述互斥锁,退出所述临界区。
6.根据权利要求1、2或3所述的方法,其特征在于,所述将文件对象的内存映射句柄传递到扫描引擎的进程空间的方式为:通过Minifilter提供的FltSendMessage进行传递。
7.一种扫描文件的装置,其特征在于,所述装置包括:
文件对象获取模块,用于监测到文件的操作时,获取所述文件的文件对象,并指示映射模块映射所述文件对象;
映射模块,用于按照所述文件对象获取模块的指示切换到扫描引擎的进程空间,为所述文件对象创建内存映射,将所述文件对象的内存映射句柄传递到所述扫描引擎的进程空间;
扫描引擎模块,用于利用所述文件对象的内存映射句柄扫描所述文件。
8.根据权利要求7所述的装置,其特征在于,所述映射模块包括:
初始设置子模块,用于当文件对象指向的内存映射区对象指针不为空、并且当前I/O请求不在系统其他内核组件的路径时,进入临界区获取所述文件对象的互斥锁,并设置禁止系统其他内核组件进入当前I/O请求所在路径的标记,指示映射执行子模块为文件对象创建内存映射;
映射执行子模块,用于在接收到初始设置子模块的指示时,获取所述文件的大小,当所述文件的大小不为零时,为文件对象创建内存映射区,将内存映射区对象插入到对象管理器中,指示完成设置子模块退出初始设置;
完成设置子模块,用于在接收到映射执行子模块的指示时,释放所述互斥锁,并退出所述临界区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110070164.8A CN102693397B (zh) | 2011-03-23 | 2011-03-23 | 一种扫描文件的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110070164.8A CN102693397B (zh) | 2011-03-23 | 2011-03-23 | 一种扫描文件的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102693397A true CN102693397A (zh) | 2012-09-26 |
CN102693397B CN102693397B (zh) | 2015-01-14 |
Family
ID=46858822
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110070164.8A Active CN102693397B (zh) | 2011-03-23 | 2011-03-23 | 一种扫描文件的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102693397B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106951326A (zh) * | 2017-03-16 | 2017-07-14 | 腾讯科技(深圳)有限公司 | 一种文件解锁方法及电子设备 |
CN109948341A (zh) * | 2019-04-02 | 2019-06-28 | 深信服科技股份有限公司 | 一种文件扫描方法、系统、装置、介质 |
WO2021121280A1 (en) * | 2019-12-19 | 2021-06-24 | Beijing Didi Infinity Technology And Development Co., Ltd. | Multi-purpose agent for endpoint scanning |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6928555B1 (en) * | 2000-09-18 | 2005-08-09 | Networks Associates Technology, Inc. | Method and apparatus for minimizing file scanning by anti-virus programs |
CN101296157A (zh) * | 2007-04-26 | 2008-10-29 | 北京师范大学珠海分校 | 多网卡协同通信方法 |
CN101520797A (zh) * | 2009-02-11 | 2009-09-02 | 国电南瑞科技股份有限公司 | 电力系统跨平台大数据文件高速并发存取方法 |
CN101582087A (zh) * | 2009-06-16 | 2009-11-18 | 恒生电子股份有限公司 | 一种日志提取方法及装置 |
CN102467622A (zh) * | 2010-11-08 | 2012-05-23 | 腾讯科技(深圳)有限公司 | 一种监控已打开文件的方法及装置 |
-
2011
- 2011-03-23 CN CN201110070164.8A patent/CN102693397B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6928555B1 (en) * | 2000-09-18 | 2005-08-09 | Networks Associates Technology, Inc. | Method and apparatus for minimizing file scanning by anti-virus programs |
CN101296157A (zh) * | 2007-04-26 | 2008-10-29 | 北京师范大学珠海分校 | 多网卡协同通信方法 |
CN101520797A (zh) * | 2009-02-11 | 2009-09-02 | 国电南瑞科技股份有限公司 | 电力系统跨平台大数据文件高速并发存取方法 |
CN101582087A (zh) * | 2009-06-16 | 2009-11-18 | 恒生电子股份有限公司 | 一种日志提取方法及装置 |
CN102467622A (zh) * | 2010-11-08 | 2012-05-23 | 腾讯科技(深圳)有限公司 | 一种监控已打开文件的方法及装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106951326A (zh) * | 2017-03-16 | 2017-07-14 | 腾讯科技(深圳)有限公司 | 一种文件解锁方法及电子设备 |
CN109948341A (zh) * | 2019-04-02 | 2019-06-28 | 深信服科技股份有限公司 | 一种文件扫描方法、系统、装置、介质 |
CN109948341B (zh) * | 2019-04-02 | 2023-02-03 | 深信服科技股份有限公司 | 一种文件扫描方法、系统、装置、介质 |
WO2021121280A1 (en) * | 2019-12-19 | 2021-06-24 | Beijing Didi Infinity Technology And Development Co., Ltd. | Multi-purpose agent for endpoint scanning |
US11250131B2 (en) | 2019-12-19 | 2022-02-15 | Beijing Didi Infinity Technology And Development Co., Ltd. | Multi-purpose agent for endpoint scanning |
CN114222989A (zh) * | 2019-12-19 | 2022-03-22 | 北京嘀嘀无限科技发展有限公司 | 用于端点扫描的多功能代理 |
CN114222989B (zh) * | 2019-12-19 | 2024-05-28 | 北京嘀嘀无限科技发展有限公司 | 用于端点扫描的多功能代理 |
Also Published As
Publication number | Publication date |
---|---|
CN102693397B (zh) | 2015-01-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2615316C2 (ru) | СПОСОБ, УСТРОЙСТВО И СИСТЕМА ВХОДА В Unix-ПОДОБНЫЙ ВИРТУАЛЬНЫЙ КОНТЕЙНЕР | |
CN101599947B (zh) | 基于web网页的木马病毒扫描方法 | |
KR101748388B1 (ko) | 애플리케이션의 상태를 설정하기 위한 방법, 장치, 프로그램 및 기록매체 | |
CN102693397A (zh) | 一种扫描文件的方法和装置 | |
CN103679022A (zh) | 病毒扫描方法和装置 | |
CN104376241A (zh) | 一种信息处理的方法及电子设备 | |
EP2211272A1 (en) | Method and device for implementing USB endpoint multiplexing | |
CN105513150A (zh) | 签到方法及装置 | |
CN102045397A (zh) | Telnet登录嵌入式终端以进行调试的方法及设备 | |
CN111813774B (zh) | 一种基于sysdig系统监控获取溯源信息的方法 | |
US20200327052A1 (en) | Compiling application with multiple function implementations for garbage collection | |
CN114055468B (zh) | 轨迹复现方法、系统及终端设备 | |
US20100180064A1 (en) | Method and device for implementing USB endpoint multiplexing | |
CN106919812B (zh) | 一种应用进程权限管理方法和装置 | |
CN102467622B (zh) | 一种监控已打开文件的方法及装置 | |
CN105376784B (zh) | 网络通信功能异常的处理方法、应用处理器和移动终端 | |
US20200327051A1 (en) | Hybrid garbage collection | |
CN105786917A (zh) | 时序数据并发入库的方法和装置 | |
CN1928823A (zh) | 一种实现同步初始化的多单板系统及方法 | |
CN109120595A (zh) | 一种实现kvm功能的usb设备通信方法与装置 | |
CN105677358A (zh) | 一种可编程逻辑器件配置方法及系统 | |
Selyanin | Researching Marvell Avastar Wi-Fi: from zero knowledge to over-the-air zero-touch RCE | |
CN109036520A (zh) | 骨折或断骨定位系统及其定位方法 | |
CN104636248A (zh) | 一种基于代码注入的自动化测试辅助识别方法 | |
CN104834455A (zh) | 一种终端解锁方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |