Recognizer & FS & Filter

ExtReader(ext3文件系统读取器) 读取ext3文件系统里的文件,支持多个磁盘,多个分区,能复制,不能写,暂时不支持ext4(以后会支持),.net4.0环境,win7,vs2010通过。 立即下载

注一:
File system recognizer 文件系统识别器(下文简称为recognizer)
File system            文件系统     (下文简称为fs)
File system filter     文件系统过滤器(下文简称为filter)

文件系统识别器是一个标准的NT内核模式驱动程序;它只实现一项功能:检查物理介质设备,如果它能够识别存储介质的格式便加载相应的文件系统驱动程序,利用它主要是为节约系统内存,文件系统驱动程序没用到时为什么让他在内存中呢?


               文件系统过滤驱动的一般处理流程(参照sfilter):

                     DriverEntry
                        ||
                        ||初始化dispatch表中的IRP_MJ_FILE_SYSTEM_CONTROL
                        ||routine
                        ||         
    DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = SfFsControl ...
                        ||
                        ||注册一个SfFsNotification;当文件系统或文件系统识别器
                        ||registers or unregisters时被调用
                        ||
    IoRegisterFsRegistrationChange(DriverObject, SfFsNotification)
                        ||
                        ||
                        //
     SfFsNotification(PDEVICE_OBJECT DeviceObject, BOOLEAN FsActive)
                        ||
                        || FsActive
        TRUE <----------//------------> FALSE
         ||                              ||
         ||                              ||
IoAttachDeviceToDeviceStack         IoDetachDevice
         ||
         ||
 /-------//------->Attach to (Filesystem)-----------------/IRP_MJ_FILE_SYSTEM_CONTROL
 |                                                        |
 |                                                        |MN:IRP_MN_MOUNT_VOLUME
 /---------------->Attach to (recognizer)                 |你就尽管Mount,只要fs
                        ||                                |处理状态为STATUS_SUCCESS;
                        ||MJ:IRP_MJ_FILE_SYSTEM_CONTROL   |fs中关于卷的Mount处理
                        //                                |参见FatMountVolume函数
    SfFsControl (PDEVICE_OBJECT DeviceObject, PIRP Irp)   |
                        ||                                //filter其他处理参见sfilter
                        ||MN:    
         /--------------//-----------------------------/
         |                                             |
         |IRP_MN_MOUNT_VOLUME                          |
         |                                             |
 filter等待recognizer处理完成                          
         ||                                            |
         ||                                            |
   /-----//-->STATUS_FS_DRIVER_REQUIRED(1)---|/        |
   |                                         ||       
   /-------->STATUS_UNRECOGNIZED_VOLUME(2)---||       
                                             ||        |
                                             ||        |
                                             //        |
不论结果是哪一个,filter什么动作也没有;                 
但IO管理器收到recognizer处理结果后,处理各不相同:          
(1)表示recognizer认识这个卷,但对应的fs还没启动             |
(2)表示recognizer不认识这个卷,对应的fs不能处理            ||
 如果是第一种情况I/O管理器就会向这个设备发送---------------||IRP_MN_LOAD_FILE_SYSTEM
                                                      ||
                                                      ||原来我们一直挂接在recognizer上的
                                                      //
                                                 IoDetachDevice(recognizer)
                                                      ||
                                                      ||
                                             wait recognizer load fs status
                                                      ||
                                                      ||
                              Other status<-----------//----------->STATUS_SUCCESS
                                 ||                                     
                                 ||recognizer加载对应的fs失败
                                 ||只好还挂到recognizer上
                                 ||
                                 //
                  IoAttachDeviceToDeviceStack(recognizer)

 

注二:IoRegisterFsRegistrationChange函数

在winxp,win2003下会对已加载的文件系统重新枚举一遍
而nt4.0和win2000下则不会,具体原因代码见...
(留意一下IopNotifyAlreadyRegisteredFileSystems的作用和实现)

//win2000
NTSTATUS
IoRegisterFsRegistrationChange(
    IN PDRIVER_OBJECT DriverObject,
    IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
    )

