Ntfs!_LFCB結構如何構建出來的--從Ntfs!NtfsMountVolume到Ntfs!LfsAllocateLfcb

Ntfs!LfsRestartLogFile函數分析之調用Ntfs!LfsAllocateLfcb函數初始化Lfcb->LbcbWorkque

第一部分:

F:\srv03rtm>grep "NtfsStartLogFile" -rn F:\srv03rtm\base\fs\ntfs |grep -v "inary"
F:\srv03rtm\base\fs\ntfs/fsctrl.c:1890:??????????? NtfsStartLogFile( Vcb->LogFileScb,
F:\srv03rtm\base\fs\ntfs/logsup.c:130:#pragma alloc_text(PAGE, NtfsStartLogFile)
F:\srv03rtm\base\fs\ntfs/logsup.c:3556:NtfsStartLogFile (
F:\srv03rtm\base\fs\ntfs/logsup.c:3587:??? DebugTrace( +1, Dbg, ("NtfsStartLogFile:\n") );
F:\srv03rtm\base\fs\ntfs/logsup.c:3634:??? DebugTrace( -1, Dbg, ("NtfsStartLogFile -> VOID\n") );
F:\srv03rtm\base\fs\ntfs/mp/ntfs.prf:348:NtfsStartLogFile@8
F:\srv03rtm\base\fs\ntfs/ntfsproc.h:3031:NtfsStartLogFile (

NTSTATUS
NtfsMountVolume (
??? IN PIRP_CONTEXT IrpContext,
??? IN PIRP Irp
??? )
{

??????? //
??????? //? Create the log file Scb and really look up its size.
??????? //

??????? NtfsOpenSystemFile( IrpContext,
??????????????????????????? &Vcb->LogFileScb,
??????????????????????????? Vcb,
??????????????????????????? LOG_FILE_NUMBER,
??????????????????????????? 0,
??????????????????????????? $DATA,
??????????????????????????? TRUE );

??????? try {

??????????? Status = STATUS_SUCCESS;
??????????? UnrecognizedRestart = FALSE;

??????????? NtfsStartLogFile( Vcb->LogFileScb,
????????????????????????????? Vcb );

第二部分:

VOID
NtfsStartLogFile (
??? IN PSCB LogFileScb,
??? IN PVCB Vcb
??? )
{


??? Vcb->LogHeaderReservation = LfsOpenLogFile( LogFileScb->FileObject,
??????????????????????????????????????????????? UnicodeName,
??????????????????????????????????????????????? 1,
??????????????????????????????????????????????? 0,
??????????????????????????????????????????????? LogFileScb->Header.AllocationSize.QuadPart,
??????????????????????????????????????????????? &LfsInfo,
??????????????????????????????????????????????? &Vcb->LogHandle,
??????????????????????????????????????????????? &Vcb->LfsWriteData );

F:\srv03rtm>grep "LfsOpenLogFile" -rn F:\srv03rtm\base\fs\ntfs |grep -v "inary"
F:\srv03rtm\base\fs\ntfs/logsup.c:3623:??? Vcb->LogHeaderReservation = LfsOpenLogFile( LogFileScb->FileObject,
F:\srv03rtm\base\fs\ntfs/mp/ntfs.prf:389:LfsOpenLogFile@36

第三部分:

ULONG
LfsOpenLogFile (
??? IN PFILE_OBJECT LogFile,
??? IN UNICODE_STRING ClientName,
??? IN USHORT MaximumClients,
??? IN ULONG LogPageSize OPTIONAL,
??? IN LONGLONG FileSize,
??? IN OUT PLFS_INFO LfsInfo,
??? OUT PLFS_LOG_HANDLE LogHandle,
??? OUT PLFS_WRITE_DATA WriteData
??? )
{


??????????? //
??????????? //? Perform Lfs restart on this file object.
??????????? //

??????????? ThisLfcb = NewLfcb = LfsRestartLogFile( LogFile,
??????????????????????????????????????????????????? MaximumClients,
??????????????????????????????????????????????????? LogPageSize,
??????????????????????????????????????????????????? FileSize,
??????????????????????????????????????????????????? LfsInfo,
??????????????????????????????????????????????????? WriteData );

第四部分:

LfsAllocateLfcb
LfsRestartLogFile

PLFCB
LfsRestartLogFile (
??? IN PFILE_OBJECT LogFile,
??? IN USHORT MaximumClients,
??? IN ULONG LogPageSize OPTIONAL,
??? IN LONGLONG FileSize,
??? IN OUT PLFS_INFO LfsInfo,
??? OUT PLFS_WRITE_DATA WriteData
??? )


?? try {

??????? //
??????? //? Normalize the values passed in with this call.
??????? //

??????? LfsNormalizeBasicLogFile( &FileSize,
????????????????????????????????? &LogPageSize,
????????????????????????????????? &MaximumClients,
????????????????????????????????? UseDefaultLogPage );

??????? //
??????? //? Allocate an Lfcb to use for this file.
??????? //

??????? ThisLfcb = LfsAllocateLfcb( LogPageSize, FileSize );

第五部分:Ntfs!_LFCB結構的建立

PLFCB
LfsAllocateLfcb (
??? IN ULONG LogPageSize,
??? IN LONGLONG FileSize
??? )
{

??????? //
??????? //? Initialize the Lbcb links.
??????? //

??????? InitializeListHead( &Lfcb->LbcbWorkque );
??????? InitializeListHead( &Lfcb->LbcbActive );

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

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

相關文章

Domain層到底是什么

層級主要職責是否依賴 iOS / UIKit?Presentation (UI)視圖、控制器、ViewModel,將用戶操作轉成「意圖」,把結果渲染到屏幕是Domain業務規則 與 用例 (Use Case),維護系統在概念上的真實世界模型否(純 Swift&#xff0c…

Rust 服務端項目分層結構

DDD src/ ├── main.rs # 程序入口,負責啟動和依賴注入 ├── lib.rs # 公共庫入口,便于單元測試和復用 ├── config.rs # 配置管理(如數據庫、端口、環境變量等) ├── entities/ …

山東大學《Web數據管理》期末復習寶典【萬字解析!】

🌈 個人主頁:十二月的貓-CSDN博客 🔥 系列專欄:🏀山東大學期末速通專用_十二月的貓的博客-CSDN博客 💪🏻 十二月的寒冬阻擋不了春天的腳步,十二點的黑夜遮蔽不住黎明的曙光 目錄 1…

解決“在EFI系統上,Windows只能安裝到GPT磁盤“錯誤

環境:AMI BIOS(2012 American Megatrends,Inc.),清華同方筆記本,windows10安裝U盤 背景:使用安裝U盤安裝系統時,在選擇磁盤下一步,出現了“無法在驅動器0的分區1上安裝windows(w)。…

NetworkTermination-原始固件-分區備份

在對設備進行固件分區備份之前,我們需要通過設備的 debug 接口進行連接。設備的 debug 接口位于左下角,連接時需設置波特率為 115200。 ssh連接 設備默認的 SSH 服務配置較為嚴格,端口號為 33998,且不允許通過密碼直接登錄。我們可…

Network Manager客戶端制作小結

關聯資料 Unity 入門到精通(沈軍) c語言中的局部變量和全局變量_c語言全局變量-CSDN博客 關鍵詞 本地玩家信息:LocalClientId 網絡狀態及網絡序列化 網絡游戲服務器和客戶端 ClientRpc與ServerRpc 變量作用域與作用周期 Network Manager —…

Python 開發環境全棧隔離架構:從 Anaconda 到 PyCharm 的四級防護體系

【深度探索】Windows 下 Python 多版本虛擬環境管理與隔離實戰:支持 Anaconda、Poetry、Pipenv、venv、uv、Hatch、PyCharm、VS Code 全工具鏈方案-CSDN博客 【零基礎】Python 多版本虛擬環境管理與隔離實戰——支持 Anaconda、Poetry、Pipenv、venv、uv、Hatch、Py…

Redis集群性能優化實戰指南

Redis集群性能優化實戰指南 一、技術背景與應用場景 隨著互聯網服務規模不斷擴大,緩存層承載了海量的讀寫請求。Redis因其高性能和豐富的數據結構被廣泛用于緩存、排行榜、會話存儲等場景。單節點Redis在并發、內存和持久化方面會遇到瓶頸,Redis集群&a…

使用 Telegraf 向 TDengine 寫入數據

Telegraf 是一款十分流行的指標采集開源軟件。在數據采集和平臺監控系統中,Telegraf 可以采集多種組件的運行信息,而不需要自己手寫腳本定時采集,降低數據獲取的難度。 只需要將 Telegraf 的輸出配置增加指向 taosAdapter 對應的 url 并修改…

華為云 Flexus+DeepSeek 征文|華為云Dify 平臺 CCE 高可用集群部署與大模型高質量知識庫構建指南

華為云 FlexusDeepSeek 征文|華為云Dify 平臺 CCE 高可用集群部署與大模型高質量知識庫構建指南 文章目錄 華為云 FlexusDeepSeek 征文|華為云Dify 平臺 CCE 高可用集群部署與大模型高質量知識庫構建指南前言1、ModelArts Studio大模型開通2、Dify平臺CC…

測試校招/應屆刷題知識路線

需要重點關注計算機基礎知識和測試相關技能 對于即將參加校招或應屆的同學,測試崗位需要重點關注計算機基礎知識和測試相關技能。 掌握操作系統、計算機網絡、數據庫等計算機基礎,同時熟悉測試基礎理論、測試方法、自動化測試工具 (如 Selenium、JMeter)和編程語言(如 Py…

華為云Flexus+DeepSeek征文 | 基于華為云的 Dify-LLM 企業級 AI 開發平臺部署指南

前言 在人工智能技術迅猛發展的今天,大語言模型(LLM)已成為推動企業智能化轉型的核心引擎。然而,如何高效、安全地將 LLM 能力整合到實際業務場景中,仍然是許多開發者面臨的挑戰。Dify 作為一款開源的 LLM 應用開發平…

Dify×奇墨科技:開源+本土化,破解企業AI落地難題

在人工智能技術迅猛發展的今天,企業亟需高效、安全的AI應用開發工具。開源LLMOps平臺Dify.AI憑借其靈活性與開放性,已成為開發者構建AI應用的首選之一。而它在中國市場的規模化落地,離不開本土合作伙伴的強力支撐——奇墨科技作為Dify中國大陸…

Vue3+Spring boot 前后端防抖增強方案

我將基于您提供的防抖切面代碼進行改進,主要優化點包括使用Redis實現分布式防抖、增強鍵生成策略、改進異常處理等。以下是完整的改進方案: 1. 改進的防抖注解 (Debounce.java) java 復制 下載 package com.weiyu.anno;import java.lang.annotation…

Cppcheck 使用教程:本地 + CMake + GitHub Actions 自動分析實戰

Cppcheck 是一款強大的 C/C 靜態分析工具,專注于發現內存泄漏、未初始化變量、死代碼、未使用函數等問題。它不依賴編譯器,適合在持續集成和本地開發中快速定位潛在 Bug。 本文將手把手教你如何: 安裝 Cppcheck 在命令行中使用 集成到 CMak…

Mac Parallels Desktop Kali 2025 代理設置

Mac Parallels Desktop Kali 2025 代理設置 核心步驟: kali設置橋接wifi 查看kali和主機ip 運行命令ifconfig查看kali ip: mac主機ip: kali設置proxy ip填寫主機ip,port為主機proxy端口 enjoy

通義靈碼編程智能體深度評測(Qwen3模型+終端操作+MCP工具調用實戰)

1 引言 隨著AI編程助手進入工具鏈集成時代,通義靈碼作為阿里云推出的智能編程解決方案,其Qwen3模型與MCP(Multi-tool Calling Platform)的協同能力引發開發者關注。本文將基于真實開發場景,從代碼理解、終端操作和工具鏈調用三個維度展開深度…

SpringBoot電腦商城項目--商品詳情+加入購物車

商品詳情 1. 持久層 1.1. 規劃sql語句 根據id查詢商品詳情 1.2 mapper層編寫抽象方法 /*** 根據商品id查詢商品詳情* param id 商品id* return 匹配的id商品詳情,如果沒有匹配的數據,則返回null*/Product findById(Integer id); 1.3 xml文件中編寫sq…

上交卡爾動力聯合提出FastDrive!結構化標簽實現自動駕駛端到端大模型更快更強

最近將類人的推理能力融入到端到端自動駕駛系統中已經成為了一個前沿的研究領域。其中,基于視覺語言模型的方法已經吸引了來自工業界和學術界的廣泛關注。 現有的VLM訓練范式嚴重依賴帶有自由格式的文本標注數據集,如圖1(a)所示。雖然這些描述能夠捕捉豐…

C# 委托(什么是委托)

什么是委托 可以認為委托是持有一個或多個方法的對象。當然,一般情況下你不會想要“執行”一個對 象,但委托與典型的對象不同。可以執行委托,這時委托會執行它所“持有"的方法。 本章將揭示創建和使用委托的語法和語義。在本章后面&am…