Share via


[電子報封存 ^][<第 2 卷,第 3 期][第 2 卷,第 5 期>]

Sysinternals 電子報第 2 卷,第 4 期

www.sysinternals.com
Copyright © 2000 Mark Russinovich


2000 年 8 月 30 日 - 本期內容:

  1. 社論

  2. SYSINTERNALS 最新動向

    • ListDlls v2.23
    • HandleEx v2.26
    • ElogList v2.02
    • LoggedOn v1.1
    • Bluescreen v2.21
    • PageDefrag v2.01
    • LoadOrder v1.1
    • ClockRes v1.0
    • BgInfo v1.0
    • 在 Windows 2000 中,第 3 版。
    • Microsoft 的 Sysinternals
  3. 內部資訊

    • DEBUG 權限的強大功能
    • Win2K SP1 中的新 API?
    • WinDev 2000 West
  4. 未來動態

    • Tokenmon

共同贊助者: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。

Winternals Software 的 ERD Commander 2000 是其獲獎 ERD Commander 產品線的最新版本。 ERD Commander 2000 的新功能,包括內建的登錄和檔案編輯器,使其成為目前最先進的 Windows NT 和 Windows 2000 修復工具。 您可以將 ERD Commander 2000 安裝在磁片、CD-ROM,甚至系統的硬碟上,以利快速存取,其安裝精靈可讓新增協力廠商 SCSI 和其他大量儲存空間驅動程式變得輕而易舉。 RD Commander 2000 售價為 $349,對於現有 ERD Commander Professional 擁有者僅需 $49。 在 www.winternals.com/products/erdcommander2000.shtml 深入了解並下載試用版。

共同贊助者:WINDOWS 2000 MAGAZINE

Windows 2000 Magazine 包含適用於每天使用 Windows NT/2000 的人員的實際解決方案。 立即訂購免費範例問題,且沒有風險。 如果您決定繼續訂閱,您將收到另外 13 期雜誌,價格比報攤價格低 40%。 立即訂閱:http://www.win2000mag.com/sub.cfm?code=fs00inhs13

大家好,

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

我花了很多時間使用 Regmon、Filemon 和 DebugView,這些工具是我和 Bryce 在 Sysinternals 開發的。 Regmon 是登錄存取監視器 (www.sysinternals.com/regmon.htm),Filemon 是檔案存取監視器 (www.sysinternals.com/filemon.htm),DebugView 是偵錯輸出監視器 (www.sysinternals.com/dbgview.htm)。 有時候,我會碰到安裝在數個系統之一的應用程式或裝置驅動程式,以產生在其中一個工具中可見的連續活動。 我不是談論必要的活動,但是軟體執行的動作通常是重複的本質,而對輸出追蹤的檢查顯示軟體會使用輪詢技術,其中可能會使用一些其他較不侵入的機制。

例如,各種商業病毒掃描器會每秒查詢其病毒簽章檔案數次,以查看其是否已更新。 我的其中一個系統有來自主要印表機製造商的印表機驅動程式,其會持續輸出偵錯語句,透過包含「輪詢」一詞來公告他們正在輪詢。 在我最愛的其中一個範例中,一個公用程式公告為改善主要公用程式廠商的系統效能,會每秒多次查詢廠商的數個登錄機碼。 另一種草率編碼的範例是來自主要網路廠商的網路介面卡,其中包含使用者模式軟體元件,其中包含軟體執行時持續行程的內嵌偵錯中斷點。 如果應用程式需要偵測檔案的變更,它可以要求目錄變更通知。 同樣地,如果需要偵測登錄機碼的變更,它可以要求金鑰變更通知,商用軟體不應該包含預設啟用的偵錯輸出或偵錯中斷點。

然而,也許最令人震驚的範例是隨附於 Windows 2000 Server (\Winnt\System32\Windows Media\Server\Npsm.exe) 的Microsoft Windows 媒體計畫服務:它在一個沒有活動 (包括沒有媒體服務) 的系統上以每秒60次的速度讀取 \Winnt\System32\Windows Media\Server\ASDB\mdsas.mdb 的前 2 KB。 沒有藉口,特別是因為這可能會對伺服器的整體效能造成負面影響。

我相信,如果您已在任何時間使用 Regmon、Filemon 或 DebugView,您可能遇到類似的範例。 當您看到一個,不要只是設定了一個篩選條件就忘記了,給廠商發電子郵件抱怨他們程式設計草率。

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

感謝您!

-標記

SYSINTERNALS 最新動向

LISTDLLS V2.23

