操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    文內(nèi)容非商業(yè)用途可無需授權(quán)轉(zhuǎn)載,請務(wù)必注明作者、微博ID:唐僧_huangliang,以便更好地與讀者互動。

    作者簡介:

    王之業(yè),現(xiàn)就職于Arcserve,任開發(fā)經(jīng)理。長期從事數(shù)據(jù)備份與恢復(fù)領(lǐng)域研發(fā)與管理工作,對行業(yè)發(fā)展高度關(guān)注,同時對數(shù)據(jù)保護與恢復(fù)有自己非常獨到的見解。

    原文地址:http://www.docin.com/p-1843467578.html

    Windows 其實可以支持多種引導(dǎo)方式。 除了本地硬盤引導(dǎo)外,還有例如PXE引導(dǎo)、iSCSI引導(dǎo)、RAM Disk引導(dǎo)、VHD引導(dǎo)等。但本文將只關(guān)注磁盤引導(dǎo)的方式。

    這里展示的分區(qū)布局是全新安裝的情況。 如果從老系統(tǒng)(例Windows XP)升級上來,則仍然會保持和原來的分區(qū)布局一樣。也就是說,Windows 7等可以工作在以前的分區(qū)布局上。

    BitLocker是微軟Vista時增加的功能。它對整個磁盤卷進行加密保護。后面還會不斷地被提到。在Windows引導(dǎo)過程中,很多地方都在考慮BitLocker的特殊需求。

    WinRE,即Windows Recovery Environment。用于修復(fù)Windows的引導(dǎo)故障。如果Windows在引導(dǎo)過程中遇到問題,會自動入該環(huán)境。

    MBR,即Master Boot Record。它是最常見式雖已經(jīng)(雖然已經(jīng)有被UEFI引導(dǎo)替代的趨勢)。這里會首先詳細(xì)介紹MBR引導(dǎo)的每個階段,直到第一個用戶態(tài)進程出現(xiàn)為止。

    先上一張圖。 這個圖和上次介紹Grub 2引導(dǎo)過程時展示的圖類似。它主要描述了引導(dǎo)過程的每個階段,以及所涉及磁盤存儲的位置、內(nèi)存地址和CPU模式的情況。

    你可能會注意到MBR的內(nèi)存載入和PBR是一樣的。確實如此。MBR中的程序代碼將自身從內(nèi)存0x7C00的位置復(fù)制到0x0600的位置,而后把PBR讀入到0x7C00。后面有更多相關(guān)介紹。BootMgr首先被載入到內(nèi)存地址0x20000的位置,而它的后半部分(bootmgr.exe)會被重新定位到0x400000的位置。

    TPM,即Trusted Platform Module。一個可以提供秘鑰創(chuàng)建和保存,以及加密解密功能的芯片。Windows的BitLocker就是利用TPM來實現(xiàn)最高安全可靠性的。所以TPM在后面會被多次提到。PCR即Platform Configuration Register,是TPM內(nèi)部的寄存器。TPM一般有16到24個寄存器。BitLocker使用了其中的8個。

    上面只是從BIOS開始介紹引導(dǎo)過程。實際在系統(tǒng)加電后,TPM會首先驗證自身的完整性,然后計算BIOS固件的哈希值,最后才是計算MBR的哈希值。 每一部都會把結(jié)果存放在TPM的PCR的不同寄存器中。

    MBR是磁盤的第一個扇區(qū)。其中包含啟動代碼、磁盤ID,分區(qū)表。

    有人可能會問,MBR作為從磁盤讀上來的第一塊數(shù)據(jù),為什么要放在內(nèi)存0x7C00的位置,而不是放在內(nèi)存的開始處,或者內(nèi)存的結(jié)尾處?其實,在最初設(shè)計的時候(30多年前),0x7C00就是內(nèi)存的結(jié)尾處。那時候內(nèi)存只有32KB大小。而內(nèi)存開始的位置,一般被用于存放中斷向量和BIOS的一些數(shù)據(jù)。后來,為了保持兼容,這個規(guī)則就一直這么延續(xù)下來了。

    A20地址線是另一個關(guān)于“兼容”的故事。A20實際是第21條CPU地址線(計算機的世界里都是從零開始計數(shù)的)。它對應(yīng)的是1MB之后的內(nèi)存地址。早期的Intel 8086 只能訪問1MB的內(nèi)存。如果內(nèi)存尋址超出了1MB,就會重新從零開始(相當(dāng)與取模計算)。當(dāng)時有些軟見就利用這個特性來提高內(nèi)存訪問效率。后續(xù)的CPU雖然提高了內(nèi)存尋址范圍,但為了兼容當(dāng)時的現(xiàn)有軟件,不得不在CPU處于實模式的時候,繼續(xù)模擬8086的行為。遺憾的是,Intel 80286 在出廠后才發(fā)現(xiàn)沒有處理好這個兼容問題。當(dāng)時的PC制造商IBM決定自己在主板上解決這個問題:在A20地址線上加個開關(guān),并讓它缺省處于關(guān)閉狀態(tài)。估計當(dāng)時的工程師急于快速解決問題,竟然把對這個開關(guān)的控制關(guān)聯(lián)在了主板的鍵盤控制器上。所以MBR中的代碼會通過向鍵盤控制器的端口發(fā)送指令來打開A20地址線。

    TCG_CompactHashLogExtendEvent 是TPM規(guī)范中定義的例程的名字。MBR代碼通過中斷INT 1A來調(diào)用這個例程。

    以上是MBR在磁盤上的數(shù)據(jù)。

    從0x0到0x1B7之間為啟動代碼(或者錯誤信息字符串)。從Windows 7到Windows 10,這部分代碼沒有變化。

    從0x1B8開始的四個字節(jié)為磁盤ID,唯一標(biāo)識當(dāng)前系統(tǒng)正在使用的一塊磁盤。顯然,只有四個字節(jié),是無法全局唯一標(biāo)識磁盤的。這里可能有人會有疑問:如果克隆了一個磁盤,并掛接在同一個系統(tǒng)里,那不就重復(fù)嗎?Windows在啟用一個磁盤的時候,它的磁盤驅(qū)動程序會首先檢查這個磁盤ID。如果發(fā)現(xiàn)和現(xiàn)有磁盤重復(fù),就會重新分配一個隨機ID給這個磁盤。

    0x1BE到0x1FD之間為4條分區(qū)表記錄。每條記錄16個字節(jié)。

    第一個分區(qū)的標(biāo)志位為0x80,所以是活動分區(qū)。MBR代碼會讀入這個分區(qū)的第一個扇區(qū),并繼續(xù)引導(dǎo)過程。上圖中每個分區(qū)的類型都為0x07,即NTFS文件系統(tǒng)的分區(qū)。當(dāng)前基于BIOS的引導(dǎo)方式有兩種磁盤尋址方法:CHS和LBA。CHS即柱面(Cylinder)、磁頭(Head)和扇區(qū)(Sector),聽起來與磁盤結(jié)構(gòu)強相關(guān),但也是所有硬件都支持的方法;LAB即Logical Block Addressing,從0開始按扇區(qū)數(shù)量定位磁盤上的數(shù)據(jù)塊。應(yīng)該說現(xiàn)在的硬件也都支持LBA了,但10多年前生產(chǎn)的設(shè)備就不一定了。

    最后兩個字節(jié)即為引導(dǎo)扇區(qū)標(biāo)志位了。

    PBR本身在內(nèi)存0x7C00的位置,512字節(jié)長。而它把后續(xù)15個扇區(qū)讀入到0x7E00的位置,相當(dāng)于在內(nèi)存中是緊接著PBR存放的。其實,后續(xù)15個扇區(qū)中的代碼需要引用PBR代碼中定義的函數(shù)。這樣的布局也便于代碼調(diào)用。

    以上是PBR在磁盤上的數(shù)據(jù)。以下的介紹將以0x100000作為基址。

    開頭3個字節(jié)是一條跳轉(zhuǎn)指令。跳轉(zhuǎn)到0x54繼續(xù)執(zhí)行。也就是說0x54后面都是代碼了(或者錯誤信息字符串),除了最后兩個字節(jié)為引導(dǎo)標(biāo)志位。從Windows 7到Windows 10,這部分代碼總體上變化不大。

    從0x03到0x53之間的空間存儲了文件系統(tǒng)的重要信息。可以和Linux文件系統(tǒng)的super block相對應(yīng)。

    從0x03到0x0A之間的8個字節(jié)為文件系統(tǒng)的標(biāo)志字符串。這里是NTFS文件系統(tǒng)。沒有用完的空間用空格填充。NTFS視整個磁盤卷為固定長度數(shù)據(jù)塊組成的數(shù)組。這個“固定長度數(shù)據(jù)塊”被稱為cluster。

    NTFS將cluster作為磁盤的最小訪問單位。Cluster的大小就記錄在0x0D的位置。Cluster可以對應(yīng)為Linux文件系統(tǒng)中的block。

    MBR代碼在寄存器DL里存儲了當(dāng)前引導(dǎo)磁盤的驅(qū)動器號(一般為0x80)。PBR代碼把這一信息存儲在偏移0x0E(一個字節(jié))對應(yīng)的內(nèi)存位置,以供PBR后續(xù)代碼及Boot Area代碼使用。

    這里就不一一解釋后續(xù)的每個字段了。圖中特別給出了File Record Segment(MFT中每個文件記錄占用的字節(jié)數(shù))和Index Block(索引塊占用的字節(jié)數(shù))的計算方法。特別之處在于如何處理當(dāng)這些字段為負(fù)數(shù)的情況。

    這里我們把PBR之后的15個扇區(qū)稱之為引導(dǎo)區(qū)域。它基本上都是代碼(或錯誤信息字符串,預(yù)留變量空間)。

    這部分代碼在Windows 8的時候做了增強,就是為了支持Windows To Go。Windows To Go就是將整個Windows操作系統(tǒng)安裝在U盤上。然后你就可以把這個U盤插在任何一個電腦上,并讓電腦運行U盤中的操作系統(tǒng)。如果電腦的硬盤上已經(jīng)安裝了Windows 7操作系統(tǒng),那你需要修改BIOS中的啟動順序設(shè)置,以讓電腦從U盤啟動。如果是Windows 8或之后的操作系統(tǒng),你可以運行一個命令行“pwlanucher /enable”,然后重啟系統(tǒng),電腦就會自動從U盤啟動了(原理如上文描述)。其實準(zhǔn)確地說,這個命令行只是讓電腦從第二塊可啟動盤上啟動(即使這第二個盤不是U盤,電腦也會從它啟動)。

    引導(dǎo)區(qū)域的代碼很短,但卻可以讀取NTFS文件系統(tǒng)中的文件。這一方面是代碼寫的精煉,另一方面,NTFS的設(shè)計也使得讀取操作可以很簡單。這一節(jié)我們快速了解一下NTFS最基本的結(jié)構(gòu)。注意:上圖為示意圖,并非與NTFS內(nèi)部數(shù)據(jù)結(jié)構(gòu)一一對應(yīng)。

    NTFS的核心叫做Master File Table(MFT),即主文件表。這是一個由固定長度(一般為1KB)記錄組成的數(shù)組。它在磁盤卷上的位置,以及每個記錄的長度都保存的啟動扇區(qū)(PBR)里。文件系統(tǒng)中的每個文件(包括元數(shù)據(jù)文件,目錄和普通文件)都會在MFT中至少對應(yīng)一條記錄(如果文件屬性很多,則會有多條記錄)。MFT的前幾條記錄固定對應(yīng)一些重要的元數(shù)據(jù)文件。例如,第一條記錄描述的就是MFT自身(在NTFS中,任何數(shù)據(jù)都屬于一個文件,這包括MFT自身,乃至啟動扇區(qū)。不存在不屬于任何文件的數(shù)據(jù)塊。)。描述根目錄的記錄也在其中(NTFS根目錄的名字是一個英文句點。為了看得清楚,上圖中用$Root替代了。),它在MFT中的記錄編號固定為5(記錄號從0開始)。

    每條MFT記錄有固定的開始標(biāo)志“FILE”和結(jié)束標(biāo)志0xFFFFFFFF。他們之間的數(shù)據(jù)即為該記錄的實際內(nèi)容。文件的各種信息是以不同的屬性來分類描述的。例如:標(biāo)準(zhǔn)信息屬性(類型0x10)里包含了文件的各種時間戳和權(quán)限。當(dāng)然我們最關(guān)心的是文件名字和數(shù)據(jù)的位置,它們被分別記錄在類型為0x30和0x80(目錄為0xA0)的屬性里。與文件名字一同記錄的還有該文件的父目錄的MFT號。

    如圖所示,對于一個文件,如果它的數(shù)據(jù)足夠少,就直接把數(shù)據(jù)存儲在MFT記錄剩余的空間里。否則,MFT記錄的屬性里會包含一個結(jié)構(gòu)數(shù)組指明數(shù)據(jù)在磁盤卷上的位置。數(shù)組中的每個結(jié)構(gòu)體描述了文件數(shù)據(jù)的一個連續(xù)的部分。結(jié)構(gòu)體的第一個成員是開始VCN(Virtual Cluster Number,以cluster塊為單位,在文件內(nèi)部的偏移);第二個成員是開始LCN(Logical Cluster Number,以cluster塊為單位,在磁盤卷上的偏移);第三個成員為當(dāng)前結(jié)構(gòu)體所描述的連續(xù)cluster的數(shù)量。其實這只是為了便于說明原理的示意圖。為了節(jié)省空間,NTFS在實踐中采取下面的結(jié)構(gòu):

    {

    size; //一個字節(jié),無符號整數(shù),決定后續(xù)兩個成員的長度

    cluster_count; //cluster的數(shù)量,無符號整數(shù),長度由size的低4位決定

    relative_lcn; //相對于前一個LCN的位置,有符號整數(shù),長度由size的高4位決定

    }

    當(dāng)此結(jié)構(gòu)體是數(shù)組中第一個元素的時候,relative_lcn的值為文件系統(tǒng)的LCN;而當(dāng)其為后續(xù)元素時,relative_lcn的值為相對于前一個元素所指明的LCN的相對位置。負(fù)數(shù)向前偏移,正數(shù)向后偏移。

    目錄可以被認(rèn)為是包含一系列文件和子目錄名字列表的文件,只是它的內(nèi)容是以B樹結(jié)構(gòu)來存儲的。這是為了能夠在目錄中快速查找文件。B樹的每個節(jié)點會保存多條目錄索引塊。每個目錄索引塊描述了一個文件或子目錄。每個目錄索引塊中當(dāng)然得有文件名,還有就是該文件的MFT號(用于找到這個文件在MFT中的記錄)。此外還有文件大小和時間戳等信息,這是便于在目錄瀏覽時,能快速列出文件的最基本信息(但這顯然給文件的寫操作帶來了麻煩)。

    了解了以上信息,你可能已經(jīng)想到如何在文件系統(tǒng)中找到根目錄下的BootMgr文件了。一個最簡單的方法:枚舉MFT中的所有記錄,直到找到一個文件名為BootMgr,并且父目錄MFT號為5的記錄。在運氣比較差的時候,這個方法的效率會比較低,可能需要枚舉所有的文件和目錄才能找到BootMgr。

    看起來,通過解析根目錄的內(nèi)容來獲得BootMgr在MFT中的位置并不是必須的。但Windows的代碼實現(xiàn)似乎還是解析了根目錄(筆者沒有完整分析這部分匯編代碼)。

    現(xiàn)在終于到了C語言寫的程序了(此前的程序都是用匯編語言直接寫的)。

    BootMgr存在于系統(tǒng)保留分區(qū)的根目錄。無論最終操作系統(tǒng)是32位的還是64位的,它都是由以下幾部分組成:16位實模式代碼(startup.com),16字節(jié)頭信息(包括:壓縮算法簽名BMCI或BMXH,壓縮前后數(shù)據(jù)的長度,壓縮數(shù)據(jù)的偏移),8KB的PE格式的資源數(shù)據(jù),經(jīng)過壓縮的32位PE格式的bootmgr.exe代碼。

    Startup.com中的代碼會解壓bootmgr.exe并驗證其數(shù)據(jù)完整性。

    BootMgr具備對NTFS文件系統(tǒng)的解析功能。所以它可以從磁盤卷上讀取文件。為了提高系統(tǒng)的易用性,BootMgr會記錄系統(tǒng)引導(dǎo)的每個階段的結(jié)果,以便在下次引導(dǎo)時可以對上次引導(dǎo)遇到的問題自動進行處理(例如進入修復(fù)模式)。這意味著它還需要能夠?qū)懳募R酪粋€文件系統(tǒng)最復(fù)雜的部分就是對寫操作的支持。為了簡化實現(xiàn),\Boot\bootstat.dat是一個空間預(yù)分配文件。BootMgr可以先得到這個文件在磁盤卷上所占用的數(shù)據(jù)塊列表,然后按塊直接寫磁盤卷。

    bootstat.dat文件大小為固定64KB。文件開頭為16字節(jié)的文件頭信息,記錄了文件的版本和有效數(shù)據(jù)長度等信息。其后是引導(dǎo)事件記錄。每條記錄由記錄頭(包含時間、記錄長度和錯誤代碼等信息)和記錄數(shù)據(jù)組成。BootMgr階段可能出現(xiàn)的錯誤包括無法載入系統(tǒng)引導(dǎo)程序、無法載入BCD文件、以及BCD配置錯誤等。

    在WinDbg里,你可能會發(fā)現(xiàn)WinLoad被載入到內(nèi)存的地址似乎是固定的。實際上并非如此。BootMgr有一套內(nèi)存管理函數(shù)。需要用到內(nèi)存的地方會先分配,再使用,不用了就釋放。WinLoad鏡像所占用的內(nèi)存也是如此。在WinLoad被載入前,已經(jīng)有很多內(nèi)存分配和釋放的調(diào)用。如果把釋放函數(shù)的代碼在內(nèi)存中修改為空函數(shù),就可以發(fā)現(xiàn)WinLoad被載入的地址明顯后移。這說明WinLoad被載入內(nèi)存的地址并非是固定的。

    一個操作系統(tǒng)可以有很多方法確保數(shù)據(jù)安全,但前提是操作系統(tǒng)自身的代碼沒有被修改過。為此,從BootMgr開始,每個模塊都會對其載入的可執(zhí)行程序做數(shù)字簽名驗證。BootMgr內(nèi)置了根公鑰,用于驗證后續(xù)載入模塊(如WinLoad.exe)的數(shù)字簽名。但BootMgr只能自己驗證自己。這顯然是一個“雞生蛋,蛋生雞”的問題。從這個角度看,當(dāng)沒有諸如TPM或UEFI Secure Boot等外部支持的情況下,BootMgr是整個Windows操作系統(tǒng)的安全薄弱環(huán)節(jié)。

    BCD文件同時為BootMgr、WinLoad和Windows內(nèi)核提供配置參數(shù)。它告訴BootMgr系統(tǒng)引導(dǎo)程序(WinLoad.exe)的位置;告訴WinLoad應(yīng)該使用哪一個內(nèi)核程序;而WinLoad則會把BCD文件中配置的內(nèi)核參數(shù)傳遞給內(nèi)核。BCD文件中可以保存多組配置信息。

    從BootMgr開始,我們可以用WinDbg調(diào)試引導(dǎo)過程。微軟為BootMgr和WinLoad提供了函數(shù)符號。這對了解引導(dǎo)過程的一些細(xì)節(jié)會很有幫助。使BootMgr以及后續(xù)的WinLoad和Windows內(nèi)核進入調(diào)試模式的參數(shù)也是記錄在BCD文件中。(關(guān)于調(diào)試引導(dǎo)過程的細(xì)節(jié)會在后面的“高級話題”中介紹)

    這里特別關(guān)注了系統(tǒng)磁盤和系統(tǒng)引導(dǎo)程序的路徑是如何被記錄的。左邊黑窗口是bcdedit輸出的內(nèi)容。這里描述的系統(tǒng)磁盤是經(jīng)過bcdedit翻譯之后的結(jié)果。內(nèi)部存儲情況要看右邊注冊表中的內(nèi)容。我們可以看出,Windows在這個階段是通過Disk ID來識別磁盤,通過相對磁盤開始位置的偏移來識別卷。

    到此終于要單獨介紹一下BitLocker了。前面幾乎每一節(jié)都有BitLocker的身影。

    對于一臺計算機來講,衡量其安全性需要考察兩個階段:在操作系統(tǒng)正常運行之后,可以由操作系統(tǒng)的安全策略(如賬戶登錄,權(quán)限控制等)和文件級別的加密來確保用戶數(shù)據(jù)的安全;而在操作系統(tǒng)正常運行之前,就需要像類似于BitLocker這樣的功能。它的重要功能之一就是確保操作系統(tǒng)本身是安全的(未被篡改),否則后續(xù)的安全的價值都會大打折扣。BitLocker可以用于加密操作系統(tǒng)所在的磁盤卷,也可以用于加密數(shù)據(jù)磁盤卷。

    BitLocker用FVEK加密數(shù)據(jù),再用VMK加密FVEK。這樣的策略是為了便于更換秘鑰。當(dāng)有更換秘鑰的需求時,只需要更換VMK,而FVEK可以保持不變。要知道FVEK的變化意味著需要解密然后重新加密整個磁盤卷,難免要花很長時間。

    BitLocker可以利用TPM來提高安全性。引導(dǎo)過程每個階段的代碼(或在固件里,或在磁盤上)都被計算了哈希值,并存于TPM的PCR寄存器里。這些哈希值與TPM內(nèi)部的秘鑰一起被用于解密VMK:只有它們和加密VMK時的值相一致時,才有可能解密成功。這可以阻止引導(dǎo)的早期階段的安全攻擊(在MBR等匯編語言階段植入惡意程序)。這也意味著硬盤與計算機主板之間的綁定:即使把硬盤拔下來,再插到其他機器上,也是無法解密的。其實,這種方法甚至意味著你對BIOS設(shè)置做一點改動,都會導(dǎo)致無法解密。這個時候恢復(fù)秘鑰就派上用場了。

    BitLocker的最高安全策略是用TPM(what it is) + USB Key (what you have) + PIN(what you know)來保護VMK。當(dāng)然也可以只以一個口令來保護VMK。Windows缺省的安全策略并不允許在沒有TPM支持的情況下使用BitLocker保護系統(tǒng)所在的磁盤卷。如果你很想嘗試一下BitLocker但又沒有支持TPM的計算機,可以使用gpedit.msc修改如下安全策略,之后就可以使用口令來保護系統(tǒng)所在的磁盤卷了。

    BitLocker不僅可以用于本地硬盤卷的加密,還可以用于U盤的加密。

    WinLoad.exe一般位于C:\Windows\System32\WinLoad.exe。順便說一句,你在C:\Windows下看到的大多數(shù)文件(EXE, DLL, MUI等)都是到C:\Windows\winsxs里對應(yīng)文件的硬連接。也就是說這些文件本身被安裝在C:\Windows\winsxs目錄下。Windows用這種方法來解決可執(zhí)行程序不同模塊之間版本的匹配問題。進一步的細(xì)節(jié)可以在網(wǎng)上搜索一下。

    系統(tǒng)注冊表文件在引導(dǎo)過程中扮演著非常重要的角色。除了少數(shù)一些文件是WinLoad根據(jù)內(nèi)置列表載入之外,其他大部分文件都是根據(jù)注冊表的配置載入的。

    Windows的注冊表不僅從外觀上看像是文件系統(tǒng)(通過regedit.exe瀏覽),其內(nèi)部結(jié)構(gòu)也像是一個文件系統(tǒng)。它把全部空間按4KB分塊管理,就像是文件系統(tǒng)的“cluster”。這也是它分配空間的最小單元。文件開頭的4KB叫base block,記錄了全局重要信息(以字符串“regf”為簽名標(biāo)記),就像是文件系統(tǒng)的引導(dǎo)扇區(qū)。一個或多個4KB組成一個bin,就像是文件系統(tǒng)的“run”或“extent”。Bin可以被認(rèn)為是cell的容器。它的開頭為32字節(jié)的頭部信息(以字符串“hbin”為簽名標(biāo)記),緊隨其后就是一個或多個cell。一個cell包括4字節(jié)的長度信息和變長的數(shù)據(jù)信息。Cell用于存儲單個key,或value,或注冊表中的其他對象。當(dāng)然,用了一段時間之后,注冊表文件也會像文件系統(tǒng)那樣出現(xiàn)碎片。

    除BCD外,Windows系統(tǒng)的注冊表文件都存在于C:\Windows\System32\config目錄下。如果你開啟了“顯示隱藏文件”功能,你會發(fā)現(xiàn)每個注冊表文件都伴隨有多個日志文件。這些日志文件用于確保注冊表更新后保持?jǐn)?shù)據(jù)一致性。Windows每隔5秒鐘將內(nèi)存中對注冊表的修改刷新到日志文件,然后再將日志的內(nèi)容刷新的注冊表文件中。如果在刷新注冊表文件過程中出現(xiàn)系統(tǒng)故障,可以在系統(tǒng)重啟后根據(jù)日志文件從頭再次刷新。

    WinLoad實際上會載入兩個注冊表文件: SYSTEM 和 ELAM(從Windows 8開始)。前者用于保存系統(tǒng)配置,后者是那些需要早期載入的反病毒驅(qū)動程序的配置(早期載入以監(jiān)控引導(dǎo)型驅(qū)動程序)。WinLoad會將這兩個注冊表文件整個讀入內(nèi)存(所以他們的大小是有限制的)。然后,如果需要的話,根據(jù)日志重新刷新內(nèi)存中的注冊表(WinLoad是不會寫注冊表的)。

    Ntoskrnl.exe即是Windows內(nèi)核程序。HAL.dll名字的含義為Hardware Abstraction Layer,是內(nèi)核用于跟硬件交互的函數(shù)庫。每種硬件平臺會有自己的HAL.dll。CI.dll用于代碼完整性校驗;PSSHED.dll是一個與硬件錯誤報告相關(guān)的動態(tài)庫;BootVID.dll用于支持VGA顯示模式。還有其他一些文件,這里沒有都列出來。

    WinLoad會驗證它載入的程序的數(shù)字簽名。它會將每個程序的簽名和存在于硬盤上的catalog文件(C:\Windows\System32\catroot目錄下)中的標(biāo)準(zhǔn)簽名進行對比。如果比較失敗,就停止引導(dǎo),打印錯誤信息以及出問題的文件的名字。為了確保catalog文件沒有被修改過,WinLoad還需要驗證catalog文件的數(shù)字簽名。而用于驗證的公鑰證書就內(nèi)置在WinLoad文件內(nèi)部。WinLoad自身的數(shù)字簽名可以被BootMgr驗證,所以不用擔(dān)心有人修改WinLoad的代碼繞過這些驗證。

    bootstat.dat文件在這里再次出現(xiàn),只是這次它是在C:\Windows目錄下。這個文件會被WinLoad、內(nèi)核以及第一個用戶態(tài)程序smss.exe共享使用。它的作用是讓W(xué)inLoad了解上次引導(dǎo)(或關(guān)機)的情況,以決定是否顯示對應(yīng)的選項(系統(tǒng)修復(fù)、安全模式等)。它的格式和BootMgr的那個bootstat.dat文件基本相同,只是在64KB的前面加了一段長度為0x800字節(jié)的數(shù)據(jù)。所以它的大小固定為66KB。目前還不清楚這額外0x800字節(jié)的用途。

    注:本文只代表作者個人觀點,與任何組織機構(gòu)無關(guān),如有錯誤和不足之處歡迎在留言中批評指正。進一步交流技術(shù),可以加我的QQ/微信:490834312。如果您想在這個公眾號上分享自己的技術(shù)干貨,也歡迎聯(lián)系我:)

    尊重知識,轉(zhuǎn)載時請保留全文。感謝您的閱讀和支持!《企業(yè)存儲技術(shù)》微信公眾號:huangliang_storage

    原文鏈接:http://mp.weixin.qq.com/s?__biz=MzAwODExNjI3NA==&mid=2649775489&idx=1&sn=d8f460a7273255cd27e4778c6dacf6fa&chksm=83773cdcb400b5ca368a9e4c3e8510273fe906dce8d72e7c4e9da475f25bd5ba54507f5fdf8d#rd

    當(dāng)你在電腦上找不到文件的時候,自然而然會想到搜索功能,但如果你只是簡單的在搜索框里輸入關(guān)鍵字查找,可能等到花兒都謝了,結(jié)果并沒有找到你想要的文件。

    可能有的小伙伴還不知道,其實搜索有些高級選項可以幫助我們更快速準(zhǔn)確的查找文件;如果我們文件名都記不起了,我們借助一些第三方工具,甚至可以通過文件內(nèi)容中的關(guān)鍵字來查找。

    1. 使用 Windows 資源管理器搜索功能

    如果你知道所需文件可能所在的文件夾,速度會更快。在Windows 資源管理器,導(dǎo)航到要搜索的文件夾,然后在右上角的字段中輸入搜索詞,Windows 11中會出現(xiàn)“搜索選項”。

    Windows 10中,點確認(rèn)開始搜索后,會顯示“搜索”選項卡。

    你可以使用其中的選項縮小搜索范圍。例如:你大致記得文件最近修改的時間,你可以選擇修改日期的時間段;還可以設(shè)置文件類型和文件大小范圍。這樣就大大加快了搜索速度。

    2. 使用工具Everything快速搜索

    在 Windows 下,搜索索引的更新通常會延遲,這就是為什么搜索最近創(chuàng)建的文件通常不顯示任何結(jié)果的原因。相比之下,Everything提供跨所有硬盤驅(qū)動器的實時搜索,并且速度非常快。

    因為Everything不會創(chuàng)建全文索引,而是使用 NTFS 文件系統(tǒng)的主文件表 (MFT), 包含文件和文件夾名稱以及在目錄樹中它們的元素名稱。Everything用這些信息來創(chuàng)建一個具有完整路徑名的小型數(shù)據(jù)庫,所在第一次啟動時只需要很短的時間就可以創(chuàng)建完成。然后,它會監(jiān)視文件系統(tǒng)的更改并立即更新其數(shù)據(jù)庫。所以Everything 只能搜索文件和文件夾名稱,而不能搜索文件內(nèi)容。

    Everything在“搜索”菜單中提供了幾個選項。搜索可以限制文件類型,例如“文檔”或“圖像”。你還可以創(chuàng)建自己的搜索過濾器。

    通過“數(shù)據(jù)庫> NTFS 驅(qū)動器”下的“附加”>“設(shè)置”,可以將單個驅(qū)動器排除在數(shù)據(jù)庫中。

    如果未勾選“自動從數(shù)據(jù)庫中刪除脫機驅(qū)動器”,則 Everything 會永久保存外部硬盤驅(qū)動器中的文件和文件夾名稱。即使驅(qū)動器當(dāng)前未連接,你也可以在其上找到文件。

    3. 使用DocFetcher快速地搜索文件內(nèi)容

    如果你甚至忘記了文件名,只記得一些文件內(nèi)容,就可以使用DocFetcher。

    首先需要創(chuàng)建一個搜索索引。右鍵單擊“搜索區(qū)域”下的空白字段,然后轉(zhuǎn)到上下文菜單中的從文件夾創(chuàng)建索引。選擇要搜索的文件夾后,單擊“確定”開始索引。你可以通過這種方式在搜索區(qū)域中包含多個文件夾。

    DocFetcher適用于搜索Microsoft Office,PDF,RTF,HTML,純文本,以及MP3和JPG,包括任何注釋標(biāo)簽。但分析僅限于文本信息,無法查詢圖像的 Exif 標(biāo)簽。

    當(dāng)DocFetcher運行時,程序會自動檢測已更改或新的文件,并將它們添加到相應(yīng)文件夾的索引中。但是,你也可以隨時單擊搜索區(qū)域中條目的上下文菜單中的“刷新”。由于 DocFetcher 只考慮新的或更改的數(shù)據(jù),因此可以快速完成。

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有