/*++

Routine Description:

    This routine registers the specified driver's notification routine to be
    invoked whenever a file system registers or unregisters itself as an active
    file system in the system.

Arguments:

    DriverObject - Pointer to the driver object for the driver.

    DriverNotificationRoutine - Address of routine to invoke when a file system
        registers or unregisters itself.

Return Value:

    The return status is the final value of the function.

--*/

{
    PNOTIFICATION_PACKET nPacket;

    PAGED_CODE();

    //
    // Begin by attempting to allocate storage for the shutdown packet.  If
    // one cannot be allocated, simply return an appropriate error.
    //

    nPacket = ExAllocatePoolWithTag( PagedPool,
                                     sizeof( NOTIFICATION_PACKET ),
                                     'sFoI' );
    if (!nPacket) {
        return STATUS_INSUFFICIENT_RESOURCES;
    }

    //
    // Initialize the notification packet and insert it onto the tail of the
    // list.
    //

    nPacket->DriverObject = DriverObject;
    nPacket->NotificationRoutine = DriverNotificationRoutine;

    ExAcquireResourceExclusive( &IopDatabaseResource, TRUE );
    InsertTailList( &IopFsNotifyChangeQueueHead, &nPacket->ListEntry );
    ExReleaseResource( &IopDatabaseResource );

    //
    // Increment the number of reasons that this driver cannot be unloaded.
    //

    ObReferenceObject( DriverObject );

    return STATUS_SUCCESS;
}

 

//win2003
NTSTATUS
IoRegisterFsRegistrationChange(
    IN PDRIVER_OBJECT DriverObject,
    IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
    )

/*++

Routine Description:

    This routine registers the specified driver's notification routine to be
    invoked whenever a file system registers or unregisters itself as an active
    file system in the system.

Arguments:

    DriverObject - Pointer to the driver object for the driver.

    DriverNotificationRoutine - Address of routine to invoke when a file system
        registers or unregisters itself.

Return Value:

    STATUS_DEVICE_ALREADY_ATTACHED -
                Indicates that the caller has already registered
                last with the same driver object & driver notification

    STATUS_INSUFFICIENT_RESOURCES
    STATUS_SUCCESS

--*/

{
    PNOTIFICATION_PACKET nPacket;

    PAGED_CODE();

    ExAcquireResourceExclusiveLite( &IopDatabaseResource, TRUE );

    if (!IsListEmpty( &IopFsNotifyChangeQueueHead )) {

        //
        // Retrieve entry at tail of list
        //

        nPacket = CONTAINING_RECORD( IopFsNotifyChangeQueueHead.Blink, NOTIFICATION_PACKET, ListEntry );

        if ((nPacket->DriverObject == DriverObject) &&
            (nPacket->NotificationRoutine == DriverNotificationRoutine)) {

            ExReleaseResourceLite( &IopDatabaseResource);
            return STATUS_DEVICE_ALREADY_ATTACHED;
        }
    }

    //
    // Begin by attempting to allocate storage for the shutdown packet.  If
    // one cannot be allocated, simply return an appropriate error.
    //

    nPacket = ExAllocatePoolWithTag( PagedPool|POOL_COLD_ALLOCATION,
                                     sizeof( NOTIFICATION_PACKET ),
                                     'sFoI' );
    if (!nPacket) {

        ExReleaseResourceLite( &IopDatabaseResource );
        return STATUS_INSUFFICIENT_RESOURCES;
    }

    //
    // Initialize the notification packet and insert it onto the tail of the
    // list.
    //

    nPacket->DriverObject = DriverObject;
    nPacket->NotificationRoutine = DriverNotificationRoutine;

    InsertTailList( &IopFsNotifyChangeQueueHead, &nPacket->ListEntry );

    IopNotifyAlreadyRegisteredFileSystems(&IopNetworkFileSystemQueueHead, DriverNotificationRoutine, FALSE);
    IopNotifyAlreadyRegisteredFileSystems(&IopCdRomFileSystemQueueHead, DriverNotificationRoutine, TRUE);
    IopNotifyAlreadyRegisteredFileSystems(&IopDiskFileSystemQueueHead, DriverNotificationRoutine, TRUE);
    IopNotifyAlreadyRegisteredFileSystems(&IopTapeFileSystemQueueHead, DriverNotificationRoutine, TRUE);

    //
    // Notify this driver about all already notified filesystems
    // registered as an active file system of some type.
    //


    ExReleaseResourceLite( &IopDatabaseResource );

    //
    // Increment the number of reasons that this driver cannot be unloaded.
    //

    ObReferenceObject( DriverObject );

    return STATUS_SUCCESS;
}