ListDLLs 是命令列公用程式,會顯示已載入處理程序之 DLL 的詳細資訊。 例如,ListDLLs 會顯示每個 DLL 的基底記憶體位址、大小、版本和完整路徑。 這個新版本會顯示用來啟動處理程序的命令列,包括命令列上傳遞的任何參數。 這可協助您區分多個處理程序,並針對與特定命令列選項相關的問題進行疑難排解。

在 www.sysinternals.com/listdlls.htm 下載 ListDLLs v2.23。

HANDLEEX V2.26

HandleEx 是一個應用程式,可呈現哪些控制碼和 DLL 處理程序已開啟或載入的相關資訊。 其顯示包含兩個子視窗。 頂端視窗一律會顯示目前使用中處理程序清單,包括其擁有帳戶的名稱,而底部視窗中顯示的資訊取決於 HandleEx 所在的模式:如果 HandleEx 處於控制代碼模式,您會看到處理程序在頂端視窗中選取的控制代碼已開啟;如果處於 DLL 模式,您會看到處理程序已載入的 DLL 和記憶體對應檔案。

最新版的 HandleEx 包含數項新功能。 首先,如同 ListDLLs,它現在會顯示當您檢視處理程序屬性時用來啟動處理程序的命令列。

此版本之前 HandleEx 的其中一個缺點是,雖然它顯示您登入工作階段的系統處理程序和處理程序執行所在的帳戶名稱,但它無法規避 Windows NT/2000 安全性模型,以顯示從其他使用者帳戶啟動的處理程序擁有者 (來自 Windows NT/2000 資源套件的 Pview 程式也受到此限制)。 這在 NT 4 終端機伺服器和 Windows 2000 終端機服務環境中非常明顯,其中 HandleEx 指出從其他使用者工作階段啟動的處理程序具有未知的擁有者。 HandleEx v2.26 實作一個技巧,讓它可以判斷所有處理程序的擁有帳戶,而不例外,使其成為終端服務環境的理想工具。

HandleEx v2.26 的最終新功能可讓您強制關閉任何開啟的控制碼。 在收到許多請求之後,我新增了此功能。 然而,我建議您使用它時要格外小心,因為編寫應用程式時通常不會預料到控制碼可能會突然失效,而強制關閉控制碼的應用程式可能會出現不穩定的行為或當機。

在 www.sysinternals.com/handleex.htm 下載 HandleEx v2.26。

ELOGLIST V2.02

Windows 2000 資源套件包含名為 ELogDmp 的工具,可讓您從本機或遠端電腦上的事件記錄檔傾印記錄。 ELogList 比 ElogDmp 更強大,因為它也可讓您指定選擇性帳戶名稱和密碼,以便從與執行工具帳戶不同的帳戶存取電腦事件記錄檔。 此外,ElogDmp 工具會以原始格式顯示事件記錄檔項目,使得難以解譯輸出內容,而此 ElogList 會更新事件記錄檔項目,以在 Windows NT/2000 事件檢視器中顯示文字。 即使您從遠端系統顯示事件記錄檔,ElogList 也會使用遠端系統上的正確訊息檔案來格式化字串資料。

在 www.sysinternals.com/eloglist.htm 下載 ElogList v2.02。

LOGGEDON V1.1

LoggedOn 是命令列小程式,告訴您誰登入特定電腦,無論是在本機還是透過資源分享。 1.1 更新版可讓您搜尋您的網路,以尋找與特定使用者相關聯的登入工作階段。 這項功能適用於您想要對使用者帳戶執行更新,且需要確認使用者目前未登入的情況。

在 www.sysinternals.com/misc.htm 下載具有完整來源的 LoggedOn v1.1。

BLUESCREEN V2.21

毫無疑問,你們之中大多數人現在都熟悉著名的 Sysinternals Blue Screen 螢幕保護裝置,其準確地描述了 Windows NT 或 Windows 2000 當機和重新開機的情況。 自其初始版本以來,我一直收到 Windows 9x 使用者要求,這些使用者想要在其電腦上執行螢幕保護裝置程式,因此我終於將其移植到 Windows 9x。 在 Windows 9x 上,它會模擬 Windows 2000 當機並重新開機。

在 Windows 9x 上使用 Sysintenals Blue Screen 螢幕保護裝置的唯一需求是,您會取得要放在 \Windows\System 目錄中的 Windows 2000 Ntoskrnl.exe 檔案複本 - Blue Screen 需要 Windows 2000 啟動顯示畫面的檔案。

現在,您真的可以混淆不知情的 Windows 9x 使用者,這些使用者只會發現它卡在 Windows 2000 當機和重新開機週期中!

在 www.sysinternals.com/bluescreen.htm 下載 Bluescreen Screen Saver v2.21。

