Ntfs!LfsUpdateLfcbFromRestart函數分析之Ntfs!LfsFindOldestClientLsn

第0部分:

??? //
//? Find the oldest client Lsn.? Use the last flushed Lsn as a starting point.
//

??? Lfcb->OldestLsn = Lfcb->LastFlushedLsn;

??? LfsFindOldestClientLsn( RestartArea,
Add2Ptr( RestartArea, Lfcb->ClientArrayOffset, PLFS_CLIENT_RECORD ),
&Lfcb->OldestLsn );


第一部分:

1: kd> p
Ntfs!LfsUpdateLfcbFromRestart+0x2df:
f71fb0e1 e8f26af8ff????? call??? Ntfs!LfsFindOldestClientLsn (f7181bd8)
1: kd> t
Ntfs!LfsFindOldestClientLsn:
f7181bd8 55????????????? push??? ebp
1: kd> kc
#
00 Ntfs!LfsFindOldestClientLsn
01 Ntfs!LfsUpdateLfcbFromRestart
02 Ntfs!LfsRestartLogFile
03 Ntfs!LfsOpenLogFile
04 Ntfs!NtfsStartLogFile
05 Ntfs!NtfsMountVolume
06 Ntfs!NtfsCommonFileSystemControl
07 Ntfs!NtfsFspDispatch
08 nt!ExpWorkerThread
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup
1: kd> dv
RestartArea = 0xc1140030
ClientArray = 0xc1140070
OldestLsn = 0xe13640c0 {135361636}

第二部分:

1: kd> dx -r1 ((Ntfs!_LFS_RESTART_AREA *)0xc1140030)
((Ntfs!_LFS_RESTART_AREA *)0xc1140030)???????????????? : 0xc1140030 [Type: _LFS_RESTART_AREA *]
[+0x000] CurrentLsn?????? : {135361636} [Type: _LARGE_INTEGER]
[+0x008] LogClients?????? : 0x1 [Type: unsigned short]
[+0x00a] ClientFreeList?? : 0xffff [Type: unsigned short]
[+0x00c] ClientInUseList? : 0x0 [Type: unsigned short]
[+0x00e] Flags??????????? : 0x0 [Type: unsigned short]
[+0x010] SeqNumberBits??? : 0x28 [Type: unsigned long]
[+0x014] RestartAreaLength : 0xe0 [Type: unsigned short]
[+0x016] ClientArrayOffset : 0x40 [Type: unsigned short]
[+0x018] FileSize???????? : 67108864 [Type: __int64]
[+0x020] LastLsnDataLength : 0x68 [Type: unsigned long]
[+0x024] RecordHeaderLength : 0x30 [Type: unsigned short]
[+0x026] LogPageDataOffset : 0x40 [Type: unsigned short]
[+0x028] RestartOpenLogCount : 0x85e1225b [Type: unsigned long]
[+0x02c] LastFailedFlushStatus : 0x0 [Type: unsigned long]
[+0x030] LastFailedFlushOffset : 0 [Type: __int64]
[+0x038] LastFailedFlushLsn : {0} [Type: _LARGE_INTEGER]
[+0x040] LogClientArray?? [Type: _LFS_CLIENT_RECORD [1]]

#define LFS_NO_CLIENT?????????????????????????? 0xffff

??? //
//? While there are more clients, compare their oldest Lsn with the
//? current oldest.
//

