欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > nt!CcGetDirtyPages函数分析

nt!CcGetDirtyPages函数分析

2025/6/21 1:11:50 来源:https://blog.csdn.net/sitelist/article/details/148615753  浏览:    关键词: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)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词