PAGEDEFRAG V2.01

PageDefrag 是一種重組公用程式,可在開機時執行,以重組系統的分頁檔案和登錄區。 PageDefrag 是第一個能夠重組登錄區公用程式,但自其發行以來,該功能已新增至數個商業重組器。 不過,PageDefrag 仍然是免費的,2.01 版適用於 Windows 2000 以及 Windows NT 4。

如果您對 Windows NT 4 和 Windows 2000 所提供的重組介面感興趣,您可以在 www.sysinternals.com/defrag.htm 將原始程式碼下載到互動式檔案重組器。 Sysinternals 記載了 Microsoft 在 Platform SDK 中包含重組介面之前的幾年,以及使用我們的文件和範例程式碼的數個商業重組器。

在 www.sysinternals.com/pagedfrg.htm 下載 PageDefrag v2.01。 在 www.sysinternals.com/defrag.htm 檢視重組介面文件。

LOADORDER V1.1

您是否曾經想過裝置驅動程式、服務載入和初始化的順序為何? 現在您可以輕鬆地了解。LoadOrder 是一個公用程式,會處理 HKLM\System\CurrentControlSet\Services 下的資訊,以建置驅動程式和服務載入順序的圖片。

在 www.sysinternals.com/misc.htm 下載 LoadOrder v1.1。

CLOCKRES V1.0

有關排程器的文章中,我談到了 Windows NT/2000 執行緒數量 (執行緒回合在 CPU 上執行的長度) 是根據系統時鐘的解析度。 時鐘的解析度也會影響 Windows 計時器型事件的延遲。 在 www.sysinternals.com/timer.htm 的文章甚至討論應用程式可以操作時鐘解析度的方式。 在大部分的 SMP 上,解析度為 15 毫秒,且在單處理器上為 10 毫秒,這些值是由標準 SMP 和單處理器 HAL 所設定 (硬體抽象層)。

雖然大部分的系統都使用上述的一般值,但如何判斷電腦上時鐘的實際解析度? 答案位於 GetSystemTimeAdjustment WIN32 API 中,它會告訴您系統是否將定期調整套用至白天的時鐘。 如此一來,這個 API 也會傳回時鐘的間隔。 ClockRes 小程式會使用 API 來告訴您系統時鐘的解析度。

在 www.sysinternals.com/misc.htm 下載 ClockRes 加上來源。

BGINFO V1.0

如果您是負責多部伺服器的系統管理員,您可能會花大量時間開啟各種資訊對話方塊,提醒自己各種系統屬性的值,例如已安裝的 Service Pack 版本、IP 位址、電腦名稱、記憶體大小和處理器速度。 現在,您可以使用 Bryce 開發的 BgInfo 公用程式,在每部伺服器的桌面上以純檢視方式取得這項資訊。

當您執行時,BgInfo 會建立桌面背景,以自動報告各種有用的系統特性。 您可以將 BgInfo 放在 [開始] 資料夾中,讓資訊隨時可供您登入,而且您可以修改 BgInfo 顯示的資料,甚至新增您自己的資料。 在伺服器上安裝 BgInfo 後,您將節省重複查閱容易忘記資訊的時間。

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

在 Windows 2000 中,第 3 版。

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

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

SYSINTERNALS AT WWW.MICROSOFT.COM

我沒有任何參考 Sysinternals 的新知識庫文章要報告,但 Microsoft 在其網站的 TechNet 部分新增了一些非常引人注目的 Sysinternals 連結。 第一個是在 www.microsoft.com/TechNet/Security/au022800.asp 的「詢問我們關於...安全性」專欄中,專欄作家 Joel Scambray 警告讀者,惡意用戶可以使用 NTFSDOS (www.systernals.com/ntfspro.htm) 更改 Windows 2000 網域控制站 Active Directory 的內容。

