共用方式為


[電子報封存 ^][ Volume 2, Number 4] [<Volume 3, Number 1 >]

Sysinternals 電子報第 2 卷,第 5 期

www.sysinternals.com
Copyright (c) 2000 Mark Russinovich


2000 年 11 月 30 日 - 在此問題中:

  1. 社論

  2. SYSINTERNALS 的新功能

    • PsLoggedOn v1.2
    • PsShutdown v1.0
    • PsTools v1.1
    • BgInfo v1.1
    • Tokenmon v1.0
    • Filemon v4.32
    • Regmon v4.32
    • 在 Windows 2000 中,第 3 版。
    • 11 月和冬季 Windows 2000 雜誌
    • Microsoft 的 Sysinternals
    • Sysinternals 授權
  3. 內部資訊

    • NFI
    • 隱藏的 Win9x 登錄機碼
  4. 下期内容預告

    • 新的 Whistler 系統通話

贊助者:WINTERNALS SOFTWARE

Sysinternals 電子報由 Winternals Software 贊助,該公司的網址為 www.winternals.com。 Winternals Software 是一家領先的開發公司,提供了諸多適用於 Windows NT/2K 的先進系統工具。 Winternals Software 產品包括 FAT32 for Windows NT 4.0、NTFSDOS Professional Edition (適用於 DOS 的讀取/寫入 NTFS 驅動程式) 以及 Remote Recover。

netstat 命令隨附所有版本的 Windows 9x 和 Windows NT/2000,會顯示系統上開啟的 TCP/IP 連接埠,但不會顯示哪些進程已開啟連接埠。 TcpView Pro,Winternals 的最新監視工具,不僅隨附 netstat-對等命令列工具 Tcpvstat,其中顯示哪個處理程序已開啟每個連接埠,但包含一個 GUI,其中顯示相同的資訊加上 TCP/IP 活動的即時追蹤。 即時追蹤會顯示應用程式進行網路存取、具有選擇性 DNS 名稱解析的存取本機和遠端 IP 位址、存取類型、存取成功,以及傳輸的資料量。 TCPView Pro 只有 $69。 今天在 www.winternals.com/products/monitoringtools/tcpviewpro.shtml 下載 TCPView Pro 14 天完整功能試用版。

大家好,

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

從 Windows NT 移至 Windows 2000 的權益之一是大幅提升可靠性。 我已經撰寫了數篇文章中改進的原因,主要是稱為「驅動程式驗證器」的工具結果。 您可以在 [開始] 功能表的 [執行] 對話方塊中輸入 "verifier" 來設定 [驗證器],以密切監看特定設備磁碟機的執行,尋找違反數個驅動程式程式設計規則的任何一項。 不過,驗證器比被動監視更進一步,這也加劇了潛力:例如,錯誤狀況會配置與無效區域交叉處理的驅動程式記憶體區塊,並將傳遞至驅動程式的資料結構中特定欄位設為零。 如果您真的想要變得困難,您可以讓驗證器模擬驅動程式的記憶體不足狀況。

Microsoft 會透過其驅動程式簽署計畫來利用驗證器,這需要 Microsoft 以數位方式簽署的任何驅動程式,才能通過嚴格的驅動程式驗證器測試。 當驅動程式安裝時,硬體精靈會檢查驅動程式是否已簽署。 如果不是,則視您在 [驅動程式簽署選項] 對話方塊中輸入的設定而定,它會警告您或無法安裝驅動程式,您可以從 [控制台] 中 [系統小程式] 的 [硬體] 頁面存取。

預設驅動程式簽署原則警告終端使用者未簽署驅動程式的事實足以讓大部分硬體廠商陷入讓驅動程式健全並簽署這些驅動程式的麻煩。 不過,裝置驅動程式可以偷偷溜到您的系統,但驅動程式簽署原則無法偵測到。 只有使用 INF 檔案安裝的驅動程式 (以 .inf 副檔名結尾的驅動程式安裝檔案) 會檢查是否有簽署。 安裝程式應用程式可以直接使用安裝程式 API,或手動設定驅動程式的登錄設定,手動安裝驅動程式。 Sysinternals 應用程式是此範例的絕佳範例:Filemon、Regmon 和其他具有驅動程式元件的 Sysinternals 工具會手動安裝其驅動程式,這是因為您不會收到警告,它們並未由 Microsoft 簽署。

