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

nt!CcGetDirtyPages函数分析

nt!CcGetDirtyPages函数分析

第一部分:

1: kd> t
Breakpoint 31 hit
nt!CcGetDirtyPages:
80a15bbe 6a48            push    48h
1: kd> kc
 #
00 nt!CcGetDirtyPages
01 Ntfs!NtfsCheckpointVolume
02 Ntfs!NtfsCheckpointAllVolumes
03 nt!ExpWorkerThread
04 nt!PspSystemThreadStartup
05 nt!KiThreadStartup
1: kd> dv
       LogHandle = 0xe1293300
DirtyPageRoutine = 0xf71451f2
        Context1 = 0xf78d2c28
        Context2 = 0xf78d2aa4
  SavedNewestLsn = {0}
 SavedFileOffset = {0}

第二部分:

1: kd> x nt!CcDirtySharedCacheMapList
80b1cbc0          nt!CcDirtySharedCacheMapList = struct _SHARED_CACHE_MAP_LIST_CURSOR
1: kd> dx -r1 (*((ntkrnlmp!_SHARED_CACHE_MAP_LIST_CURSOR *)0x80b1cbc0))
(*((ntkrnlmp!_SHARED_CACHE_MAP_LIST_CURSOR *)0x80b1cbc0))                 [Type: _SHARED_CACHE_MAP_LIST_CURSOR]
    [+0x000] SharedCacheMapLinks [Type: _LIST_ENTRY]
    [+0x008] Flags            : 0x800 [Type: unsigned long]
1: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0x80b1cbc0))
(*((ntkrnlmp!_LIST_ENTRY *)0x80b1cbc0))                 [Type: _LIST_ENTRY]
    [+0x000] Flink            : 0x80b1cbb0 [Type: _LIST_ENTRY *]
    [+0x004] Blink            : 0x894d006c [Type: _LIST_ENTRY *]
1: kd> dd 0x80b1cbb0
80b1cbb0  89455cfc

1: kd> dd 89455cfc-64
89455c98  013002ff 00000001 00002000 00000000
89455ca8  89486bb8 89469228 00100000 00000000
89455cb8  ffffffff 7fffffff ffffffff 7fffffff

1: kd> dt SHARED_CACHE_MAP 89455cfc-64
nt!SHARED_CACHE_MAP
   +0x000 NodeTypeCode     : 0n767
   +0x002 NodeByteSize     : 0n304
   +0x004 OpenCount        : 1
   +0x008 FileSize         : _LARGE_INTEGER 0x2000
   +0x010 BcbList          : _LIST_ENTRY [ 0x89486bb8 - 0x89469228 ]
   +0x018 SectionSize      : _LARGE_INTEGER 0x100000
   +0x020 ValidDataLength  : _LARGE_INTEGER 0x7fffffff`ffffffff
   +0x028 ValidDataGoal    : _LARGE_INTEGER 0x7fffffff`ffffffff
   +0x030 InitialVacbs     : [4] 0x899880d8 _VACB
   +0x040 Vacbs            : 0x89455cc8  -> 0x899880d8 _VACB
   +0x044 FileObject       : 0x89455df0 _FILE_OBJECT
   +0x048 ActiveVacb       : (null)
   +0x04c NeedToZero       : (null)
   +0x050 ActivePage       : 0
   +0x054 NeedToZeroPage   : 0
   +0x058 ActiveVacbSpinLock : 0
   +0x05c VacbActiveCount  : 0
   +0x060 DirtyPages       : 2
   +0x064 SharedCacheMapLinks : _LIST_ENTRY [ 0x895d580c - 0x80b1cbb0 ]


1: kd> dt _vacb 0x899880d8
nt!_VACB
   +0x000 BaseAddress      : 0xc14c0000 Void
   +0x004 SharedCacheMap   : 0x89455c98 _SHARED_CACHE_MAP
   +0x008 Overlay          : __unnamed
   +0x010 LruList          : _LIST_ENTRY [ 0x89988178 - 0x899883a0 ]

第三部分:


    [+0x010] BcbList          [Type: _LIST_ENTRY]


1: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0x89455ca8))
(*((ntkrnlmp!_LIST_ENTRY *)0x89455ca8))                 [Type: _LIST_ENTRY]
    [+0x000] Flink            : 0x89486bb8 [Type: _LIST_ENTRY *]
    [+0x004] Blink            : 0x89469228 [Type: _LIST_ENTRY *]