VOID
IopNotifyAlreadyRegisteredFileSystems(
    IN PLIST_ENTRY  ListHead,
    IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine,
    IN BOOLEAN SkipRaw
    )
/*++

Routine Description:

    This routine calls the driver notification routine for filesystems
    that have already been registered at the time of the call.

Arguments:

    ListHead - Pointer to the filesystem registration list head.
    DriverNotificationRoutine - Pointer to the routine that has to be called.

Return Value:

    None.

--*/
{
    PLIST_ENTRY entry;
    PDEVICE_OBJECT fsDeviceObject;

    entry = ListHead->Flink;
    while (entry != ListHead) {

        //
        // Skip raw filesystem notification
        //
        if ((entry->Flink == ListHead) && (SkipRaw)) {
            break;
        }

        fsDeviceObject = CONTAINING_RECORD( entry, DEVICE_OBJECT, Queue.ListEntry );
        entry = entry->Flink;
        DriverNotificationRoutine( fsDeviceObject, TRUE );
    }
}

注三:IoRegisterFileSystem函数

是文件系统在DriverEntry中最后要调用的函数,主要是向IO管理器中注册一下,以后有卷需要Mount时通知我...

VOID
IoRegisterFileSystem(
    IN OUT PDEVICE_OBJECT DeviceObject
    )

/*++

Routine Description:

    This routine inserts the device object for the file system which the device
    object represents into the list of file systems in the system.

Arguments:

    DeviceObject - Pointer to device object for the file system.

Return Value:

    None.


--*/

{
    PNOTIFICATION_PACKET nPacket;
    PLIST_ENTRY entry;

    PAGED_CODE();

    //
    // Allocate the I/O database resource for a write operation.
    //

    (VOID) ExAcquireResourceExclusive( &IopDatabaseResource, TRUE );

    //
    // Insert the device object into the appropriate file system queue based on
    // the driver type in the device object.  Notice that if the device type is
    // unrecognized, the file system is simply not registered.
    //

    if (DeviceObject->DeviceType == FILE_DEVICE_NETWORK_FILE_SYSTEM) {
        InsertHeadList( &IopNetworkFileSystemQueueHead,
                        &DeviceObject->Queue.ListEntry );
    } else if (DeviceObject->DeviceType == FILE_DEVICE_CD_ROM_FILE_SYSTEM) {
        InsertHeadList( &IopCdRomFileSystemQueueHead,
                        &DeviceObject->Queue.ListEntry );
    } else if (DeviceObject->DeviceType == FILE_DEVICE_DISK_FILE_SYSTEM) {
        InsertHeadList( &IopDiskFileSystemQueueHead,
                        &DeviceObject->Queue.ListEntry );
    } else if (DeviceObject->DeviceType == FILE_DEVICE_TAPE_FILE_SYSTEM) {
        InsertHeadList( &IopTapeFileSystemQueueHead,
                        &DeviceObject->Queue.ListEntry );
    }

    //
    // Ensure that this file system's device is operable.
    //

    DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;

    //
    // Notify all of the registered drivers that this file system has been
    // registered as an active file system of some type.
    //

    //PS:看到了吧,如果你的filter调用了IoRegisterFsRegistrationChange,
    //文件系统注册时就要通过你啦,TRUE-Load/FALSE-unload.
    entry = IopFsNotifyChangeQueueHead.Flink;
    while (entry != &IopFsNotifyChangeQueueHead) {
        nPacket = CONTAINING_RECORD( entry, NOTIFICATION_PACKET, ListEntry );
        entry = entry->Flink;
        nPacket->NotificationRoutine( DeviceObject, TRUE );
    }

    //
    // Release the I/O database resource.
    //

    ExReleaseResource( &IopDatabaseResource );

    //
    // Increment the number of reasons that this driver cannot be unloaded.
    //

    ExInterlockedAddUlong( &DeviceObject->ReferenceCount, 1, &IopDatabaseLock );
}

