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

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)

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

相关文章:

  • 如何将 iPhone 中的短信导出为 PDF
  • [vela os_5] 中断系统 | 任务调度 | 日志系统
  • C++代码随想录刷题知识分享-----替换数字字符 —— 字符串空间扩展与逆向填充技巧
  • AI大模型从0到1记录学习 大模型技术之机器学习 day27-day60
  • 大数据学习(137)-大数据组件运行时角色
  • 【数据传输常用命令】:docker常用命令
  • AbMole推荐:Z-VAD-FMK,让凋亡/焦亡/坏死性凋亡机制研究更上一层楼
  • 一[3]、ubuntu18.04环境 利用 yolov8 训练开源列车数据集,并实现列车轨道检测
  • 遍历对象属性,for...in和Object.keys到底用哪个?
  • 「Unity3D」使用C#调用Android的震动功能,有三种方式
  • C++之容器适配器介绍 以及 STL--stack queue deque
  • 【氮化镓】GaN HEMT器件中Ec-0.9eV缺陷位置识别
  • [前端]HTML模拟实现一个基于摄像头的手势识别交互页面
  • AI集成运维管理平台的架构与核心构成解析
  • 蓝牙无线串口入门使用教程(以大夏龙雀 WF24 和 BT36 为例)
  • 【Net】TCP/IP 协议
  • 计算机视觉之三维重建(深入浅出SfM与SLAM核心算法)—— 2. 摄像机标定
  • 经典 C 程序 100 例实战详解:从入门到精通的一周学习计划
  • 【论文阅读32】预期寿命预测(2024)
  • 使用 MkDocs 构建并部署项目文档到 GitHub Pages
  • OpenCV基础知识
  • Cesium1.95中加载模型过多导致内存溢出的解决方案(服务端层面、代码层面、浏览器层面)
  • 大白话解释蓝牙的RPC机制
  • [vale os_3] 文件系统/VFS | 网络协议栈
  • 【React】SWR 和 React Query(TanStack Query)
  • 力扣HOT100之技巧:169. 多数元素
  • 【Zephyr 系列 21】OTA 升级与产测系统集成:远程配置、版本验证、自动回滚机制设计
  • 请问黑盒测试和白盒测试有哪些方法?
  • 力扣-198.打家劫舍
  • leetcode HOT100(49.字母异位词分组)