未與 INF 檔案一起安裝的驅動程式包括病毒掃描器、加密軟體和 CD-ROM 燒錄軟體。 不過,這並不排除硬體相關驅動程式的漏洞。 適用於 Windows 2000 的 Sysinternals Ctrl2cap 驅動程式 (www.sysinternals.com/ctrl2cap.htm 是硬體相關驅動程式的範例,該驅動程式會以略過驅動程式簽署檢查的方式進行安裝。 此漏洞會導致系統上沒有經過驗證的驅動程式存在,這可能會危害系統穩定性 (我確認最高設定上的所有 Sysinternals 驅動程式)。 Microsoft 應該強制所有驅動程式,而不只是使用 INF 檔案安裝的驅動程式,進行簽署檢查。

為什麼我對此咆哮? 我的 CD-ROM 燒錄軟體,這是市場上最受歡迎的軟體類型,有驅動程式將重現讓我的 Windows 2000 SP1 系統當機。 如果我將驅動程式驗證器設定為檢查它,系統甚至不會在驗證程式偵測到驅動程式第一次違規並損毀系統之前完成開機。 驅動程式在沒有 INF 檔案的情況下安裝,所以我沒有警告它未簽署。 我保證,如果 Microsoft 的原則更嚴格,此廠商會在運送未簽署 (和 Buggy) 驅動程式之前再三考慮。

請將電子報轉發給您認為可能對其內容感興趣的朋友。

感謝您!

-標記

SYSINTERNALS 的新功能

PSLOGGEDON V1.2

除了從 LoggedOn 到 PsLoggedOn 的明顯名稱變更,這個命令列工具能夠向您顯示誰在本機登入,以及透過本機或遠端系統上的資源分享,具有一些新功能。 第一個是使用者意見反應所產生的 ‘-l’ 命令列參數。 許多人會使用 PsLoggedOn 來查看是否有任何帳戶在本機登入其伺服器。 例如,可能有使用者透過檔案共用登入,但在決定何時可以更新帳戶或遠端管理伺服器時,這並不相關。

PsLoggedOn 的第二項新功能不僅會顯示登入者,還顯示登入的時間。 PsLoggedOn 會在使用 WIN32 API NetSessionEnum 時,從資源分享取得免費登入的登入時間,以列舉資源分享登入 (命令列 Net 命令也會使用 NetSessionEnum 列舉工作階段)。 不過,沒有 WIN32 API 會告訴您誰是在本機登入系統,更別說他們登入的時間。

若要判斷誰在本機登入系統,PsLoggedOn 會列舉位於電腦 HKEY_USERS 登錄機碼下的安全性識別碼 (SID)。 當有人在本機登入電腦時,無論是在主控台或透過服務,其設定檔會載入至 HKEY_USERS 金鑰中。 應用程式可以透過 HKEY_CURRENT_USER 機碼存取其設定檔的登錄設定,因為系統會將該金鑰視為其特定設定檔在 HKEY_USERS 下的符號連結。 因此,PsLoggedOn 可以藉由將電腦的 HKEY_USERS 金鑰中找到的 SID 轉譯為對應的使用者名稱,來了解誰在本機登入。 當您指示 PsLoggedOn 列出登入遠端系統的使用者時,會使用 RegConnectKey 連線到遠端電腦的登錄。

找出使用者登入的時間可以使用類似的技巧。 當 WinLogon 處理程序在登入後將使用者設定檔載入至 HKEY_USERS,WinLogon 會在其設定檔中建立動態的 (未儲存至磁碟上的設定檔) 子機碼,適當地稱為 Volatile Environment。 登錄會儲存登錄機碼的上次修改時間戳記,而且因為系統不會在建立後修改 Volatile Environment 子機碼,因此 PsLoggedOn 可以藉由取得 Volatile Environment 子機碼的時間戳記來判斷使用者何時登入。

下載 PsLoggedOn v1.2,完整來源位於
www.sysinternals.com/psloggedon.htm.

PSSHUTDOWN V1.0

如果您曾經需要關閉或重新開機本機或遠端 Windows NT/2000 系統,則您會想要下載 PsShutdown。 PsShutdown 是關機 Windows NT/2000 資源套件工具的複製品。 它採用相同的命令列引數,可讓您指定關機前的延遲、是否要重新開機、顯示給目前登入系統之任何使用者的選擇性訊息,以及要關機或重新開機的電腦名稱。

在 www.sysinternals.com/psshutdn.htm 下載 PsShutdown v1.0。

PSTOOLS V1.1

您可能已經注意到 Sysinternals 中以前置詞 "Ps" 開頭的工具數量不斷增加。 第一個是 PsList,這是命令列工具,列出本機或遠端 Windows NT/2000 系統上作用中處理程序的相關資訊。 我提供 PsList 其名稱,因為標準 UNIX 命令列處理程序資訊工具名為 "ps"。 取得前置詞的下一個工具是 PsKill,這是一個命令列公用程式,可讓您終止在本機或遠端 Windows NT/2000 系統上執行的處理程序。 我給了 PsKill "Ps" 前置詞,因為它成為 PsList 的完美附屬。

經過一段時間,我開發了其他工具,這些工具與 PsList 和 PsKill 具有相同的定義特性:它們是以命令列為基礎,可在本機或遠端 Windows NT/2000 系統上運作。 例如,ElogList 可讓您傾印系統事件記錄檔的內容,而 GetSid 會顯示電腦或特定帳戶的 SID。 最近,我決定將所有這些工具系結在一起,方法是提供所有 "Ps" 前置詞,並將它們下載為名為 PsTools 的單一套件。

PsTools 包含 PsList、PsKill,以及重新命名的 PsLogList 和 PsGetSid,總共包含七個工具。 如果您看到具有 "Ps" 前置詞的 Sysinternals 工具,則會自動知道它是在本機和遠端運作的命令列工具。

在 www.sysinternals.com/pstools.htm 下載 PsTools v1.1。

BGINFO V1.1

由於使用者意見反應巨大,Bryce 已更新 BgInfo,該公用程式會將桌面桌布設定設為顯示系統設定的可自訂資訊,因為已獲得使用者意見反應。 預設情況下,BgInfo 會先倒數 10 秒,再套用其對話方塊中指定的設定,但新的命令列選項 /timer 可讓您完全變更或消除倒數。 這可讓您更輕鬆地在登入指令碼中包含 BgInfo,或做為設定檔的啟動資料夾中的捷徑。

1.1 版包含其他新功能,例如顯示您定義的任意文字,以及更多預先定義的資訊類別。 BgInfo v1.1 所建立的桌面點陣圖一般也較小,可將 BgInfo 的桌面記憶體使用量降至最低。

在 www.sysinternals.com/bginfo.htm 下載 BgInfo v1.1。

TOKENMON V1.0

Tokenmon 是您可以從 Sysinternals 下載的各種監視工具套件的最新成員。 Tokenmon 與 Regmon 和 Filemon 等同類產品共用相同的 UI,可監視 Windows NT/2000 系統上的重要安全性相關活動。 到底什麼是「重大」安全性相關活動? Windows NT/2000 安全性的核心是權杖物件,這是包含帳戶 SID、群組 SID 和權限的資料結構。 每當處理程序嘗試存取受保護的物件時,安全性參考監視器會使用其權杖中的 SID 做為存取驗證的一部分。 如果處理程序嘗試執行受限制的作業,例如重新開機系統,系統會檢查處理程序權杖中的適當權限。

Windows NT/2000 安全性模型的強大 (且已取得專利) 功能之一是模擬。 模擬可讓執行緒暫時覆寫其程序型身分識別,並透過使用模擬權杖來採用替代身分識別。 伺服器應用程式在代表用戶端存取資源時利用模擬,即在存取期間採用用戶端的身分識別。

Tokenmon 會以與 Regmon 針對登錄 API 執行的相同方式安裝系統呼叫攔截,以監視權杖的建立和刪除、啟用和停用權限,以及模擬。 Tokenmon 也會使用 NT/2000 核心所提供的處理程序建立攔截來監視程式的建立和刪除,以及其他 API 來判斷使用者何時登入和登出。

Tokenmon 的完整原始程式碼已經公佈,而且值得討論程式碼所示範的一些有趣技術。 Tokenmon 會攔截 NtCreateToken 系統呼叫來偵測登入事件,這是 WinLogon 等登入代理人用來為新登入工作階段的第一個處理程序所建立的初始權杖。 第一個處理程序所建立的處理程序會繼承第一個權杖的複本。 若要偵測登出,Tokenmon 會透過核心模式 SeRegisterLogonSessionTerminatedRoutine 函式註冊登出通知,這是一種 API,適用於檔案系統驅動程式的權益,稱為網路重新導向器,可快取登入工作階段資料,並在使用者登出時想要清除。 網路重新導向器會實作檔案共用用戶端/伺服器連線的用戶端。

另一個有趣的 Tokenmon 實作詳細資料是 Tokenmon 攔截其監視 API 的方式。 Tokenmon 攔截的某些 API 不會匯出以供裝置驅動程式使用,而是在使用者模式 NTDLL.DLL 程式庫中匯出,以供使用其 Win32 對等項目的應用程式使用。 Regmon 攔截的所有登錄 API 都會以核心模式匯出,使得 Regmon 裝置驅動程式可以取得其系統呼叫號碼,並適當地連結系統呼叫資料表。 對於未匯出供驅動程式使用的 API,Tokenmon GUI 必須使用 NTDLL.DLL 中的匯出來取得呼叫號碼,然後將號碼傳遞至驅動程式,讓驅動程式可以連結系統呼叫資料表。 因此,Tokenmon 示範如何攔截未在核心模式中匯出的系統呼叫。

在 www.sysinternals.com/tokenmon.htm 下載具有完整來源的 Tokenmon v1.0。

FILEMON V4.32

這個最新的 Filemon 更新引進了更直覺且完整的篩選、顯示 Windows 9x/Me 網路檔案存取的完整 UNC 路徑名稱,以及顯示 NTFS 中繼資料檔案名稱。

舊版的 Filemon 需要您輸入具有強制萬用字元的篩選條件。 例如,如果您想要監視磁碟機 C: 上 Temp 目錄的存取權,則必須輸入如下的篩選條件: "c:\temp\*"。 使用新的篩選語法萬用字元是選擇性的,因此雖然範例篩選條件可以運作,但 "c:\temp" 會達到相同的效果。 此外,Filemon 現在會針對顯示中的所有欄位套用您輸入的篩選條件,包括處理程序名稱、要求類型、路徑和「其他」資料行。 這種彈性可讓您監看特定類型的要求,或在其他資料行中具有特定資料的要求,這是先前不可能的。

Windows 9x/Me 系統上 Filemon 的使用者現在會在存取遠端資源時,看到 Filemon 顯示路徑名稱與完整 UNC 語法。 Filemon 先前未顯示這類存取的伺服器或共用名稱,導致路徑名稱不完整。

最後,如果您在 Windows NT/2000 上使用 Filemon,您無疑會在路徑資料行中看到許多存取的文字 "DASD" ("DASD" 來自「直接存取儲存空間裝置」,這是 Microsoft 用來描述略過檔案系統結構的磁碟區存取的詞彙)。 對於 NTFS 磁碟區的大部分活動,DASD 現在已成為過去。 相反地,您會看到正在讀取和寫入的 NTFS 中繼資料檔案名稱。 例如,MFT 記錄的更新之前會導致 DASD 輸出行,但現在您將會看到它成為 MFT 內部中繼資料檔案名稱 "$Mft" 的存取權。

為什麼 Filemon 之前不會顯示中繼資料檔案名稱,以及它現在如何取得這些名稱? 代表 NTFS 中繼資料檔案的檔案物件不會儲存檔案名稱,因此 Filemon 無法從檔案物件擷取名稱。 Filemon 取得檔案名稱的替代方法,查詢檔案系統驅動程式,不適用於 NTFS 中繼資料檔案。 雖然 NTFS 會以中繼資料檔案的名稱回應,但 NT 4 上的 NTFS 會隨機造成當機,而 Win2k 上的 NTFS 偶爾會在回應這類查詢時停止回應。

因此,Filemon 必須求助於取得中繼資料檔案名稱的訣竅。 當它看到指向 NTFS 磁碟區上檔案物件的要求時,沒有名稱,它會傳送 NTFS 查詢檔案的索引。 這是 Win32 函式 GetFileInformationByHandle 傳回的相同索引,而對於 NTFS 磁碟區上的檔案,索引是檔案的 MFT 索引。 MFT 中的前 16 個項目會保留給特定中繼資料檔案,因此在指定該範圍內的索引時,Filemon 只會在自己的資料表中查閱中繼資料檔案名稱。

不幸的是,由於檔案配置資料表 (FAT) 不會儲存目錄中繼資料檔案或 FAT 的名稱,因此您仍然會在 FAT 磁碟區上看到目錄中繼資料和 FAT 的 DASD。 您會驚訝於存取 NTFS 記錄檔 ($LogFile) 的頻率。 順便說一句,Whistler 上的 NTFS 會儲存中繼資料檔案的名稱,因此在惠斯勒上不需要這個技巧。

最終的 Filemon 增強功能可讓 Filemon 以毫秒解析顯示當日時間戳記。 這項支援需要 Windows 9x/Me Filemon 驅動程式中的醜陋駭客攻擊,因為 Windows 9x/Me 核心計時函式中有錯誤。 如需詳細資訊,請參閱原始程式碼。

在 www.sysinternals.com/filemon.htm 下載 Filemon v4.32 與原始程式碼。

REGMON V4.32

Regmon 的變更與 Filemon 不同,但是 Regmon 現在支援與 Filemon 相同的更直覺式篩選語法,例如 Filemon,會將篩選條件套用至所有欄位。 它也可以顯示時間戳記的毫秒解析。

那些已經開始使用 Whistler (Windows 2000 的後續版本) Beta 1 的人可能已經注意到,Regmon 的早期版本在啟動時會導致 Whistler 當機。 這是因為 Microsoft 已將系統呼叫資料表放在受寫入保護的記憶體中,Regmon 會對其進行修改以插入攔截。 Regmon v4.32 透過使用一種技術來解決這個問題,我沒有應 Microsoft 的要求提供原始程式碼,因為該技術可能會在 Whistler 的最終版本中中斷,而 Microsoft 正在探索支援系統呼叫攔截的方法。 Windows NT 的設計不是為了支援系統呼叫攔截,這是我們於 1996 年在 Regmon 中首次發行時開創的。

以下是未記載的 Filemon/Regmon 提示。 我經常收到電子郵件,詢問如何在 Windows NT/2000 上從非系統管理帳戶執行 Regmon 或 Filemon。當特定應用程式從系統管理員帳戶執行時運作正常,但無法從非特殊許可權的使用者執行,其中 Regmon 和 Filemon 對於判斷應用程式失敗的原因很有用 (其通常是與檔案或登錄機碼上的安全性設定相關的問題)。 不過,從非特殊權限帳戶執行 Regmon 和 Filemon 將會失敗,因為 Filemon 和 Regmon 都安裝裝置驅動程式,這需要系統管理員權限。

不過,有一個訣竅可讓您解決這個問題:如果您以系統管理員身分登入並啟動 Filemon 或 Regmon,您之後就能夠從非特殊權限的帳戶執行它們。 這是因為 Filemon 和 Regmon 會在第一次執行時安裝驅動程式,並在下列執行中存取已載入的驅動程式。 由於我未在驅動程式中實作任何安全性,因此在載入驅動程式之後,不具特殊權限的使用者就可以執行工具。 安全性問題? 是的,但 Filemon 和 Regmon 的目的是要針對工具進行疑難排解,因此我,以及詢問如何從非特殊權限帳戶執行公用程式的人員,將此視為功能。

在 www.sysinternals.com/regmon.htm 下載具有完整原始程式碼的 Regmon v4.32。

DEBUGVIEW V4.02

令人驚訝的是我收到最多使用者意見反應的應用程式之一是 DebugView。 這個新版本有一些顯著的增強功能,可解決我收到的許多特性和功能要求,並讓 DebugView 比以往更強大。

最明顯的是 DebugView 現在最多支援五個不同的醒目提示篩選條件,每個篩選條件都有自己的可自訂色彩。 這使您可以同時專注於偵錯輸出中的不同關鍵字並輕鬆區分它們。 此外,DebugView 會實作與 Filemon 和 Regmon 相同的新篩選語法,讓萬用字元成為子字串比對的選擇性項目。

我收到舊版 DebugView 的抱怨是,即使您只想擷取 Win32 偵錯輸出,您仍然需要執行 DebugView 的系統管理權限,因為 DebugView 若無法安裝其裝置驅動程式,則不會執行。 即使沒有特殊權限的帳戶,這個新版本也會執行。 如果無法安裝或存取其驅動程式,它只會停用其核心模式擷取相關功能表項目。

當您登入時,有兩項功能可讓 DebugView 在登入時自動開始擷取輸出,其最小化到匣選項和支援命令列參數。 使用命令列參數時,您可以在系統匣中啟動 DebugView,並將它擷取的輸出記錄到檔案,而啟動 DebugView 之後,您可以使用功能表選項來切換其最小化按鈕行為,以將一般最小化,以及最小化至系統匣。

針對在 Windows 2000 終端機服務上遠端工作階段中執行 DebugView 的使用者,DebugView 現在會擷取遠端工作階段中執行的應用程式所產生的 Win32 輸出,並選擇性地從主控台工作階段擷取。 這適用於從遠端偵錯 COM 伺服器和 Win32 服務,因為這些類型的程式會在主控台工作階段中執行。

最後,DebugView 現在可在 Whistler Beta 1 上運作,並支援在核心模式 DbgPrint 函式上擷取數個新的 Whistler 變體的輸出。

在 www.sysinternals.com/dbgview.htm 下載 DebugView v4.02。

在 Windows 2000 中,第 3 版。

Windows 2000 內部的官方書籍現已推出! 本版由 David Solomon (www.solsem.com) 和 Mark Russinovich 共同撰寫,比上一版多出 40% 以上,新增涵蓋網路、隨插即用、電源管理、服務、登錄、WMI、開機和關機,以及儲存空間。 它還包括一張 CD,其中包含一些其他地方沒有的強大工具,用於研究 Windows 2000 的內部結構。

我為這本書特別撰寫的工具之一是 LiveKd,這是一個程式,可讓您在即時系統上執行兩個 Microsoft 核心偵錯工具 i386kd 和 WinDbg,就像您正在查看損毀傾印一樣。 當使用 LiveKd 執行時,書籍中呈現的許多實驗都會在即時系統上工作。 LiveKd 的運作方式是安裝檔案系統篩選驅動程式,以將電腦的實體記憶體呈現給 Microsoft 偵錯工具,就像是損毀傾印檔案一樣。 LiveKd 會建立長度為 0 的虛擬傾印檔案,而且當偵錯工具從檔案讀取時,LiveKd 會從實體記憶體傳回資料。 請查看書籍的錯誤和更新頁面,以取得 LiveKd 修補程式,以更正 LiveKd v1.0 與數個存取病毒掃描器之間的不相容問題。

透過 www.sysinternals.com/insidew2k.htm 查看書籍的目錄和順序。

11 月和冬季 Windows 2000 雜誌

好奇 NTFS v4 和 NTFS v5 之間究竟有什麼變化? 如果是的話,請查看我在 Windows 2000 雜誌的 11 月和冬季版的兩部分系列。 第 1 部分說明重新分析點、目錄連接點、磁碟區掛接點、配額支援,以及合併的安全性設定。 第 2 部分最後會仔細探討加密、串流、分散式連結追蹤,以及變更日誌。 這兩篇文章都比其他文章更深入地介紹了這些新功能在磁碟上的變更和內部行為。

文章中沒有討論的一件事是 NTFS for Windows NT 4 不是真正版本

請造訪 www.sysinternals.com/publ.htm 以取得我們所有出版品的連結。

SYSINTERNALS AT WWW.MICROSOFT.COM

自上次通訊以來,Sysinternals 已出現在數篇新的 Microsoft 知識庫 (KB) 文章中,我也追蹤了一些參考 Sysinternals 的較舊 KB 文章。

  • Q260513 PRB:安裝 Visual Studio 產品時發生錯誤
    http://support.microsoft.com/support/kb/articles/Q260/5/13.ASP
    本文建議讀者使用 Filemon 和 Regmon 針對 Microsoft Visual Studio 安裝問題進行疑難排解。

  • Q202258 XADM:系統找不到指定的路徑 - 識別碼編號:0cx002003
    http://support.microsoft.com/support/kb/articles/Q202/2/58.ASP
    Microsoft 實際上會逐步引導使用者使用 Filemon 對 Exchange 5.0 Service Pack 升級問題進行疑難排解,並完成範例 Filemon 輸出行,以及設定篩選條件的建議。

  • Q269383 PRB:顯示 VB/VBA 參考時,出現「存取系統登錄時發生錯誤」 訊息
    http://support.microsoft.com/support/kb/articles/Q269/3/83.ASP
    Regmon 會從本文取得推薦,討論如何使用它來判斷為什麼 Visual Basic IDE 中的 [參考] 對話方塊在無法存取登錄機碼時,因為 Seagate Crystal Reports 中的 Bug 會將不正確的權限套用至數個機碼。

  • Q269251 BUG:列舉產品時,自動化 Windows Installer 可能會停止回應
    http://support.microsoft.com/support/kb/articles/q269/2/51.asp
    Regmon 在這裡再次突出顯示,它用於揭示 Windows Installer 自動化錯誤。

  • Q276525 當您監視開啟控制碼時,您的電腦可能會停止回應
    http://support.microsoft.com/support/kb/articles/Q276/5/25.asp
    NtHandle 負責在 Windows NT 4 SP6a 中顯示錯誤,其中核心會在使用 NtHandle 時在特定條件下停止回應。 Microsoft 已與我合作解決問題,並已發出 Hotfix。 如果您的 NT 4 系統在使用 NtHandle 時停止回應,您應該會遵循本文的連結。

  • Q160660 Ntregmon.exe 使用 New Service Pack 導致 STOP 0x0000001E
    http://support.microsoft.com/support/kb/articles/Q160/6/60.asp
    最後一個是老東西,但很好。 第一個版本的 Regmon 使用硬式編碼的系統呼叫號碼來填補系統服務資料表,以攔截登錄 API。 因為系統呼叫號碼有時會在 Service Pack 之間改變,所以這項技術相當脆弱,我並沒有在預期這一點時以防禦方式編碼 (針對安德魯·舒爾曼的建議,他害怕 Regmon 會中斷)。 果然,SP3 引進了一些新的系統呼叫,而 Regmon 會在系統攔截不正確的系統呼叫時當機。 雖然這確實惹惱了幾個人,但我確實從中得到了自己的 KB 文章!

SYSINTERNALS 授權

即使您從 Sysinternals 下載的軟體是免費的軟體,這表示您不需要支付費用即可使用它,但您不允許重新發佈它,或衍生您從 Sysinternals 原始程式碼發佈的產品。 例如,如果您在多個使用者發現特定 Sysinternals 工具有用的公司工作,您可能不會將工具張貼到內部共用或網站。 相反地,請將連結放在網站上,指向 Sysinternals 上每個工具的首頁。 這也有助於確保您的同事一律下載最新版本。

如果您想要在內部、商業產品或共用軟體 CD 上重新發佈 Sysinternals 工具,或想要以 Sysinternals 原始程式碼為基礎的商業產品或可重新發佈程式,請傳送電子郵件,說明您想要用來 licensing@ 的詳細資料。

內部資訊

NFI

在幾份電子報中,我透露了 DiskEdit 工具的存在,Microsoft 無意中在 NT 4 SP4 CD 上提供了該工具。 DiskEdit 是一個非常強大的 (雖然古怪的) 檔案系統結構檢視器,可用來檢查 NTFS 和 FAT (雖然這是 NTFS 支援,但很有趣) 磁碟上的資料結構。 不過,如果您錯過了 NT 4 SP 4 CD,而且有興趣探索磁碟上的 NTFS 結構,那麼您並不是完全一無所知。 Microsoft 已發行名為 NFI (NTFS Information) 的免費工具,可了解並傾印 NTFS 磁碟區的內部結構。 雖然它的輸出不像 DiskEdit 那樣詳細,但它很有趣且具有啟發性。

您可以在 http://support.microsoft.com/support/kb/articles/q253/0/66.asp. 下載 NFI 作為 OEM 支援工具的一部分 使用檔案名稱執行 NFI 會傾印該檔案的 NTFS MFT 記錄。 以下範例顯示 NFI 傾印 $Quota 中繼資料檔案的 MFT 記錄,該檔案只有在磁碟區上啟用配額管理時才存在:

C:\nfi c:\$extend\$quota
File 24
\$Extend\$Quota
$STANDARD_INFORMATION (resident)
$FILE_NAME (resident)
$INDEX_ROOT $O (resident)
$INDEX_ROOT $Q (resident)

輸出顯示檔案佔用 MFT 中的第 24 個項目 (其檔案索引為 24),而且它包含四個屬性,包括標準資訊、檔案名稱和兩個索引根目錄 (而 index 基本上是一份已整理的項目清單,例如目錄)。 我描述 NTFS 如何在 NTFS v5 的最新 Windows 2000 Magazine 系列中使用 $Quota 索引。

若要傾印磁碟區上的所有檔案,請在 NFI 的命令列上指定磁碟機代號,例如 nfi c:。 您會看到每個 MFT 項目的清單,包括所有中繼資料檔案。

NFI 還有一些其他的能力,例如將磁區號碼轉譯成它所在檔案的能力。 想知道磁碟機 C: 上的檔案磁區 2345 是什麼? 使用 nfi c: 2345 命令。 請注意,這在軟體 RAID 磁碟區上失敗,例如磁碟區集和等量集。 NFI 適用於 NT 4 和 Windows 2000。

隱藏的 WIN9X 登錄機碼

兩期前,我說過會在以下的電子報中報導「隱藏的 Win9x 登錄機碼」,你們中的一些人提醒我,我已經忘記了。 因此,本月我會告訴您 Windows 9x 中的隱藏登錄機碼。

幾年前,我發現在 Windows NT 中建立隱藏登錄機碼的方法。 藉由隱藏,我的意思是,雖然您可以看到使用 Regmon 建立金鑰的應用程式所存取的金鑰,但您無法撰寫 Win32 程式來查看金鑰的值,也無法查看具有 Regedit 或 Regedt32 登錄編輯器的機碼。 隱藏金鑰可用於儲存您不希望終端使用者能夠修改的資料,例如試用版產品的逾時日期。

製作隱藏登錄機碼的訣竅是,我意識到原生 NT API 是建置 WIN32 API 的系統呼叫介面,需要將登錄機碼指定為已計數的 Unicode 字串。 計數的 Unicode 字串是長度欄位所指出的字串,而不是 Null 結束字元的存在。 因此,您可以使用原生 API 來建立包含 Null 字元的登錄機碼,例如 "test\0test"。 由於 WIN32 API 的登錄機碼 API 是以 Null 結尾的字串為基礎,因此無法開啟使用 WIN32 API 包含 Null 結束字元的登錄機碼。 如果您嘗試將上述範例金鑰名稱傳遞給 RegOpenKeyRegCreateKey,它將被視為 "test",字串將在 Null 字元處截斷。 由於所有現有的登錄編輯器,包括與 Windows NT 和 Windows 2000 配套的編輯器,請使用 WIN32 API,這是使用原生 API 來建立 Null 字元內嵌名稱的應用程式,可有效地建立隱藏的機碼。

此方法適用於 Windows NT,但 Windows 9x 有何作用? 我認為在 Windows 9x 上建立隱藏登錄機碼的方法,直到有人以 Regmon 記錄檔傳送電子郵件給我,顯示 Internet Explorer (IE) 存取未出現在 Regedit 中的金鑰。 若要查看這一點,請啟動 Regmon 並設定如下 (包含篩選條件):"policydata"。 然後啟動 IE (這適用於所有版本的 IE 4 和 IE 5),並造訪網站。 如果您在 Regmon 中看不到任何輸出,請移至 IE 的選項組態對話方塊,並確定已啟用 Content Advisor。

如果已啟用 Content Advisor,或已在系統上啟用,您會看到 HKLM\PolicyDat 金鑰及其子機碼的存取權。 但是,當您在 Regedit 中查找時,您不會在 HKEY_LOCAL_MACHINE 下找到 PolicyData 金鑰。 花一分鐘的時間,看看您能弄清楚發生了什麼事。

答案是,IE 會使用 RegLoadKey WIN32 API 動態載入登錄區、讀取所需的值,然後使用 RegUnloadKey 卸載 Hive。 Hive 命名為 C:\Winows\System\Ratings.pol:檔案是隱藏且唯讀的,但您可以輸入 attrib –r –h c:\windows\system\ratings.pol 來顯示它。

您在 Regmon 中看到的追蹤會顯示 Content Advisor 在 Hive 中尋找的資訊。 如果您想要自行探索其內容,請從 www.sysinternals.com/regload.zip 下載我的 Regload 公用程式,並使用下列語法執行它:regload test c:\windows\system\ratings.pol。 然後開啟 Regedit 並瀏覽 HKLM\test。 您將找到的值與您在 Content Advisor 中指定的設定相對應,並且與組態單元中 Users\FileName0 值中命名的設定檔相關。 值通常指向 C:\Windows\System\RSACi.rat,這是網際網路內容評等關聯所定義的評等檔案。 順便說一句,您可能會在 Content Advisor 的登錄設定中看到一個有點幽默的名稱 "PleaseCom" 的值,例如在 HKLM\Test\Users\Default 下。 此值衍生自 [內容建議程式設定] 對話方塊的 [一般] 頁面上的 [監督員可以輸入密碼以允許使用者檢視受限制的內容] 核取方塊。

Microsoft 會模糊化這些登錄值是否存在的原因應該是顯而易見的。 然而,他們的設計存在相當嚴重的弱點。 請注意,當您啟用 Content Advisor 時,您必須指定可保護 Content Advisor 設定對話方塊的密碼。 此密碼會儲存在 HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Ratings\Key 中。 刪除該值,並預先設定,您可以存取 Content Advisor 設定,而不需要輸入密碼! 現在,如果 IE 開發人員不厭其煩地混淆了 Content Advisor 設定,為什麼他們還要讓這個後門暴露在外? 我想,這是一般的 Microsoft 安全性設計。 順便說一句,若要卸載您使用 Regload 載入的金鑰,只需輸入 regload test

下期内容預告

新的 WHISTLER 系統呼叫

Whistler 是 Windows 2000 作業系統的漸進式演進,其重點是提高可靠性和方便使用者從 Windows 9x 作業系統轉移。 不過,它確實包含一些核心變更。 最明顯的是少數新的系統呼叫和匯出 (可供裝置驅動程式使用) 核心函式。 下次我會提供您這些新核心 API 的預覽。


感謝您閱讀 Sysinternals 電子報。

發佈時間: 2000 年 11 月 30 日星期四 下午 7:05,發佈者:ottoh

[電子報封存 ^][ Volume 2, Number 4] [<Volume 3, Number 1 >]