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

Ntfs!NtfsAllocateRestartTableIndex函数分析和Ntfs!DIRTY_PAGE_ENTRY_V0结构的关系

Ntfs!NtfsAllocateRestartTableIndex函数分析和Ntfs!DIRTY_PAGE_ENTRY_V0结构的关系


第一部分:

1: kd> t
Ntfs!DirtyPageRoutine+0x42:
f7145234 e84f0d0100      call    Ntfs!NtfsAllocateRestartTableIndex (f7155f88)
1: kd> t
Ntfs!NtfsAllocateRestartTableIndex:
f7155f88 55              push    ebp
1: kd> kc
 #
00 Ntfs!NtfsAllocateRestartTableIndex
01 Ntfs!DirtyPageRoutine
02 nt!CcGetDirtyPages
03 Ntfs!NtfsCheckpointVolume
04 Ntfs!NtfsCheckpointAllVolumes
05 nt!ExpWorkerThread
06 nt!PspSystemThreadStartup
07 nt!KiThreadStartup
1: kd> dv
   TablePointer = 0xf78d2b90
      Exclusive = 1
     LockHandle = struct _KLOCK_QUEUE_HANDLE
     EntryIndex = 0xf78d2b90


1: kd> dx -r1 ((Ntfs!_RESTART_POINTERS *)0xf78d2b90)
((Ntfs!_RESTART_POINTERS *)0xf78d2b90)                 : 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]

第二部分:

    //
    //  Get First Free to return it.
    //

    EntryIndex = Table->FirstFree;        [+0x010] FirstFree        : 0x18


#define GetRestartEntryFromIndex(TBL,INDX) (    \
    (PVOID)((PCHAR)(TBL)->Table + (INDX))       \
)


    //
    //  Dequeue this entry and zero it.
    //

    Entry = (PULONG)GetRestartEntryFromIndex( TablePointer, EntryIndex );


#define RESTART_ENTRY_ALLOCATED          (0xFFFFFFFF)

第三部分:


1: kd> dx -id 0,0,899a2278 -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        : 0x44 [Type: unsigned long]
    [+0x014] LastFree         : 0x56c [Type: unsigned long]


1: kd> dt DIRTY_PAGE_ENTRY_V0 0x895b9840+18
Ntfs!DIRTY_PAGE_ENTRY_V0
   +0x000 AllocatedOrNextFree : 0xffffffff
   +0x004 TargetAttribute  : 0
   +0x008 LengthOfTransfer : 0
   +0x00c LcnsToFollow     : 0
   +0x010 Reserved         : 0
   +0x014 Vcn              : 0n0
   +0x01c OldestLsn        : _LARGE_INTEGER 0x0
   +0x024 LcnsForPage      : [1] 0n0

第四部分:

1: kd> dt DIRTY_PAGE_ENTRY_V0 0x895b9840+18+2c
Ntfs!DIRTY_PAGE_ENTRY_V0
   +0x000 AllocatedOrNextFree : 0x70
   +0x004 TargetAttribute  : 0
   +0x008 LengthOfTransfer : 0
   +0x00c LcnsToFollow     : 0
   +0x010 Reserved         : 0
   +0x014 Vcn              : 0n0
   +0x01c OldestLsn        : _LARGE_INTEGER 0x0
   +0x024 LcnsForPage      : [1] 0n0
1: kd> dt DIRTY_PAGE_ENTRY_V0 0x895b9840+18+2c*2
Ntfs!DIRTY_PAGE_ENTRY_V0
   +0x000 AllocatedOrNextFree : 0x9c
   +0x004 TargetAttribute  : 0
   +0x008 LengthOfTransfer : 0
   +0x00c LcnsToFollow     : 0
   +0x010 Reserved         : 0
   +0x014 Vcn              : 0n0
   +0x01c OldestLsn        : _LARGE_INTEGER 0x0
   +0x024 LcnsForPage      : [1] 0n0