??? while (NextClient != LFS_NO_CLIENT) {


ClientBlock = ClientArray + NextClient;?? ?c1140070

1: kd> p
Ntfs!LfsFindOldestClientLsn+0x53:
f7181c2b 03450c????????? add???? eax,dword ptr [ebp+0Ch]
1: kd> r
eax=00000000 ebx=e13640c0 ecx=000003b8 edx=00000c48 esi=e13640c0 edi=c1140030
eip=f7181c2b esp=f78d290c ebp=f78d2914 iopl=0???????? nv up ei pl zr na pe nc
cs=0008? ss=0010? ds=0023? es=0023? fs=0030? gs=0000???????????? efl=00000246
Ntfs!LfsFindOldestClientLsn+0x53:
f7181c2b 03450c????????? add???? eax,dword ptr [ebp+0Ch] ss:0010:f78d2920=c1140070
1: kd> dv
RestartArea = 0xc1140030
ClientArray = 0xc1140070
OldestLsn = 0xe13640c0 {135361636}

1: kd> ?0n135361636
Evaluate expression: 135361636 = 08117464

1: kd> dd f78d2914+0Ch
f78d2920? c1140070


第三部分:

1: kd> dx -r1 ((Ntfs!_LFS_CLIENT_RECORD *)0xc1140070)
((Ntfs!_LFS_CLIENT_RECORD *)0xc1140070)???????????????? : 0xc1140070 [Type: _LFS_CLIENT_RECORD *]
[+0x000] OldestLsn??????? : {135349873} [Type: _LARGE_INTEGER]


第四部分:

1: kd> ?0n135349873
Evaluate expression: 135349873 = 08114671


if (( ClientBlock->OldestLsn.QuadPart != 0 )
&& ( ClientBlock->OldestLsn.QuadPart < OldestLsn->QuadPart )) {?? ??? ?//條件成立

??????????? *OldestLsn = ClientBlock->OldestLsn;
}


1: kd> p
Ntfs!LfsFindOldestClientLsn+0x6e:
f7181c46 890e??????????? mov???? dword ptr [esi],ecx
1: kd> r
eax=c1140070 ebx=e13640c0 ecx=08114671 edx=08114671 esi=e13640c0 edi=08114671

1: kd> dd e13640c0
e13640c0? 08117464 00000000 00000000 00000000


1: kd> dv
RestartArea = 0xc1140030
ClientArray = 0xc1140070
OldestLsn = 0xe13640c0 {135349873}?? ?0x08114671

1: kd> dd e13640c0
e13640c0? 08114671 00000000 00000000 00000000
e13640d0? 08117464 00000000 00000000 00000000

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88376.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88376.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88376.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

「日拱一碼」021 機器學習——特征工程

目錄 特征選擇 過濾法&#xff08;Filter Methods&#xff09; 方差選擇法 相關系數法 卡方檢驗 包裹法&#xff08;Wrapper Methods&#xff09; 遞歸特征消除&#xff08;RFE&#xff09; 嵌入法&#xff08;Embedded Methods&#xff09; L1正則化&#xff08;Lasso…

k8s:安裝 Helm 私有倉庫ChartMuseum、helm-push插件并上傳、安裝Zookeeper

ChartMuseum 是 Kubernetes 生態中用于存儲、管理和發布 Helm Charts 的開源系統&#xff0c;主要用于擴展 Helm 包管理器的功能 核心功能 ?集中存儲?&#xff1a;提供中央化倉庫存儲Charts&#xff0c;支持版本管理和權限控制。 ? ?跨集群部署?&#xff1a;支持多集群環境…

C++編程學習(第二天)

1、求a和b兩個數之和。#include <iostream> using namespace std;int main() {int a, b, sum; //定義變量a、b、sumcout << "請輸入第一個數字a: "; //打印需要顯示的字符串cin >> a; // >&…

毫米波雷達守護銀發安全:七彩喜跌倒檢測儀重構居家養老防線

在老齡化加速與獨居老人數量攀升的背景下&#xff0c;跌倒已成為威脅老年人生命安全的“隱形殺手”。七彩喜跌倒檢測儀以毫米波雷達技術為核心&#xff0c;通過“非接觸式監測智能預警”重塑居家安全防護體系&#xff0c;為銀發群體構建起全天候、無感化的數字守護網。技術突破…

面試復盤:節流中第二次觸發的事件?答錯補課

面試復盤&#xff1a;節流中第二次觸發的事件&#xff1f;答錯補課 背景描述 今天面試時被問到一個看似基礎但暗藏玄機的問題&#xff1a;“節流&#xff08;Throttle&#xff09;函數中&#xff0c;第二次觸發的那一幀事件是否會被丟掉&#xff1f;” 我基于對經典節流實現的…

Spark偽分布式集群搭建(Ubuntu系統)

環境準備 系統要求&#xff1a;Ubuntu 20.04/22.04 LTS 軟件版本&#xff1a; Hadoop 3.3.5 JDK 8 Spark-3.5.6-bin-hadoop3 硬件要求&#xff1a;至少4GB內存&#xff0c;20GB磁盤空間 以下是基于Ubuntu系統的Spark偽分布式集群搭建全流程。以Spark 3.5.6 Hadoop 3.3.…

【快手】數據挖掘面試題0001:查找連續三天登錄的用戶

文章大綱一、測試數據構建二、自連接方案三、窗口函數方案一張用戶表&#xff0c;uer_id&#xff0c;signin_date&#xff0c;大概是這么幾項&#xff0c;查找連續三天登錄的用戶。 比如說&#xff0c;1,2兩天登錄不是連續三天&#xff0c;456登錄為連續三天登錄&#xff0c;56…

簡說scp命令

簡單介紹 scp的全稱是&#xff1a;Secure Copy Protocol&#xff08;安全復制協議&#xff09;&#xff0c;是Linux中用于在網絡中安全傳輸文件的命令行工具。它基于SSH協議&#xff0c;用于在本地服務器和遠程服務器之間&#xff0c;或者兩臺遠程服務器之間復制文件或目錄。 s…

自動化測試解決方案Parasoft SOAtest無腳本UI測試實踐指南

傳統UI自動化測試常面臨技術門檻高、維護成本大、穩定性差等挑戰。尤其在頁面頻繁變更時&#xff0c;測試腳本的更新和維護會顯著降低測試效率。 自動化測試解決方案Parasoft SOAtest通過可視化操作和智能元素定位技術&#xff0c;無需編寫代碼&#xff0c;讓測試人員能夠像真…

vscode配置頭文件和編譯器

在 VS Code 中配置編譯器和頭文件路徑需要修改兩個核心文件&#xff1a;c_cpp_properties.json&#xff08;用于智能提示&#xff09;和 tasks.json&#xff08;用于構建&#xff09;。以下是詳細步驟&#xff1a; —### 1. 配置智能提示和頭文件路徑 (c_cpp_properties.json)作…

HTML+JS+CSS制作一個數獨游戲

閑來無事&#xff0c;用HTMLJSCSS制作了一個數獨游戲消遣。其實主要是自己做題的時候用筆畫刪除數字太容易出錯&#xff0c;所以想搞一個程序稍微輔助一下。通過制作這個程序&#xff0c;反而提高了手工做題的水平&#xff0c;至少學會了記錄步數以便于回退。 20250710功能更新…

嵌入式硬件中電容的基本原理與實現詳解02

我們今天重點討論點知識點如下: 1.各種種類的電容優缺點對比講解 2.電容的標稱值介紹 3.電容的單位介紹 4.常見的電壓信號有哪些? 5. 電容的耐壓值講解 6.電容的容值有哪些? 7.12pF、15pF 電容常用在什么場合? 8. 振蕩電路中使用的電容常常需要使用什么材質的電容? 9.100n…

Python訓練打卡DAY46

DAY46&#xff1a;通道注意力&#xff08;SE注意力&#xff09; 恩師浙大疏錦行 知識點&#xff1a; 不同CNN層的特征圖&#xff1a;不同通道的特征圖什么是注意力&#xff1a;注意力家族&#xff0c;類似于動物園&#xff0c;都是不同的模塊&#xff0c;好不好試了才知道。通…

fastadmin_php專項

1.時間的判斷,還有就是在php這邊如何去拿前端html元素上面的值input($row.borrowtime);// 創建兩個 DateTime 對象$row_expecttime new \DateTime(input($row.borrowtime));$par_expecttime new \DateTime( $params[expecttime]); // // 計算兩個日期之間的差異 // …

如何在MySQL中選擇使用InnoDB還是MyISAM引擎?

在 MySQL 中選擇 InnoDB 還是 MyISAM 存儲引擎時&#xff0c;需根據應用場景的需求權衡功能、性能和數據完整性。以下是具體的選擇指南&#xff1a; 1. 優先考慮事務和外鍵需求必須使用 InnoDB&#xff1a; 若應用需要 事務支持&#xff08;如金融轉賬、訂單處理&#xff09;或…

邀請函 | 知從科技邀您共赴2025 RISC-V 中國峰會

第五屆RISC-V中國峰會將于2025年7月16至19日在上海張江科學會堂隆重舉辦&#xff0c;本屆峰會由上海開放處理器產業創新中心&#xff08;SOPIC&#xff09;主辦&#xff0c;RISC-V國際開源實驗室&#xff08;RIOS實驗室&#xff09;和上海張江高科技園區開發股份有限公司聯合主…

企業數字化轉型規劃和建設方案(管理架構、應用架構、技術架構)PPT

一、戰略定位與核心目標以 “技術賦能業務&#xff0c;數據驅動創新” 為核心思路&#xff0c;構建 “三步走” 戰略演進路徑&#xff0c;實現 IT 從 “基礎支撐” 到 “戰略引擎” 的升級&#xff1a;IT1.0&#xff08;1-2 年&#xff09;&#xff1a;夯實基礎能力定位 “穩健…

基于Uniapp+MySQL+PHP的景區多商戶小程序源碼系統 帶完整的搭建指南

溫馨提示&#xff1a;文末有資源獲取方式該系統采用 PHP MySQL 的經典開發組合。PHP 作為一種廣泛使用的開源腳本語言&#xff0c;具有簡單易學、運行速度快、跨平臺性強等優點&#xff0c;能夠快速開發出功能強大的 Web 應用程序。MySQL 則是一款穩定可靠的關系型數據庫管理系…

阿里云和騰訊云RocketMQ 發消息和消費消息客戶端JAVA接口

一、RocketMQ 概述RocketMQ 是阿里巴巴開源的一款分布式消息中間件&#xff0c;后捐贈給 Apache 基金會成為頂級項目。它具有低延遲、高并發、高可用、高可靠等特點&#xff0c;廣泛應用于訂單交易、消息推送、流計算、日志收集等場景。核心特點分布式架構&#xff1a;支持集群…

Vue響應式原理六:Vue3響應式原理

1. 多個對象響應式當前存在的問題&#xff1a;當前實現僅針對某個固定對象&#xff08;obj&#xff09;進行依賴收集&#xff0c;實際開發中需要處理多個不同對象將對象響應式處理邏輯抽取為通用函數&#xff0c;支持任意對象代碼如下&#xff1a; // 方案一&#xff1a;Obje…