注四:
   有兴趣的话可以看看文件识别器,IO管理器,文件系统的实现.

Halcon相机标定实战:从参数设置到精度优化全解析 本文详细解析Halcon相机标定的全流程,从基础概念到实战技巧,涵盖参数设置、精度优化及常见问题解决方案。通过实际案例和代码示例,帮助读者掌握工业视觉项目中相机标定的关键技术,提升测量精度和系统稳定性。 阅读详情

相关推荐

保姆级教程:在Ubuntu 22.04上用Conda搞定nuPlan数据集环境(Python 3.9 + PyTorch)

本文提供了一份详细的Ubuntu 22.04环境下使用Conda配置nuPlan自动驾驶数据集的保姆级教程,涵盖Python 3.9安装、Conda环境管理、PyTorch配置及数据集可视化验证等关键步骤,帮助开发者高效搭建开发环境。

weixin_29061997的博客 256

ExAcquireResourceExclusiveLite routine

ExAcquireResourceExclusiveLite routine ExAcquireResourceExclusiveLite 获取线程对资源的独占访问权。 Syntax   BOOLEAN ExAcquireResourceExclusiveLite(   _Inout_ PERESOURCE Resource,   _In_    BOOLEAN    Wait );

死胖子的博客 1903

企业固定资产管理的SAP实战:FICO模块配置与折旧范围设置详解

本文深入解析了SAP FICO模块中固定资产会计配置的核心实践,重点阐述了折旧范围的设计哲学与配置逻辑。通过详解折旧表、折旧范围、资产分类及折旧码等关键配置步骤,指导企业如何搭建满足多会计准则(如CAS、IFRS)与税务要求的资产管理体系,实现资产购置、折旧计提与报废清理的自动化与精准化。

wdx01234567的博客 729

白话IoRegisterFsRegistrationChange