1: kd> dt DIRTY_PAGE_ENTRY_V0 0x895b9840+18+2c*3
Ntfs!DIRTY_PAGE_ENTRY_V0
   +0x000 AllocatedOrNextFree : 0xc8
   +0x004 TargetAttribute  : 0
   +0x008 LengthOfTransfer : 0
   +0x00c LcnsToFollow     : 0
   +0x010 Reserved         : 0
   +0x014 Vcn              : 0n0
   +0x01c OldestLsn        : _LARGE_INTEGER 0x0
   +0x024 LcnsForPage      : [1] 0n0
1: kd> dt DIRTY_PAGE_ENTRY_V0 0x895b9840+18+2c*4
Ntfs!DIRTY_PAGE_ENTRY_V0
   +0x000 AllocatedOrNextFree : 0xf4
   +0x004 TargetAttribute  : 0
   +0x008 LengthOfTransfer : 0
   +0x00c LcnsToFollow     : 0
   +0x010 Reserved         : 0
   +0x014 Vcn              : 0n0
   +0x01c OldestLsn        : _LARGE_INTEGER 0x0
   +0x024 LcnsForPage      : [1] 0n0
1: kd> dt DIRTY_PAGE_ENTRY_V0 0x895b9840+18+2c*5
Ntfs!DIRTY_PAGE_ENTRY_V0
   +0x000 AllocatedOrNextFree : 0x120
   +0x004 TargetAttribute  : 0
   +0x008 LengthOfTransfer : 0
   +0x00c LcnsToFollow     : 0
   +0x010 Reserved         : 0
   +0x014 Vcn              : 0n0
   +0x01c OldestLsn        : _LARGE_INTEGER 0x0
   +0x024 LcnsForPage      : [1] 0n0

第五部分:

    Table->NumberAllocated += 1;


1: kd> dt _RESTART_POINTERS  0xf78d2b90
Ntfs!_RESTART_POINTERS
   +0x000 Resource         : _ERESOURCE
   +0x038 Table            : 0x895b9840 _RESTART_TABLE
   +0x03c SpinLock         : 0
   +0x040 ResourceInitialized : 0x1 ''
   +0x041 DrainPending     : 0 ''
   +0x042 Unused           : [6]  ""
1: kd> dx -id 0,0,899a2278 -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  : 0x1 [Type: unsigned short]
    [+0x006] Reserved         [Type: unsigned short [3]]
    [+0x00c] FreeGoal         : 0xffffffff [Type: unsigned long]
    [+0x010] FirstFree        : 0x44 [Type: unsigned long]
    [+0x014] LastFree         : 0x56c [Type: unsigned long]

相关文章:

  • Nacos服务注册失败解决方案
  • Unity Mecanim C# 动画切换实践:实现随机播放待机动画
  • 大数据学习(139)-数仓设计
  • 高动态范围成像
  • 论文略读:HR-Extreme: A High-Resolution Dataset for Extreme Weather Forecasting
  • 【2025】Ubuntu22.04深度学习环境搭建记录
  • Flash数据写入及ECC纠错关键函数:Fapi_issueProgrammingCommand()
  • Acrobat 中使用 JavaScript 禁止 PDF 打印
  • CSS实现元素撑满剩余空间的5种方法
  • linux中的locate命令
  • 探索MCP Server Chart:AI赋能的统计图表自动生成工具
  • 柑橘检测模型
  • 中国AI Top30 访问量排行榜 - 2025年05月
  • 基于mapreduce的气候分析系统设计与实现
  • 刀客doc:WPP走下神坛
  • 论文参考文献干干货
  • LeetCode 1143. 最长公共子序列 | 动态规划详解
  • 【MV】为什么需要DeepSeek 的分析: AI 替代编舞师
  • Java高频面试之并发编程-28
  • 剑指offer23_树的子结构
  • 公司如何做自己的网站/新乡网站推广
  • 做外贸网站服务器要选择哪里的/网站外链怎么发布
  • 网站开发的服务器/出售友情链接是什么意思
  • 深圳做针织衫服装的网站/怎么自己做一个网址
  • 千户微建站平台/上海百度推广方案
  • 网站怎么做任务赚钱吗/网络营销的概念和特点