1: kd> dt _bcb 0x89486bb8-10
nt!_BCB
   +0x000 Dummy            : _MBCB
   +0x000 NodeTypeCode     : 0n765         000002fd        #define CACHE_NTC_BCB                    (0x2FD)
   +0x002 Dirty            : 0x1 ''
   +0x003 Reserved         : 0 ''
   +0x004 ByteLength       : 0x1000
   +0x008 FileOffset       : _LARGE_INTEGER 0x1000
   +0x010 BcbLinks         : _LIST_ENTRY [ 0x89469228 - 0x89455ca8 ]
   +0x018 BeyondLastByte   : _LARGE_INTEGER 0x2000
   +0x020 OldestLsn        : _LARGE_INTEGER 0x80ee35b
   +0x028 NewestLsn        : _LARGE_INTEGER 0x80ef490
   +0x030 Vacb             : (null)
   +0x034 PinCount         : 0
   +0x038 Resource         : _ERESOURCE
   +0x070 SharedCacheMap   : 0x89455c98 _SHARED_CACHE_MAP
   +0x074 BaseAddress      : (null)


1: kd> ?0n765
Evaluate expression: 765 = 000002fd


第四部分:

                    if ((Bcb->NodeTypeCode == CACHE_NTC_BCB) && Bcb->Dirty) {

                        SavedFileOffset = Bcb->FileOffset;
                        SavedByteLength = Bcb->ByteLength;
                        SavedOldestLsn = Bcb->OldestLsn;
                        SavedNewestLsn = Bcb->NewestLsn;

                        //
                        //  Increment PinCount so the Bcb sticks around
                        //

                        Bcb->PinCount += 1;

1: kd> dt _bcb 0x89486bb8-10
nt!_BCB
   +0x000 Dummy            : _MBCB
   +0x000 NodeTypeCode     : 0n765
   +0x002 Dirty            : 0x1 ''
   +0x003 Reserved         : 0 ''
   +0x004 ByteLength       : 0x1000
   +0x008 FileOffset       : _LARGE_INTEGER 0x1000
   +0x010 BcbLinks         : _LIST_ENTRY [ 0x89469228 - 0x89455ca8 ]
   +0x018 BeyondLastByte   : _LARGE_INTEGER 0x2000
   +0x020 OldestLsn        : _LARGE_INTEGER 0x80ee35b
   +0x028 NewestLsn        : _LARGE_INTEGER 0x80ef490
   +0x030 Vacb             : (null)
   +0x034 PinCount         : 0
   +0x038 Resource         : _ERESOURCE
   +0x070 SharedCacheMap   : 0x89455c98 _SHARED_CACHE_MAP
   +0x074 BaseAddress      : (null)

相关文章:

  • 软件测试相关问题
  • 蓝牙无线串口入门使用教程(以大夏龙雀 WF24 和 BT36 为例)
  • PCI总线概述
  • 【开源工具】:基于PyQt5的智能网络驱动器映射工具开发全流程(附源码)
  • Java 大视界——Java大数据在智能安防视频监控中的异常事件快速响应与处理机制
  • 动态规划2——路径动态规划
  • 【消息队列】——如何实现消息保序
  • 科技文明的奇妙锻造之旅
  • 实时监控、秒级决策:镜舟科技如何重塑融资融券业务数据处理模式
  • Appium+python自动化(二十一)- Monkey指令操作手机
  • 智能云打印机EN 18031申请认证流程
  • Python—turtle绘图库使用方法
  • flutter 的lottie执行一次动画后关闭
  • 体育赛事直播平台的数据架构:从实时统计到深度洞察
  • MAC-苹果电脑专业卸载工具AppCleaner
  • 用MATLAB打造智能温度监测系统:从实时绘图到预测分析
  • 「pandas 与 numpy」数据分析与处理全流程【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • 从0到1构建高并发秒杀系统:实战 RocketMQ 异步削峰与Redis预减库存
  • Spring MVC 入门案例:从代码到原理的深度剖析
  • Kafka问题排查笔记
  • 手机网站全屏代码/东莞网站推广企业
  • 经销商城建站/百度投诉中心人工电话号码
  • 做网站流程 优帮云/超级外链工具 增加外链中
  • 兖州中材建设有限公司网站/营销型网站建设解决方案
  • 香港公司注册代理/seo外包公司专家
  • 2008 .net 网站 目录 权限管理/怎么把网站排名优化