第二個參考位於 www.microsoft.com/technet/inside/default.asp 的 "Inside Microsoft" 資料行中。 數據行為 Q&A 樣式,開頭有兩個與判斷應用程式已開啟特定檔案相關的問題。 在回答過程中,讀者們指著 HandleEx (www.sysinternals.com/handleex.htm) 和 NtHandle (www.sysinternals.com/nthandle.htm),文章的作者 ("Mole") 這樣描述了 Sysinternals:「這裡有很多很棒的公用程式,不會花您一分錢。 即使是 Mole 也不時提到 Sysinternals (什麼?您以為 Mole 把所有這些資訊都記在腦子裡了? 再說一次,這就是他要送您去的地方。」正如我們所期望的,這與 Microsoft 對該網站的官方認可差不多。

內部資訊

DEBUG 權限的強大功能

不同於其他偵錯輸出監視器,包括 dbmon,我的 DebugView 偵錯輸出監視器 (www.sysinternals.com/dbgview.htm) 需要本機管理員 istrator 權限來執行,因為它會安裝可擷取核心模式偵錯輸出的裝置驅動程式。 因此,我收到來自開發人員的數十封電子郵件,抱怨他們的管理層不會給他們本機系統管理員權限,而只有偵錯權限。 有人認為,偵錯權限的存在是有原因的,並且所有應用程式開發人員都需要開發它。 這些開發人員會要求我變更 DebugView,使其只有在使用者具有系統管理員權限時才會安裝驅動程式,否則只會收集 Win32 偵錯輸出。

這些請求總是讓我會心一笑,因為提出 Debug 權限論點的管理層沒有意識到,這項權限為本機管理員權限打開了大門。 開發人員可以使用偵錯權限,將偵錯工具附加至本機安全性授權處理程序 (LSASS),並加以操作,以便為他們提供下一次登入的本機系統管理員權限。 或者,他們可以將程式碼插入系統帳戶中執行的任何處理程序,以將其帳戶新增至本機系統管理員群組。 當我向抱怨的開發人員解釋這一點時,他們有時會回應說,他們的管理階層並不認同這種說法。 到目前為止,我還沒有任何東西可以讓他們帶回給他們的管理層來說明他們的情況,但最近大量的此類電子郵件促使我採取了行動。

LogonEx 是您可以在 www.sysinternals.com/logonex.zip 下載的公用程式,以圖形方式展示偵錯權限的影響力。 LogonEx 適用於 Windows NT 和 Windows 2000。 為了最好地展示它,請建立一般使用者帳戶,但新增「偵錯程式」權限除外。 在該帳戶下登出並登入,然後執行 LogonEx。 您將需要用於特定安裝的 msv1_0.dll 的符號檔案 (開發人員通常安裝了系統符號),LogonEx 使用該符號檔案來定位 MsvpPasswordValidate 函式的入口點並對其進行修補。 在 LogonEx 進行修補之後,您將能夠使用任何帳戶登入系統,而不需要指定密碼。 以系統管理員身分登入,並將您建立的帳戶新增至本機系統管理員群組,以完成示範。

LogonEx 只是偵錯權限可讓開發人員控制系統的其中一個範例,但還有其他許多範例。 我希望 LogonEx 能讓管理層相信,不給予開發人員本機管理員權限是沒有任何意義的 (但請注意,我不是在談論網域管理員權限,這是另一個故事,本機管理員只對自己的電腦而不是任何其他電腦擁有至高無上的權利,而網域管理員則統治網路)。

WIN2K SP1 中的新 API?

在許多使用者遇到 NT 4 Service Pack (SP) 造成新錯誤的問題之後,Microsoft 採取了一項原則,即不包含 SP 中的任何新功能,以儘量減少在修正舊版本時引入新問題的可能性。 或者說我們是這麼認為的。 Windows 2000 SP 1 最近發行,似乎沒有任何新功能。 不過,Ntoskrnl.exe 的詳細檢查、包含 Windows 2000 執行和核心元件的檔案,以及包含原生 API 和載入器的程式庫 Ntdll.dll,顯示新的 API 在 SP 1 中首次亮相。

新的 API 包含下列函式:

   RtlTraceDatabaseAdd
   RtlTraceDatabaseCreate
   RtlTraceDatabaseDestroy
   RtlTraceDatabaseEnumerate
   RtlTraceDatabaseFind
   RtlTraceDatabaseLock
   RtlTraceDatabaseUnlock
   RtlTraceDatabaseValidate

函式的名稱相當具描述性,因此這顯然是記錄事件的 API。 API 的一個有趣層面是,其實作在 Ntdll 和 Ntoskrnl 中重複,這與其他在 Ntoskrnl 中呼叫實作服務的 Ntdll API 不同。

檢查 API 的實作顯示其使用方式如下:應用程式會建立追蹤資料庫,該資料庫儲存在應用程式的虛擬記憶體中,並將項目新增至資料庫。 在某些時候,應用程式可以列舉資料庫的內容,並在資料庫完成時將其刪除。 奇怪的是,似乎沒有刪除資料庫項目的方式。

如何使用這個新的 API? 我的 Windows 2000 Advanced Server 安裝中沒有安裝任何功能,因此不清楚是否有任何安裝。 也許這是意外包含在 SP 1 版本程式碼中的偵錯 API。

發佈時間:2000 年 8 月 30 日星期三下午 7:07,發佈者:ottoh

[電子報封存 ^][<第 2 卷,第 3 期][第 2 卷,第 5 期>]