[電子報封存 ^][<第 1 卷第 4 期] (英文)[第 2 卷第 1 期>] (英文)

Sysinternals 電子報第 1 卷第 5 期

http://www.sysinternals.com
版權所有 1999 Mark Russinovich


1999 年 10 月 12 日 - 本期內容:

  1. Sysinternals 最新動向

    • NTFS for Windows 98/NTFSDOS Professional
    • DebugView v3.21
    • Filemon 和 Regmon v4.21
    • Diskmon v1.1
    • www.microsoft.com 上的 Sysinternals
    • 10 月號「NT Internals」
    • 部分既有資料
  2. 內部消息

    • Win2K RC2 DDK 上市
    • 新的 Win2K RC 核心 API
    • 軟體開發 '99 East
    • 使用 DiskEdit
  3. 下期内容預告

    • Win2K API 暴增

贊助者:WINTERNALS SOFTWARE

Sysinternals 電子報由 Winternals Software 贊助,該公司的網址為 http://www.winternals.com. Winternals Software 是領先業界的開發商,提供諸多適用於 Windows NT/2K 的先進系統工具。 Winternals Software 產品包括適用於 Windows NT 4.0 的 FAT32、ERD Commander (適用於 Windows NT 的開機磁碟功能),以及 NTRecover。

Winternals Software 的遠端復原功能可讓您從企業中的任何位置,透過 TCP/IP 存取無法啟動電腦的磁碟機。 您可遠端修正讓 NT 或 Win9x 系統離線的驅動程式、檔案系統與設定問題,幫助您節省時間和金錢。 遠端復原是功能多樣的災害復原工具,您甚至可以用其執行遠端 chkdsk 或磁碟分割作業。 您可以前往 http://www.sysinternals.com/rrecover.htm 下載免費的唯讀試用版,或前往 http://www.winternals.com. 購買讀取/寫入版

大家好,

歡迎閱讀 Sysinternals 電子報, 本電子報目前有 10,000 名訂閱者。

Windows 2000 (Win2K) 版本似乎再次不免俗地落入急於推出又遭推遲的模式, 最近又有人說該版本會於二月上市。 謠傳是 Win2K 上市日期的唯一資訊來源,因為甚至是對 OEM 或合作夥伴,Microsoft 也沒透露相關資訊。 他們只說:「準備好就會上市」,但絕不會把日期說死。

Microsoft 讓人討厭的一點在於,他們每次放出產品消息時,總讓人以為產品很快就要上市,但有時根本八字都還沒一撇。 Windows 98 的後續產品 Millennium 就是最近的案例。 之前 Microsoft 才在媒體上大力宣傳,好像這款產品已經完成,隨時都能將家中所有用品轉換成智慧裝置。 諷刺的是,不久就有文章指出 Microsoft 根本連產品的雛型都還沒產出,至少還要再過一年甚至更久,產品才有可能上市。

這是 Microsoft 的慣用伎倆,我也不是第一個談及此事的人, 但我仍樂於推測在這槓桿拉鋸之中,多少是縝密規劃的計策,多少又是欠缺軟體工程原則的結果。 有一部分的人 (例如陰謀論者) 表示,Microsoft 會透過巧妙手法引導競爭走勢,用話術描述自家產品的優點來誘導客戶,讓他們認為只要再等一下,就能獲得物超所值的頂尖產品,無須妥協於 Microsoft 以外的任何選項。 另有一部分的人認為,Microsoft 就是無法掌握軟體開發程序;他們一再低估工程需要的時間,並高估測試版程式碼的能耐。

我仍處於觀望階段,不確定哪一方論述比較值得支持。 老實說,我認為上述二者都是 Microsoft 模式的肇因。 這種手法已經讓 Microsoft 兩年來成功說服大眾,讓大家以為 Active Directory 即將上市。 當然,要是早知道 Win2K 上市需要這麼長的時間,有些客戶可能早就投向 Novell Directory Services 的懷抱了。 但在另一方面,由於老是宣布產品即將推出而後不斷延遲,Microsoft 也在媒體上受到抨擊。 也許 Microsoft 的管理高層就是不知道重現、隔離並修復最後那 5% 錯誤到底有多困難。