IoRegisterFsRegistrationChange()注册回调函数,监视文件系统的激活或者注销。  status = IoRegisterFsRegistrationChange( DriverObject, SfFsNotification ); SfFsNotification 函数声明: VOID SfFsNotification ( IN PDEVIC

sqqsongqiqi的专栏 889

思澈sdk-新建lcd

co5300至此有3个同ID的驱动,在co5300xxxx.c的LCD_DRIVER_EXPORT(co5300, LCD_ID, &lcdc_int_cfg, &CO5300_drv, LCD_PIXEL_WIDTH, LCD_PIXEL_HEIGHT, 2);2 在customer\peripherals\Kconfig_lcd中添加如下配置(注意修改的地方有两个LCD_USING_TFT_CO5300_143)5 在该文件中的config LCD_DPI配置项下添加:(这里300为DPI)

gongyuan073的专栏 1391

AMD MI355X与NVIDIA B200在GLM5.2大模型推理性能与成本对比分析

在 AI 推理硬件选型中,成本与性能的平衡一直是技术决策的核心难点。AMD 最新发布的 CDNA 4 架构 MI355X 加速卡与 NVIDIA Blackwell 架构的 B200 在 GLM5.2 这类千亿参数大模型上的表现,直接关系到企业部署私有化模型或提供推理服务的经济性。实际测试数据显示,在 32 tok/s/user 的交互性设定下,单张 MI355X 能够达到 1369 tok/s 的吞吐量,虽然略低于 B200 的 1756 tok/s,但每百万 token 成本仅为 0.30 美元,比 B

weixin_28221501的博客 295

Windows 驱动开发中 ExAcquireResourceExclusiveLite 和其他锁的区别:

1. ExAcquireResourceExclusiveLite(独占资源锁)特点:- 是一种读写锁(ERESOURCE)的独占模式- 同一时间只允许一个线程获得锁- 可以递归获取(同一线程可以多次获取)- 支持等待和超时机制- 适用于内核模式代码- 可以与共享锁(ExAcquireResourceSharedLite)配合使用2. ExAcquireResourceSharedLite(共享资源锁)特点:- 同一时间允许多个线程以共享方式访问资源。

zhangyihu321的专栏 1067

ESXI 7 :创建统信V20_1050d服务器系统虚拟机

记录一下在 X86 架构创建统信V20_1050d 虚拟机遇到的问题。已遇到的问题有①:常规服务器环境下网络连接失败重点:按照桌面版本,有问题处理简单。

guyuelin123的博客 1968

文件过滤驱动 文件系统激活通知 IoRegisterFsRegistrationChange函数实现

IoRegisterFsRegistrationChange 注册一个文件系统变动回调函数,用来被通知文件系统的激活和注销,激活是指第一次加载文件系统,当一个文件系统已经加载后,当加载一个同种文件系统的卷时,该文件系统就和激活没关系。话说该函数调用后,激活的文件系统会重新激活一遍,在2k SP4之后的系统都会这样做。 现在考虑下,这种机制是怎么实现的,猜测是在注册的时候,注册完成后,系统将各

baund的专栏 2643

VXWorks6.9 + Workbench3.3 开发环境部署

VxWorks6.9 + Workbench3.3的安装部署,以及简单示例项目的创建、编译和运行

Mr.Sugarcane 5468

matlab RANSAC拟合圆柱【2025最新版】

RANSAC拟合圆柱

点云侠的博客 3135

Windows内核中的读写锁

...

SomeTimes 1495

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

声优广播节目语音识别与翻译技术全流程解析

语音识别技术通过将人类语音转换为文本,其核心原理涉及声学模型、语言模型和发音词典的协同工作。这项技术的价值在于实现人机交互的无缝衔接,在音频内容分析、多语言翻译等场景发挥重要作用。以声优广播节目为例,通过音频预处理、日语语音识别和机器翻译等环节,可以系统化地完成内容解析工作。其中,音频获取需要遵循版权规范,而语音识别准确率优化和术语识别增强是技术实现的关键。本文基于若井友希的节目实例,详细展示了从原始音频到中文翻译的完整工程实践方案,为声优粉丝和日语学习者提供了一套标准化的技术工作流。

weixin_34032792的博客 442

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

语音驱动数据分析:用自然语言替代代码实现数据探索

语音驱动数据分析是一种将人类自然语言指令实时转化为可执行数据操作的技术范式,其核心原理在于绕过传统‘语音→文本→代码’的脆弱链路,转而构建‘语音→意图→动态执行’的鲁棒架构。该技术依托ASR语音识别、大语言模型语义理解与领域规则引擎协同,显著降低数据处理门槛,释放业务人员的数据生产力。它不追求100%语音转写准确率,而是通过意图分类、上下文继承和AST安全执行保障可靠性,适用于财务分析、运营监控、教学演示等需快速响应的数据探索场景。本文聚焦于Whisper-small与Llama3-8B轻量组合在本地化语音

dengwan3818的博客 481

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IoRegisterFsRegistrationChange routine

IoRegisterFsRegistrationChange routine IoRegisterFsRegistrationChange 例程注册一个文件过滤器驱动器的通知例程到文件系统上。当文件系统注册或者注销自身时调用这个通知例程。 Syntax   NTSTATUS IoRegisterFsRegistrationChange(   _In_ PDRIVER_OBJECT    

死胖子的博客 1183

文件过滤驱动实现目录重定向(一)

By Fanxiushu  2015 转载或引用请注明原始作者 谈论这个问题前,先看看一个情况: 比如你上班的公司,可能有多个文件服务器,这些文件服务器通过FTP或者远程共享目录方式提供目录共享。 而你可能会经常性的从一个文件服务器切换到另一个文件服务器上去找资料。 而且如果是FTP的话,还得准备一个FTP客户端。 这么折腾也许觉得有点麻烦,也许就会想:有没有办法让所有这些文件服务器

fanxiushu的专栏 7035

Windows系统通用回调

本文将针对Windows操作系统所提供系统回调操作做逐一分析,以了解每个回调所能达成什么样的功能及效果。比如部分回调只是用于通知,我们只能通过此回调来了解某一类型事件的发生,只能做审计,拦截动作需要通过其它途径实现;也有回调可以实现即时拦截,通过回调即可阻止恶意程序的攻击企图。 Windows系统在内核及应用层均有提供回调机制,下面分为两部分作介绍: 1 内核回调 内核回调机制 OS版本 功能描述 备注 PsSetCreateProcessNotifyRoutine

做一个快乐学习者 2947

文件系统过滤驱动-Sfilter流程解析

1> IFS 流程图 a.生成一个控制设备.当然此前你必须给控制设置指定名称. b.设置Dispatch Functions. c.设置Fast Io Functions. d.编写一个my_fs_notify回调函数,在其中绑定刚激活的FS CDO. e.使用wdff_reg_notify调用注册这个回调函数。 f.编写默认的dispatch functions. g.处理

1869

Windows内核与实现读书笔记之门等待

并发是指多个控制流同时在执行,既可能是真正的并行执行(如多处理器或多核的硬件环境),也可能是分时方式的并发执行。 同步时保证在并发执行的环境中各个控制流可以有序地执行,包括对于资源的共享或互斥访问,以及代码功能的逻辑顺序。 5.1 进程和线程同步基础 5.1.1 并发性基础 进程或线程的并发性可能的来源: 多处理器环境、多核环境、超线程环境、处理器外部中断、内部中断、线程放弃执行权。 Intel X86 指令体系中,运算指令加上lock 前缀保证其原子性。 使用lock 前缀的两个...

maomao171314的专栏 1103

面向Windows的文件透明加解密解决方案(3)——透明加解密驱动程序二

3.3关键技术详解 对于用户的文件操作请求,Windows 用户层中对文件的各种操作映射到微过滤驱动中就转化为类型为Create,Read,Write 和Close 等的I/O 操作,因此只要对这些操作的内容进行过滤处理,即可达到透明加解密的目的。首先在IRP_MJ_CREATE 中查询目标文件是否是监控文件类型,创建一个StreamContext 并附着在文件对象上,并在StreamConte

某熊的技术之路 1万+

node文件读取和过滤、筛选(filter)

在node开发过程中,我们经常需要对文件进行读取,写入,以及文件的引入等相关操作和需求,那么我们就需要去读取我们的目录文件,并对其加以过滤,得到我们的目标文件,但是我们要怎么样高效率的进行文件的过滤呢,下面我们介绍了一种方法: 首先我们需要导入fs模块,然后用readdirSync列出文件 const fs = require('fs'); // 先导入fs模块,然后用readdirSync列出文...

StarFishing 9978

文件系统识别器 -----翻译自IFS KIT Documentation

文件系统识别器文件系统识别器是一个标准的NT内核模式驱动程序。它只实现一项功能:检查物理介质设备,如果它能够识别存储介质的格式便`加载相应的文件系统驱动程序。你可能要问:为什么不把所有的文件系统一起加载呢?因为系统几乎从不需要加载所有文件系统驱动程序,用一个小驱动可以节约数百K系统内存。实际上,所有标准的NT物理介质文件系统都利用文件系统识别器。举个例子来说,如果CD-ROM没有被访问,那么C

不论你在什么时候开始,重要的是开始之后就不要停止。 1006

读源码笔记--文件过滤驱动FileSpy第2篇 -- 绑定CDO

第一篇中,已经解读了DriverEntry这个函数,函数里面就是做了一些初始化工作,创建用于通信的设备,设置各种回调,注册文件系统变动回调等等。 今天接着看filespy.c中的SpyFsNotification函数。该函数是IoRegisterFsRegistrationChange注册的文件系统变动回调函数。先看这个的理由如下: 在没看任何代码前,我的思维是:首先绑定系统中的所有物

junjie1595的专栏 1546
上一篇: PE加载器的实现
下一篇: Rootkit 1: Detection Hide Process
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值