当前位置: 首页 > 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]

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

相关文章:

  • CSS 基础选择器 文字控制属性 综合案例
  • python3.12安装记录
  • 分割任意组织:用于医学图像分割的单样本参考引导免训练自动点提示方法|文献速递-深度学习医疗AI最新文献
  • MCU、MPU、GPU、Soc、DSP、FPGA、CPLD……它们到底是什么?
  • 日本云服务器租用多少钱合适
  • 当卷积作用于信号处理
  • AppInventor2原生进度条组件LinearProgress用法及注意点
  • 第四讲 基础运算之小数运算
  • SAP ERS 自动化发票
  • ubuntu 挂载问题
  • COHERENT XPRV23光电接收器控制软件
  • 观点 | 技术型企业在参数堆砌下的品牌识别度缺失
  • 5分钟玩转Swagger UI:Docker部署+静态化实战
  • 零基础设计模式——行为型模式 - 观察者模式
  • 将创世SD NAND FLASH设计在无人机上,可从硬件适配、接口与协议兼容、性能匹配
  • 不同环境的配置文件
  • OpenCV 图像几何形状绘制
  • 回归-嵌入式与c概念
  • docker 单机部署redis集群(一)
  • 股指期货入门基础知识
  • 【笔记】Blockchain
  • 微机原理与接口技术,期末习题(一)
  • 突破微小目标检测瓶颈:智能无人机在蓝莓产量估算中的解决方案
  • Smart Form Adobe form
  • 华为云Flexus+DeepSeek征文|基于华为云一键部署的 Dify LLM 应用平台三种方案横评:单机、知识库增强、高可用容器化比较
  • DAY 52 神经网络调参指南
  • yolov5环境配置
  • linux共享内存解析
  • 完整 Bootloader 框架
  • 智能制造:解读41页中小工厂数字化新路径【附全文阅读】