說到 Microsoft 的開發手法,他們產品上市前的命名策略也很令人費解。 他們口中的 Beta 測試版其實是 Alpha 預覽版,候選版本實際上則是 Beta 測試版。 就連運用這些定義也是一項拖延戰術:Microsoft 老是喜歡在不同的候選版本之間增減功能, NT 4.0 是如此,現在 Win2K 他們又故技重施, 而這麼做當然只會拖慢發行週期。

那麼,到底 Win2K 會不會在二月上市? 我想漫長的等待應該總算是迎來一絲曙光了, 畢竟 RC2 中的全新 API 也就那麼幾個。

在上次電子報中,我談到 Microsoft 的縮寫令人混淆,而讀者 George Janczuk 也發現了另一個例子。 在標題為「Extending to the Mainframe Transaction-Processing World」一節中 (全文網址:http://msdn.microsoft.com/library/backgrnd/html/msdn_windnapps.htm),CISC 是指「複雜指令集運算」。 但熟悉大型主機應用程式的人都知道,這裡要用的縮寫應該是 CICS,意思是「客戶資訊控制系統」。 不過是字母順序顛倒而已,指稱的技術領域卻天差地遠。

老樣子,請把這期電子報分享給可能會讀出樂趣的朋友。

感謝您!

-Mark

Sysinternals 最新動向

NTFS for Windows 98/NTFSDOS Professional

我們終於做到了。 自從 Bryce 和我在 1996 年春天推出 NTFSDOS 1.0 後,我們就一直在尋找能與 Windows 檔案系統相容的最佳拍檔,也就是能從 Windows 9x 和 DOS 讀取/寫入 NTFS 的權限。 我們很久以前就確定,針對 NTFS 格式採用反向工程並為這個複雜的日誌檔案系統撰寫驅動程式,會是困難且風險極高的課題。 即使有人能準確定義格式中每項差異,只要格式進行更新 (例如 Win2K 的 NTFS v5.0),就需要重新進行反向工程與開發作業。 不僅如此,NTFS 格式的檔案系統驅動程式非常複雜,光是想到要驗證其正確性,就令人頭皮發麻。

因此我們決定偷吃步。

NTFS for Windows 98 提供從 Windows 95 或 Windows 98 到 NTFS 磁碟機的完整讀取/寫入權限,NTFSDOS Professional 則提供來自 DOS 的完整 NTFS 讀取/寫入權限。 NTFS for Windows 98 和 NTFSDOS Professional 都沒有 NTFS 檔案系統格式的相關知識。 反之,這些程式依賴 Windows NT 或 Windows 2000 安裝的 NTFS 驅動程式實作該項知識。 這兩個公用程式都使用相同的程式碼基底,能充當 NTFS 檔案系統驅動程式的環境包裝函式。 NTFS for Windows 98 提供 NTFS 上的 Windows 9x 檔案系統 API 介面,以及 NTFS 下的 Windows 9x 磁碟服務。 呈現給 NTFS 的 NTFS for Windows 98 介面看起來與 NTFS 的原生 Windows NT/2K 環境類似,其中包含 IRP、I/O 管理員、快取管理員、NT 樣式磁碟裝置,以及與 NTFS 互動的其他 NT/2K 子系統。

NTFSDOS Professional 的運作方式與 NTFS for Windows 98 相同,不過提供的是 NTFS 到 DOS 服務上的介面,以及 BIOS Interrupt 13 磁碟下的服務。 為了協助建立類似 NT/2K 的環境,我們依賴 NTOSKRNL 內部的許多功能,也就是 NT/2K 核心檔案。 這兩個公用程式會搭配 NTFS 載入 NTOSKRNL,讓 NTFS 直接使用核心的原生服務。

組建 NTFS 環境的過程太過有趣,我們甚至更進一步,在 NT 的開機時間 chkdsk 公用程式 Autochk 上也比照辦理。 NTFSDOS Professional 和 NTFS for Windows 98 隨附名為 NTFSCHK 的 NTFS chkdsk 公用程式。 NTFSCHK 在與 NTFS 檔案系統包裝函式相同的主體上運作,會為 Autochk 程式建立類似 NT 的環境,讓 Autochk 在 Windows 95/98 和 DOS 下執行。 這麼做的結果,就是獲得 Windows 95/98 和 DOS 的完整 NTFS 讀取/寫入支援。

您可以前往 http://www.sysinternals.com/ntfs98.htm 下載免費的唯讀版本 NTFS for Windows 98,並前往 http://www.sysinternalscom/ntfspro.htm. 下載免費的唯讀版本 NTFSDOS Professional 您也可以前往 Winternals Software (http://www.winternals.com.) 購買這兩種工具的完整讀取/寫入版本

DebugView v3.21

DebugView 是一款偵錯輸出監視器,可擷取 Windows 95、Windows 98、NT 4.0 和 Windows 2000 下的核心和 Win32 偵錯輸出。 其具備進階篩選、醒目提示和記錄功能,甚至可從整個網路的系統中擷取偵錯輸出。 其最新版本 3.21 推出在 Windows 95 和 Windows 98 下監視 16 位元 OutputDebugString 輸出的功能。

您可前往 http://www.sysinternals.com/dbgview.htm. 下載 DebugView v3.21

Filemon 和 Regmon v4.21

Filemon 和 Regmon 是 Windows 95、98、NT 4.0 和 Win2K 的檔案系統和登錄間諜公用程式。 這些程式繼續使用新的可用性功能以及 4.21 版進行發展 (Filemon 和 Regmon 已同步版本編號),推出更為進階的篩選與最近篩選清單、定義醒目提示篩選功能 (甚至可自訂色彩)、可自訂字型、剪貼簿支援,以及更多 CUI 相容快速鍵。 驅動程式原始程式碼也經過重新編制,並在 GUI 介面函式中包含更強固的參數驗證。

請前往 http://www.sysinternals.com/filemon.htm 下載 Filemon v4.21,並前往 http://www.sysinternals.com/regmon.htm. 下載 Regmon v4.21

Diskmon v1.1

Diskmon 是一款用以監視和顯示邏輯與實體磁碟活動的工具。 Diskmon 的 1.1 版更新可與 Windows 2000 搭配使用,同時推出新的可用性增強功能。 不僅如此,更新版 Diskmon 也可解譯大量磁碟和大型存放裝置 I/O 控制項代碼,將其十六進位程式碼轉譯為 Diskmon 輸出視窗中的文字標記法。

Diskmon v1.1 不僅可充當磁碟監視器,還具備軟體型磁碟燈功能。 設定為磁碟燈模式時,Diskmon 會最小化至系統匣中;具備磁碟讀取權時,燈會顯示綠色,具備磁碟寫入權時則顯示紅色。

請至 http://www.sysinternals.com/diskmon.htm. 下載 Diskmon v1.1

www.microsoft.com 上的 Sysinternals

考慮到 Sysinternals (先前稱為 NT Internals) 的歷史,Microsoft 將 sysinternals.com 推薦為客戶資源的確令人欣喜。 提到 Sysinternals 公用程式的 Microsoft 知識庫文章越來越多, 以下是幾篇最新文章:

  • Q183060 INFO:80004005和其他錯誤訊息的疑難解答指南 http://support.microsoft.com/support/kb/articles/Q183/0/60.ASP
    本文說明您可以使用 Filemon 檢查 OLE DB、ActiveX Data Objects 和 Remote Data Service 中的資料存取錯誤原因。

  • Q196453 - 針對 NTVDM 和 WOW 啟動錯誤進行疑難排解http://support.microsoft.com/support/kb/articles/Q196/4/53.ASP
    本文也表示可用 Filemon 工具判斷哪些遺漏檔案造成 NTVDM (NT 中的 Win16/DOS 相容性環境) 啟動錯誤。

  • Q216368 - PRB:使用檔案時應用程式設定期間的存取違規http://support.microsoft.com/support/kb/articles/Q216/3/68.ASP
    文中建議使用 HandleEx 和 DLLView 工具,判斷 Visual Basic 安裝精靈和部署精靈執行安裝程式期間發生錯誤的原因。

  • Q232830 - HOWTO:判斷檔案控制代碼所有權http://support.microsoft.com/support/kb/articles/Q232/8/30.ASP
    本文探討如何找出開啟檔案或目錄的程序,並再次推薦使用 HandleEx。

10 月號「NT Internals」

我在 10 月號 Windows NT 雜誌中的「NT Internals」專欄,標題為<Inside Win2K Reliability Enhancements,第 3 部分>。 這個三集中的最後一集描述兩項強大的 Win2K 功能,可協助開發人員和系統管理員找出容易出錯的驅動程式,也就是具有防寫保護的核心記憶體和驅動程式驗證器。

俄羅斯讀者現在可以用母語閱讀我的文章。 請前往俄文版 Windows NT 雜誌 (http://www.osp.ru/win2000/),查看第一個經過翻譯的 NT Internals 專欄<Inside the Boot Process>(http://www.osp.ru/win2000/1999/10/59.htm). 謝謝 Ivan Rouzanov 告訴我這件事。

從 8 月初開始,Windows NT 雜誌文章的線上版本僅開放給訂閱者存取,且文章會隨每期新雜誌於線上發佈。 如果您尚未訂閱,請透過訂閱連結 (http://www.sysinternals.com/publ.htm) 取得 Sysinternals 訂閱折扣。

部分既有資料

WinObj 是探索 Windows NT/2K 物件命名空間的強大工具。 物件命名空間是 NT/2K 中三個命名空間之一,這三個命名空間包括物件命名空間、登錄命名空間和檔案系統命名空間。 您可以透過物件命名空間中的物件前往登錄和檔案系統命名空間。 例如,Win32 程式開啟登錄機碼 HKEY_LOCAL_MACHINE\Software\Microsoft 時,ADVAPI32.DLL 程式庫會在呼叫核心服務 NtCreateKey 前將名稱轉換成 \Registry\Machine\Software\Microsoft。 如果您在 WinObj 中查看物件命名空間的根目錄,則會看到名為登錄的「key」類型物件。 登錄名稱符合機碼名稱的第一個元件,因此 NT/2K 物件管理員會將名稱的剩餘部分 \Machine\Software\Microsoft 傳遞給定義機碼物件的子系統。 Configuration Manager 核心子系統會維護登錄和機碼物件,使其剖析剩餘名稱來找出所需機碼。

您可以使用 WinObj 探索物件命名空間,以及檢視或設定物件安全性屬性。 請前往 http://www.sysinternals.com/winobj.htm. 下載 Winobj 我曾於 1997 年 10 月的 NT Internals 專欄<Inside the Object Manager>內探討過物件管理員命名空間和 WinObj。 遵循數據行在線版本的連結 http://www.sysinternals.com/publ.htm.

內部消息

Win2K RC2 DDK 上市

現在您可以透過以下網址下載 Microsoft 裝置驅動程式開發工具組 (DDK) 的 Win2K RC2 版本:http://www.microsoft.com/ddk/ddkRC2.htm. 您可以免費下載工具組,或於線上瀏覽文件。

新的 Win2K RC2 核心 API

最新 Win2K 核心的狀況似乎比之前穩定不少。 RC3 只有四個新匯出的核心 API,相較之下,從 Beta 3 進展到 RC1 共推出了十幾個 API (且另有 6、7 個消失)。 新函式中有些相當令人玩味,因此我決定做個記錄。 首先是 MmGetSystemRoutineAddress。雖然未獲記載,其原型仍包含在 RC2 DDK 的 ntddk.h 標頭檔中,如下所示:

NTKERNELAPI
PVOID
MmGetSystemRoutineAddress (
    IN PUNICODE_STRING SystemRoutineName
    );

其用法正如字面一樣簡單。 只要傳入位於 NTOSKRNL.EXE 或 HAL.DLL 的函式名稱,就能獲得進入點位址。 在 Win2K 的第一個版本中,此函式本來沒有作用,但之後卻可能變得非常實用。其實 Microsoft 早該在第一版 NT (3.1) 中納入這項函式。 此函式可讓驅動程式動態確認 API 可用性,跟 GetProcAddress 在 Win32 應用程式使用者空間中的功用一致。 如果 Microsoft 將新的 API 新增至 Win2K Service Pack (我相信他們會這麼做),則可寫入驅動程式以利用 API,但也可能在舊版 Win2K 上正常失敗,或者無法在不使用 API 的模式中執行。 驅動程式若要執行此動作,則需能於載入之後檢查 API 是否存在。 若無法檢查,則驅動程式必須以靜態方式連結使用的函式;假使驅動程式載入時沒有函式,則核心載入器會向使用者回報嚴重錯誤,系統也無法載入驅動程式。

第二個新的 API 是 MmGetPhysicalMemoryPages。 其原型同樣位於 RC2 ntddk.h 中,且也未獲記載。 其原型如下所示:

NTKERNELAPI
PPHYSICAL_MEMORY_RANGE
MmGetPhysicalMemoryRanges (
    VOID
    );

其中 PHYSICAL_MEMORY_RANGE 為:

typedef struct _PHYSICAL_MEMORY_RANGE {
    PHYSICAL_ADDRESS BaseAddress;
    LARGE_INTEGER NumberOfBytes;
} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;

此函式會傳回 PHYSICAL_MEMORY_RANGE 項目的陣列,其結尾則為 BaseAddressNumberOfBytes 皆為 0 的項目。 跟 MmGetSystemRoutineAddress 一樣,這是相當單純的 API, 會傳回 Win2K 知道的所有實體記憶體描述。 Win2K 支援使用 MmAddPhysicalMemoryMmRemovePhysicalMemory API 即時新增和移除記憶體。 這會刺激 API 的存在原因,供您查詢記憶體範圍。 MmAddPhysicalMemory 新增於 RC1,MmRemovePhysicalMemory 則新增於 RC2。 這兩個函式都在 ntddk.h 中建立原型。

還有其他新的 RC2 API 嗎? PoShutdownBugCheckRtlInvertRangeListPoShutdownBugCheck 可讓系統當機並執行電源相關動作,例如擱置電源。 RC2 核心中有多個位置使用這項 API。 其範圍為使用者定義的一般開始/結束規格,由許多核心 API 支援來管理、排序並重複處理。 Win2K 隨插即用資源仲裁者會用這些 API 追蹤及組織硬體資源需求。 即使範圍清單 API 未獲記載,所有原型及結構定義仍會包含在 ntddk.h 中,因此您可預設使用這些 API 管理自己的開始/結束導向資料。

我會在之後的電子報中深入探討更多未獲記載的 API,敬請期待!

軟體開發 99 EAST

1999 年東岸版的軟體開發將於 11 月 8 到 12 日在華盛頓特區舉行。 我會在最後一天主持三場座談:適用於開發人員的 Windows 2000 最新功能、Windows NT/2000 藍色畫面詳解,以及 Windows NT/2000 網路詳解。 除此之外,《Inside Windows NT》第 2 版作者兼我的好鄰居 Dave Solomon 會和我一起主持 Windows NT/2K 內部圓桌會。Dave 也住在康乃狄克州丹伯里,而且好巧不巧距離我家才短短 20 分鐘車程。 我們會一起回答與 Windows NT/2K 內部程式有關的棘手問題。 只要來找我並說出電子報通關密語,您就能獲得免費的 Sysinternals T 恤!

造訪軟體發展網站:http://www.sdexpo.com.

使用 DiskEdit

您可能不知道,但 Windows NT 有一款磁碟編輯器公用程式,且形式為極具紀念價值的 DOS 版 Norton Disk Edit。 更棒的是,這項公用程式可解讀 FAT 和 NTFS,而且完全免費。 顯然 Microsoft 意外推出了 DiskEdit,因為這項工具本來是 Windows NT 4.0 Service Pack 4 CD 中,供他們自家檔案系統團隊使用的內部偵錯工具。 DiskEdit 的特殊介面通常需要特別學習才會使用,但我會直接在此簡單說明。 我會著重使用 DiskEdit 解讀 NTFS 檔案系統格式,因為就我所知,DiskEdit 是唯一公開可用的 NTFS 解讀工具。

首先請從 Service Pack 4 (SP4) CD-ROM 取得 DiskEdit。 只要將之從 \i386 目錄複製到硬碟即可。 如果您想在 Win2K 下使用 DiskEdit,則必須為其建立私人目錄,並將下列 DLL 從 SP4 winnt\system32 目錄 (或 SP4 CD) 複製到與 DiskEdit 相同的目錄,例如 IFSUTIL.DLL、ULIB.DLL、UNTFS.DLL 和 UFAT.DLL。 現在您可以啟動 DiskEdit。

針對此處的逐步說明,請在 NTFS 磁碟機的根目錄中建立名為 TEMP 的目錄,並在命令提示字元視窗中輸入下列命令,將 TEMP 設為目前目錄 echo hello > out.txt,並在該目錄中建立名為 OUT.TXT 的檔案。 選擇 [檔案 | 開啟功能表] 項目以在 DiskEdit 中選取具有新 OUT.TXT 檔案的磁碟機,然後在出現對話方塊的 [磁碟區名稱] 欄位中輸入磁碟機字母。 請務必將冒號一併輸入,例如「d:」。 幾乎所有的 DiskEdit 功能都需要您開啟磁碟機。

我們會從 NTFS 磁碟機的根目錄開始尋找 OUT.TXT 檔案。 選取功能表項目 [讀取 | NTFS 檔案記錄] 開啟對話方塊,只要輸入編號就能檢視任何 MFT 記錄項目。 每個 NTFS 磁碟機的前 16 個 MFT 記錄項目都會保留,並對應至預先定義的 NTFS 中繼資料檔案。 編號代表的意義如下所示 (請注意,DiskEdit 會將所有輸入解譯為十六進位數):

        0: $MFT - MFT
        1: $MFTMirr - MFT Mirror (a copy of the first 4 entries of the MFT)
        2: $LogFile - NTFS LogFile
        3: $Volume - volume information file
        4: $AttrDef - the attribute definition file
        5: . - the root directory
        6: $Bitmap - the volume allocation bitmap file
        7: $Boot - the boot sector
        8: $BadClus - the bad cluster database file
        9: $Secure - new to SP4, the security attribute database
        A: $UpCase - the lower-to-upper case mapping file
        B: $Extend - new to Win2K, the directory that contains
                             the reparse, object ID, and quota metadata files
        C-F: Unused as of NTFS v5.0 (Win2K)

請仔細觀察其中幾個 MFT 項目, 您會發現一個共通點,這些項目都包含 $INDEX_ROOT$FILE_NAME$DATA 之類的屬性。 這些屬性指出檔案專屬資料的儲存位置。 如果屬性資料很小,NTFS 會以「常駐」資料的方式,將資料儲存在檔案的 MFT 記錄中;如果資料很大,則 NTFS 會將資料以「非常駐」資料的方式儲存於磁碟機上叢集記錄之外。

現在為檔案編號輸入「5」,畫面會顯示根目錄檔案。 我們會檢視目錄的 $INDEX_ALLOCATION 屬性來查看根目錄中的檔案和目錄,該屬性為記錄目錄內容之目錄特有的屬性。 為此,請您選取 [讀取 | NTFS 屬性] 功能表項目,系統會開啟另一個對話方塊。 DiskEdit 會區分大小寫,因此請準確輸入以下列出的內容:

        Base Frs Number: 5

Base Frs (基底檔案記錄區段) 是 MFT 編號的別稱。 您已輸入 5 來指定要從根目錄讀取的屬性。

        Attribute Type: $INDEX_ALLOCATION

這樣一來,DiskEdit 就知道您想讀取目錄的內容資料。 建議您使用下拉式功能表選擇想要的屬性,因為 DiskEdit 有專門的屬性類型輸入方式。

        Attribute Name: $I30

只要檢視根目錄的 $INDEX_ALLOCATION 屬性,就會發現「$I30」在「Type code, name」行中標註為其名,因此請將該名稱輸入為屬性名稱。

按下 [確定] 就會看到屬性內容的十六進位傾印。 我們想看到更具體的內容,因此請選取 [檢視 | NTFS 索引緩衝區] 功能表項目, 系統會隨即顯示目錄內容的清單。 捲動清單,直到看到名稱為「TEMP」的項目。 如果沒有看到,該項目可能位於根目錄的 $INDEX_ROOT 屬性中;該屬性類型也與目錄相關聯,且其值一向儲存於 MFT 記錄中。 索引根項目加上配置項目,就會形成儲存目錄所有項目的 B+ 樹狀結構。 如果您需要檢視 $INDEX_ROOT 屬性,請遵循與檢視 $INDEX_ALLOCATION 屬性相同的步驟來檢視該屬性。 捲動索引緩衝區時,您可能會看到雙行星號;這些星號會指定一個索引緩衝區的結尾和下一個索引緩衝區的開頭。

找到 TEMP 目錄項目之後,請記下其檔案參考 (FRS)。 選取 [讀取 | NTFS 檔案記錄] 並輸入 TEMP 的 FRS, 畫面會隨即顯示 TEMP 目錄的 MFT 記錄。 我們想找到 OUT.TXT 檔案,因此必須查看 TEMP 的內容來尋找。 請檢視 TEMP 目錄的 $INDEX_ALLOCATION$INDEX_ROOT 屬性,切換至以 NTFS 索引緩衝區檢視資料,並找出 OUT.TXT 檔案。 記得在屬性選取對話方塊中輸入 TEMP 的 FRS 做為基底 FRS 編號。 如果您才剛建立 TEMP,則只會有一個 $INDEX_ROOT。假使您輸入錯誤,則會幸運地看到 DiskEdit 的空白錯誤對話方塊。

找到 OUT.TXT 並指定 FRS 使用 [讀取 | NTFS 檔案記錄] 來查看 MFT 項目。 向下捲動,直到找到 $DATA 屬性, 這就是 OUT.TXT 資料的位置。 由於我們建立的檔案不大,因此資料儲存在 MFT 記錄中。 如果您嘗試使用 DiskEdit 檢視 OUT.TXT 的 $DATA 屬性,則不會看到任何內容,因為 DiskEdit 不會正確顯示常駐資料 (這是 DiskEdit 諸多錯誤的其中之一)。 請將較大 (> 2 KB) 的文字檔複製到 \TEMP\ OUT.TXT, 接著便可以使用下列兩種方式之一檢視 OUT.TXT 資料:您可以使用 [讀取 | NTFS 叢集] 檢查資料開頭 (如果資料連續儲存在磁碟上,則可檢查所有資料),並指定您在 OUT.TXT $DATA 屬性「Extent List」中看到的第一個「lcn」值。或者,您也可使用 [讀取 | NTFS 屬性] 並輸入「$DATA」作為屬性類型,然後將屬性名稱留空 (不要在該欄中輸入任何內容)。

範圍清單會說明屬性非常駐資料的位置。 每個長度最多 16 個叢集的連續資料區塊,都會由一個範圍清單項目說明。 範圍清單項目會指定虛擬叢集編號 (vcn)、邏輯叢集編號 (lcn) 以及執行長度。 Vcn 是檔案內的叢集,其中資料由項目開頭所描述。 Lcn 會指定資料儲存在磁碟上的邏輯叢集,runlength 則是該位置的屬性資料位元組數目 (請記住,DiskEdit 會顯示十六進位值)。

現在我已示範過如何掃描目錄內容,逐步帶您了解如何尋找 OUT.TXT 檔案的 MFT 記錄。 不過其實還有更快的方法:只要選取 [破解 | NTFS 路徑] 並輸入 TEMP\OUT.TXT 即可。 畫面會隨即顯示 OUT.TXT 的 FRS,您可用 [讀取 | NTFS 檔案記錄] 直接前往。

以上就是 DiskEdit 入門的所有內容。 鼓勵您瀏覽 FAT 或 NTFS 磁碟機,多方試用這項靈活的工具。 雖然您應該不太有機會利用 DiskEdit 修改資料來為磁碟機除錯,但假使您對 NTFS 磁碟上的格式感興趣 (FAT 格式的記載相當詳細),則 DiskEdit 會是完美的研究工具。

下期内容預告

Win2K API 暴增

雖然 RC2 中只有 4 個新的匯出核心模式 API,但 Microsoft 自 NT 4.0 以來推出的 API 總數 (包括核心和核心 Win32 DLL 內的 API) 已經大幅暴增。 下個月我會說說究竟有幾個新的 API 及其出現的場所。遺憾的是,對於那些深信 Win2K 只是虛有其表的朋友,下一期的報導可能會讓他們悔不當初喔。


感謝您閱讀 Sysinternals 電子報。

發佈時間:1999 年 10 月 20 日星期三下午 7:10,發佈者:ottoh

[電子報封存 ^][<第 1 卷第 4 期] (英文)[第 2 卷第 1 期>] (英文)