当前位置: 首页 > backend >正文

Ntfs!NtfsInitializeRestartTable函数分析

Ntfs!NtfsInitializeRestartTable函数分析

第一部分:

            //
            //  Now we construct the dirty page table by calling the Cache Manager.
            //  For each dirty page on files tagged with our log handle, he will
            //  call us back at our DirtyPageRoutine.  We will allocate the initial
            //  Dirty Page Table, but we will let the call back routine grow it as
            //  necessary.
            //

            NtfsInitializeRestartTable( (((Vcb->RestartVersion == 0) ?
                                          sizeof( DIRTY_PAGE_ENTRY_V0 ) :
                                          sizeof( DIRTY_PAGE_ENTRY )) +
                                         ((Vcb->ClustersPerPage - 1) * sizeof(LCN))),
                                        Vcb->DirtyPageTableSizeHint,
                                        &DirtyPages );


现在,我们通过调用缓存管理器来构造脏页表。对于标记有我们日志句柄的文件上的每个脏页,他都会在DirtyPageRoutine上给我们回电。
我们将分配初始的脏页表,但我们会让回调例程根据需要对其进行扩展。


    [+0x6a0] RestartVersion   : 0x0 [Type: unsigned long]

    [+0x7b0] DirtyPageTableSizeHint : 0x20 [Type: unsigned long]

NtfsInitializeRestartTable (
    IN ULONG EntrySize,
    IN ULONG NumberEntries,
    OUT PRESTART_POINTERS TablePointer
    )


第二部分:

1: kd> p
Ntfs!NtfsCheckpointVolume+0x6f1:
f71d8639 e8f40afaff      call    Ntfs!NtfsInitializeRestartTable (f7179132)
1: kd> t
Ntfs!NtfsInitializeRestartTable:
f7179132 6a08            push    8
1: kd> dv
      EntrySize = 0x2c
  NumberEntries = 0x20
   TablePointer = 0xf78d2b90

第三部分:

1: kd> gu
Ntfs!NtfsCheckpointVolume+0x6f6:
f71d863e 6a01            push    1

1: kd> dx -r1 (*((Ntfs!_RESTART_POINTERS *)0xf78d2b90))
(*((Ntfs!_RESTART_POINTERS *)0xf78d2b90))                 [Type: _RESTART_POINTERS]
    [+0x000] Resource         [Type: _ERESOURCE]
    [+0x038] Table            : 0x895b9840 [Type: _RESTART_TABLE *]
    [+0x03c] SpinLock         : 0x0 [Type: unsigned long]
    [+0x040] ResourceInitialized : 0x1 [Type: unsigned char]
    [+0x041] DrainPending     : 0x0 [Type: unsigned char]
    [+0x042] Unused           [Type: unsigned char [6]]


1: kd> dx -r1 ((Ntfs!_RESTART_TABLE *)0x895b9840)
((Ntfs!_RESTART_TABLE *)0x895b9840)                 : 0x895b9840 [Type: _RESTART_TABLE *]
    [+0x000] EntrySize        : 0x2c [Type: unsigned short]
    [+0x002] NumberEntries    : 0x20 [Type: unsigned short]
    [+0x004] NumberAllocated  : 0x0 [Type: unsigned short]
    [+0x006] Reserved         [Type: unsigned short [3]]
    [+0x00c] FreeGoal         : 0xffffffff [Type: unsigned long]
    [+0x010] FirstFree        : 0x18 [Type: unsigned long]
    [+0x014] LastFree         : 0x56c [Type: unsigned long]

http://www.xdnf.cn/news/13968.html

相关文章:

  • 资金分析怎么做?如何预防短期现金流风险?
  • 刀客doc:WPP走下神坛
  • 中国AI Top30 访问量排行榜 - 2025年05月
  • 外部记忆的组织艺术:集合、树、栈与队列的深度解析
  • 燃气从业人员资格证书:职业发展的 “助推器”
  • 灌区信息化智能一体化闸门系统解决方案
  • 学习STC51单片机36(芯片为STC89C52RCRC)智能小车3(PWM差速小车)
  • 【软件安装那些事 4】CAD字体 SHX格式字库 免费 下载 及 使用方法
  • python中的分支结构:单分支、多分支,switch语句
  • JeecgBoot Pro-Online表单开发
  • 【经验篇】自签名TLS证书生成
  • 博客园突发大规模DDoS攻击 - 深度解析云安全防御新范式
  • P10987 [蓝桥杯 2023 国 Python A] 火车运输
  • 第一章 数字电路概述
  • 记一次错误 深拷贝 key值全部小写
  • 三次握手建立连接,四次挥手释放连接——TCP协议的核心机制
  • 上海市计算机学会竞赛平台2022年6月月赛丙组模糊匹配
  • 蚂蚁国际计划在香港和新加坡推出稳定币
  • 关于UEFI:UEFI/BIOS 固件分析
  • 【51单片机】6. 定时器、按键切换流水灯时钟Demo
  • MFC对话框程序使用线程方式更新窗体文本框内容(vs2019)
  • 多平台联动营销:品融电商助食品品牌打造电商“多栖”增长引擎
  • GetX例子:在一个组件里更新状态,在另一个组件里获取更新的数据
  • [Linux] -- 大文件拆分、合并与校验全解析:处理 GB/TB 级文件
  • 2024 一带一路暨金砖国家职业技能大赛(金砖国家未来技能和技术挑战赛)
  • openEuler虚拟机中容器化部署
  • c++虚表的调用
  • CSS 基础选择器、文字控制属性
  • 蓝牙协议GAP(Generic Access Profile)
  • 报表工具顶尖对决系列 — Echarts 展现与导出