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

Systems Internals 電子報第 2 卷第 1 期

http://www.sysinternals.com

Copyright © 2000 Mark Russinovich


2000 年 1 月 6 日 - 本期內容:

  1. SYSTEMS INTERNALS 的最新動向

    • PsKill v1.0
    • PsList v1.1
    • WinObj v2.1
    • Contig v1.3
    • NTFSCHK v1.0
    • HandleEx v2.1
    • Ctrl2cap v2.0
    • Filemon v4.26
    • Bluescreen v2.1
    • Fundelete v2.01
    • Openlist v1.11
    • 10 月 NT Internals
  2. INTERNALS 新聞

    • 已發行 Win2K DDK
    • 具有按鍵輸入的當機 Win2K
    • 具寫入保護的系統記憶體更新
    • Win2K API 暴增
    • David Solomon 研討會
  3. 未來動態

    • Microsoft NT 相關專利

贊助者:WINTERNALS SOFTWARE

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

Winternals Software 的 NTFSDOS Professional 和 NTFS for Win98 可讓您具有從 DOS、Windows 95 和 Windows 98 完整讀取和寫入 NTFS 磁碟機的權限。 NTFSDOS Pro 將單一磁片「開機磁碟」功能帶入 Windows NT/2K。 透過 NTFSDOS Pro,您可以從 DOS 開機磁片刪除 Buggy 驅動程式、重新整理檔案,以及在 NTFS 磁碟機上執行一般檔案系統維護。 NTFS for Win98 可讓您從 Windows 95 和 Windows 98 透明存取 NTFS 磁碟機。 在雙開機環境中,輕鬆地在 NTFS 磁碟機上的 NT 與 Win9x 之間共用應用程式和檔案。 這兩個公用程式甚至都有內建的 NTFS Chkdsk 功能。 免費唯讀版本的 NTFSDOS Pro 可在 http://www.sysinternals.com/ntfspro.htm 取得,而適用於 Win98 的免費唯讀版本則位於 http://www.sysinternals.com/ntfs98.htm.

大家好,

歡迎閱讀 Systems Internals 電子報。 本電子報目前有 14,000 名訂閱者。

我確信您知道,Win2K 位於磁碟複製器。 Win2K 的發行到製造 (RTM) 版本最終會是組建 2195。 RC3 是 2128,如我先前的電子報中所述,Microsoft 會在編譯目前來源樹狀結構時每晚遞增組建編號 (包括週末和假日)。

我在 11 月出現在 Microsoft (請參閱電子報稍後的 Filemon 更新,以瞭解我在那裡的原因),而且核心小組的成員帶我參觀 Microsoft 園區的 Building 26。 Building 26 是 Windows NT/2K 基底核心小組所在位置,也是 Windows NT/2K 建置和測試實驗室所在位置。 建置和測試實驗室的大小大致相等 (大概 30' X 60'),但測試實驗室擠滿電腦機架,而建置實驗室具有建置人員的桌面空間和座位。 建置人員每晚都會將來源樹狀結構擷取至數個四處理器系統,並執行編譯。 如果有人的程式碼簽入剛好 (但願不會發生) 中斷建置,則會連絡那個人,而且不管什麼時間都會讓他修正問題。 到 11 月中旬,會凍結 Win2K 的程式碼,而唯一允許的變更必須經過委員會的核准,並且指向 "show-stopper" 錯誤修正。

產生全新組建之後,測試人員會取得它,並同時將其安裝至實驗室中的所有機器。 測試實驗室的系統機架會填滿小型手持電腦到每個重要 PC 廠商之洗碗機大小的多處理器伺服器。 在 Win2K 安裝完成之後,系統會執行大量壓力測試指令碼。 在 Win2K 開發的後期階段,會以高於 90% 的速率通過壓力測試。 在引進數個 Win2K 可靠性增強功能 (如驅動程式驗證器) 之前,速率會低很多,而驅動程式驗證器這個工具可協助開發人員在自己的測試期間抓取到問題。

不論組建是否通過所有測試,都會將其上傳至 Microsoft 內部散發伺服器,而 Microsoft 員工可以在其中進行下載和安裝。 如果開發人員已產生重大問題,則會在下周收到來自最後遇到該問題之數百名員工的電子郵件。 這只在下列情況下才會發生:大部分使用者都發生嚴重問題,而測試小組對公司發出全公司電子郵件警告 (向超過 25,000 人播放電子郵件不是一件可掉以輕心的事)。

當我在那裡的時候,也遇到 Windows NT 首席架構設計人員 Dave Cutler。 他在這些天做了什麼? 在 11 月,核心小組已經努力處理 Win2K 的繼任者 (在內部稱為 NT 6 或 Neptune),而 Dave 正在努力修改 64 位元版本的 Win2K 安裝。 Dave 領導 64 位元開發工作的進行,而且正在逐步完成 64 位元 Win2K。 截至 11 月,核心小組仍在對 Alphas 進行 64 位元工作,因為 Intel 最近才開始生產 Merced 處理器的樣本,而且園區上只有一個。

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

感謝您!

-Mark

SYSTEMS INTERNALS 的最新動向

PSKILL V1.0

Windows NT 和 Win2K Resource Kit 隨附命令列 "kill" 公用程式,原因只是 Windows NT 和 Win2K 沒有此公用程式。 您可以使用 Resource Kit "kill" 來終止本機程序,但不能終止遠端程序。 因此,我決定撰寫自由可用的 "kill",就像我的 PsList 一樣具有遠端功能。 PsKill 會採用程序識別碼或名稱和選用的電腦名稱,並終止本機系統或您所指定遠端系統上的相符程序。 您甚至不需要在遠端電腦上安裝用戶端元件。 如果您所執行的帳戶沒有遠端電腦的系統管理權限,則您可以登入遠端系統來執行 kill,方法是將帳戶名稱和密碼新增至 PsKill 命令列。

下載 PsKill v1.0,網址為 http://www.sysinternals.com/pskill.htm.

PSLIST V1.1

我在前段時間發行 PsList 作為 UNIX ps 樣式程序和執行緒檢視器。 與 Windows NT 和 Win2K Resource Kit 中的類似工具不同,PsList 可讓您檢視遠端系統和本機系統上的程序和執行緒資訊。 PsList 的運作方式是讀取 Win NT/2K 的效能 API 資訊,就像 Perfmon 做的一樣。 此 PsList 修訂可讓您在命令列上指定帳戶名稱和密碼來登入遠端系統。 此選項可讓您存取遠端電腦,而您用來執行 PsList 的帳戶沒有遠端電腦的系統管理權限。

下載 PsList v1.1,網址為 http://www.sysinternals.com/pslist.htm.

WINOBJ V2.1

WinObj 是 Windows NT/2K 的物件管理員命名空間檢視器。 物件管理員命名空間是使用者通常看不到的命名空間,但是為所有具名 Win32 (\BaseNamedObjects\??) 和具名核心物件所在的位置。 其也作為檔案系統命名空間的進入點 (透過 \?? 下方的磁碟機代號符號連結) 和登錄命名空間 (透過機碼物件 \Key)。

WinObj 與 Win32 軟體開發套件 (SDK) 中同名的工具類似,但我們 WinObj 的功能高於 Microsoft 版本。 例如,當您在我們的 WinObj 中檢視物件的屬性時,將會看到參考和控制碼計數,而不是任意數字 (SDK WinObj 有一些主要錯誤)。 我們的 WinObj 也會顯示同步處理物件狀態和物件安全性資訊。

此最新 WinObj 更新可修正導致其無法正確顯示 Win2K 命名空間中現有一些長符號連結值的錯誤。 當您在 Win2K 上執行它時,它也會使用新的更友善 Win2K 安全性編輯器對話方塊 (在 NT 4 上,它會使用 ACLEDIT.DLL 所提供的未記載安全性編輯器介面)。 使用者介面增強功能包括在您結束時重新呼叫要檢視的目錄,以在下次啟動 WinObj 時選取該目錄,以及可讓您排序目錄內容清單檢視視窗。

下載 WinObj v2.1,網址為 http://www.sysinternals.com/winobj.htm.

CONTIG V1.3

Microsoft 已在發行 NT 4 時包括內建檔案重組 API。 我記載 API,並在 http://www.sysinternals.com/defrag.htm. 提供使用 API 的範例程式碼 使用我已實作 Contig (可用來重組個別檔案或目錄的命令列重組工具) 的 API。 自初始發行 Contig 以來,我已收到許多新增片段分析選項的要求,而我終於開始予以實作。 Contig v1.3 可讓您查看所指定檔案的分散程度,以判斷是否需要執行更昂貴的重組程序。

說到檔案重組,Symantec 已發行最進階的重組工具 Speedisk 5.0。 為了贏得競爭,其會略過重組 API,並手動移動磁碟周圍的區塊,以在系統上線時重組目錄,甚至是 MFT。 與執行軟體在 http://www.execsoft.com/diskeeper/infosheet.asp#Q9 上指出的內容相反,其 Diskeeper 產品 (4.0 和 5.0 版) 也會略過重組 API (但其重組工具不如 Norton 的重組工具進階),特別是其執行開機時間目錄彙總時。 主管的行銷是您為什麼無法相信所讀到之所有內容的另一個課程。

下載 Contig v1.3,網址為 http://www.sysinternals.com/contig.htm.

下載 PageDefrag、登錄和分頁檔重組工具,網址為 http://www.sysinternals.com/pagedfrg.htm.

NTFSCHK V1.0

在電腦上同時安裝 Win2K 和 NT 4 的進階使用者,其常見的抱怨是 Win2K 將任何 NTFS 磁碟機都自動升級至 NTFS v5 會讓 NT 4 Chkdsk 無法檢查這些磁碟機。 NT 4 Chkdsk 只會公告其無法在使用較新 NTFS 版本所建立的磁碟機上執行並結束,而不會掃描 NTFS v5 磁碟機並更正錯誤。 至少到目前為止,只要您想要檢查這些磁碟機,這就需要您開機到 Win2K。

使用 NTFSCHK,您可以從 NT 4 執行 Win2K 版的 Chkdsk。 怎麼做? 使用我們針對從 DOS 和 Windows 9x 執行 NT 原生 Chkdsk 所開發的相同技術作為 NTFSDOS Professional 和 NTFSDOS for Win98 的一部分,NTFSCHK 會將 Win2K Chkdsk 包裝在看起來像 Win2K 的環境中。

下載 NTFSCHK v1.0,網址為 http://www.sysinternals.com/ntfschk.htm.

HANDLEEX V2.1

HandleEx 是適用於 Windows NT/2K 的多面診斷公用程式,可顯示已載入的 DLL 程序,以及其已開啟的物件 (其控制碼)。 HandleEx 適用於追蹤 DLL 版本控制問題、處理流失,以及判斷哪個應用程式正在存取特定檔案、目錄或登錄機碼。

HandleEx 2.1 版可讓您檢視程序已開啟物件的屬性,包括參考計數和同步處理物件狀態。 您也可以使用 NT 的安全性編輯器來檢視和修改物件安全性屬性。

下載 HandleEx v2.1,網址為 http://www.sysinternals.com/handleex.htm.

CTRL2CAP V2.0

如果您來自 UNIX 背景,則會同意 PC 鍵盤上的 control 鍵位於錯誤的位置:其應該在 caps-lock 鍵所在的位置。 而且誰會使用 caps-lock 鍵? Ctrl2cap 是鍵盤篩選驅動程式,會將 caps-lock 變更為左 control,而副作用是移除 caps-lock (當我播放 Half Life 時,使用標準左 control 作為引發鍵)。

雖然 Ctrl2cap v1.0 適用於 Win2K,但使用它會停用 Win2K 電源管理功能,而這在膝上型電腦上有點讓人不開心。 因此,我已更新 Ctrl2cap 以符合 Windows 驅動程式模型 (WDM),其中包括方便管理電源。 我提供完整的原始程式碼,而且相同的原始程式檔可同時建置 NT 4 和 Win2K 版本。

下載具有原始程式碼的 Ctrl2cap v2.0,網址為 http://www.sysinternals.com/ctrl2cap.htm.

FILEMON V4.26

我 11 月在 Microsoft 出現的原因是 Microsoft 舉行 "File System Filter Plugfest" (在內部稱為 "Irp-olooza")。 Plugfest 已彙集所有 Windows NT/2K 檔案系統篩選驅動程式型主要產品、以循環配置資源方式將其進行配對,並針對不同的配對執行壓力測試。 所代表的產品包括大約九種不同的病毒掃描器、一些檔案加密工具,以及磁碟配額管理員。 Fest 的目標是識別與不同篩選組合相關聯的互通性問題、協助尋找和識別主要篩選產品中的錯誤,甚至可能會在 Win2K 中找到錯誤。 因為 Filemon 是世界上其中一種最廣泛使用的篩選,而且許多 Microsoft 群組都依賴它進行開發和疑難排解工作,所以 Plugfest 召集人邀請我來參加活動並作為其代表。

Filemon 已通過所有壓力測試,而且未發生事件,但其中一個除外。 因為 Filemon 是動態載入的篩選驅動程式,所以它會分層至事件中存在的所有產品上方,但其中一個除外。 分層至 Filemon 上方的產品是也會動態載入的病毒掃描器,而它實際上是根據 Filemon 的產品。 因為會動態載入病毒掃描器,所以我們已嘗試兩個分層排列,而且在 Filemon 位於底部的其中一個內,會導致病毒掃描器損毀。 Filemon 的 GUI 結束時,其驅動程式會刪除其篩選裝置物件。 篩選驅動程式除非從 I/O 管理員取得命令,否則刪除篩選裝置物件實際上並不合法 (在檔案系統篩選中為 FastIoDetach,在 WDM 中則為具有 IRP_MN_REMOVE_DEVICEIRP_MJ_PNP)。 一點都不奇怪,Filemon 裝置物件的意外消失會導致病毒掃描器存取已解除配置的記憶體和當機。

幸運的是,Filemon 的當機發生在 Plugfest 的最後一個工作階段中,因此我不怎麼尷尬,而且,因為測試發現每個產品中至少都會有一個嚴重錯誤或互通性問題,所以我並不孤單。 Filemon v4.26 是更正 Plugfest 中所發現錯誤的版本。

甚至在我參加外掛程式之前,我發現 Filemon 中有一個 Bug,這可能對 NT 裝置和文件系統驅動程式開發人員感興趣。 我最近修改過 Filemon,以使用記載不佳的執行資源 (E-Resource) 同步處理機制。 Microsoft 的檔案系統驅動程式會廣泛使用 E-Resource,因此我認為在 Filemon 原始程式碼中包括其使用方式具教育意義。 E-Resource 必須透過已停用 APC (非同步程序呼叫) 的執行緒取得。 您只需要「知道」這一點,因為 DDK 文件不會告訴您。 不幸的是,因為匆忙地進行實作,我略過對下列函數的必要呼叫:停用和重新啟用 Filemon E-Resource 取得之 APC 的函數。 此錯誤只有在極罕見的情況下才會造成問題,因此除非 Win2K 驅動程式驗證器抓住它,否則我偵測不到。 為了修正此問題,我在發行 E-Resource 之後,於取得 E-Resource 和 KeLeaveCriticalSection 之前,新增對 KeEnterCriticalSection 的呼叫。

下載 Filemon v4.26,網址為 http://www.sysinternals.com/filemon.htm.

BLUESCREEN V2.1

Bluescreen Screen Saver 是我撰寫的螢幕保護裝置,可模擬可怕的 Windows NT 藍色當機畫面 (BSOD)。 我是在 Win2K 版本可用之前撰寫原始版本,因此它是模擬 NT 4 BSOD 和重新啟動,而且在完成時,Chkdsk 會偵測到磁碟錯誤。 我提供兩個版本:一個針對已新增的真實技術執行磁碟 I/O,另一個則否。 在 Win2K Beta 3 推出之後,我已更新 Bluescreen 以模擬新的 Win2K BSOD 和系統重新啟動。 在 RC3 中,已變更重新啟動畫面,因此我必須再次更新 Bluescreen。 同時,我讓磁碟 I/O 產生成為可使用 Bluescreen 螢幕保護裝置屬性來設定的選項,而不是具有兩個版本。

下載 Bluescreen v2.1,網址為 http://www.sysinternals.com/bluescrn.htm.

FUNDELETE V2.01

經過長時間的等待之後,我們的 Undelete for Windows NT 會將其回復為 Fundelete for Windows NT。 Fundelete 是一種公用程式,可增強 Windows NT/2K 資源回收筒,以擷取從程式和命令列中刪除的檔案,以及從總管中刪除的檔案。 為什麼變更名稱? 在 Bryce 和我發行 Undelete for Windows NT 數個月之後,Executive Software 發行 Network Undelete,而這是類似的公用程式。 一年後,他們決定他們比較喜歡我們公用程式的名稱,因此他們將其名稱變更為 Undelete for Windows NT。 同時,他們讓律師發給我們一封信,警告我們,我們侵犯他們從 1987 年以來一直持有之 "undelete" 這個字的註冊商標。 我們變更我們公用程式的名稱,而不是戰鬥。

開發人員可以將原始程式碼下載至 Fundelete 裝置驅動程式的核心,其示範一些功能強大的驅動程式技術,包括從驅動程式取得使用者的 SID、列舉驅動程式中的目錄內容,以及建立新的 IRP。

下載 Fundelete for Windows NT v2.01,網址為 http://www.sysinternals.com/fundelete.htm.

OPENLIST V1.11

Openlist 是一種 Windows 9x 公用程式,可顯示系統上開啟的所有檔案。 1.11 版新增讓您檢視檔案詳細資訊的功能,包括 DLL 的版本資訊。

下載 Openlist v1.11,網址為 http://www.sysinternals.com/openlist.htm.

12 月 "NT INTERNALS"

我在 12 月發行的 Windows NT 雜誌中的 "NT Internals" 專欄是「Win2K 內部可擴縮性增強功能,第 2 部分」。 這兩部分系列中的第二個部分描述 Microsoft 在 Win2K 中針對多處理器可擴縮性所進行的增強功能,包括 Job 物件、新的配量控制項、新的排程類別和使用者模式執行緒集區。

Windows NT Magazine 已在去年 8 月變更其線上文章瀏覽原則,只允許訂閱者進行存取。 他們在上個月將原則放寬回 8 月之前的原則。 現在,非訂閱者可以自由檢視超過四個問題的文章。

請參閱我們完整的出版品清單,網址為 http://www.sysinternals.com/publ.htm.

INTERNALS 新聞

已發行 WIN2K DDK

http://www.microsoft.com/ddk. 現在已提供最終 Microsoft Win2K 裝置驅動程式開發套件 (DDK) 版本 您可以免費下載套件,或在線上瀏覽文件。

具有按鍵輸入的當機 WIN2K

不,這不是錯誤。 《Windows 2000 內部第二版》的作者 David Solomon 提供給我這個很酷的提示。 如果您新增 DWORD 登錄值 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters\CrashOnCtrlScroll,並將它設定為 "1",然後重新開機,則您將能夠使用鍵盤讓 Win2K 當機。 按住右 control 鍵時,連續按 scroll 鍵兩次。 在第二次按 scroll 鍵時,系統會將出現藍色畫面,並顯示「終端使用者手動產生損毀傾印」訊息。

在核心或裝置驅動程式變成死結且電腦不再回應的情況下,能夠手動損毀其系統十分有用。 死結存在時所產生的損毀傾印可以將指出死結原因的資訊提供給開發人員。 除非我在 Plugfest 時一直傳遞此選項,否則此選項的引進十分自然,甚至 Win2K 核心的核心開發人員也感覺不到。

具寫入保護的系統記憶體更新

在先前的電子報中,我談到具寫入保護的系統記憶體是 Win2K 中的新可靠性功能。 事實證明,許多設定中預設不會提供完整寫入保護。 如果電腦至少有 128MB 的實體記憶體,則 Win2K 會使用 4MB 的「大型分頁」來對應核心記憶體。 使用 4MB 而不是 4KB 分頁可節省分頁轉換層級,因此可改善效能。 因為唯讀程式碼和讀取/寫入資料可能都位於相同的 4MB 分頁,所以除非使用者使用驅動程式驗證器來要求寫入保護,否則會停用這些系統上的寫入保護。 如果驅動程式驗證器強制執行寫入保護,則 Win2K 會使用較慢的 4KB 分頁來對應核心記憶體,而且不同的記憶體區域會與分頁一致,這表示可以將個別字碼頁標記為唯讀。

因此,寫入保護僅作用於記憶體少於 128MB 的系統,以及驅動程式驗證器已將其啟用的系統。 針對寫入保護未作用的系統,Microsoft 會考慮包括可檢查系統記憶體總和檢查碼之看門狗設備的 Win2K Service Pack,然後定期驗證總和檢查碼的記憶體。 驗證作業雖然不像硬體輔助寫入保護那麼精確,但會偵測針對應該為唯讀的區域進行的錯誤寫入。

WIN2K API 暴增

不用懷疑,Win2K 明顯大於 NT 4。 授與,有許多新的服務和整合式功能計入 Win2K 大小的一部分 (Active Directory、MMC、COM+等),但甚至是核心作業系統也已成長。 OS 大小增加的其中一個原因是它針對應用程式所匯出的 API 數目已增加。 Win2K 核心 OS DLL 包括 KERNEL32.DLL、GDI32.DLL、USER32.DLL 和 ADVAPI32.DLL (NTDLL.DLL 也是核心 OS DLL,但 KERNEL32 依賴 NTDLL for WIN32 API)。 請快速查看每個項目中的 API 暴增。 以下是原始數目:

LIBRARY NT 4 SP5 WIN2K 成長
KERNEL32 681 823 21%
GDI32 401 553 38%
USER32 629 695 10%
ADVAPI32 401 557 39%

請注意,在某些情況下,成長會以高達 30% 的方式人為擴充,因為某些 API 同時具有 ANSI 和寬字元串形式,因此會在上述數目中計入兩次。

KERNEL32 是匯出所謂的「基底 OS」功能的 DLL,包括程序、記憶體、檔案 I/O 和地區設定管理 API。 Win2K 不熟悉的 API 包括新的語言函數 (例如 EnumUILanguages )、工作物件函數 (例如 AssignProcessToJobObject)、記憶體管理函數 (例如 AllocateUserPhysicalPages)、檔案函數 (例如 FindFirstVolume) 和 ToolHelp32 API (例如 Process32First)。

GDI32 提供繪圖和點陣圖相關常式。 其成長的原因是大部分其他新函數的出現,包括新的字型管理 API (例如 CreateFontIndirectEx)、Alpha 混合和 path-object 函數。

USER32 會實作視窗化函數,而且其成長的重要部分是使用新的多監視器 API。 其他新的 USER32 API 包括一堆資訊函數 (例如 GetWindowInfoGetTitleBarInfo)。

最後,ADVAPI32 是提供進階 WIN32 API 的 DLL。 有一些新的 API 群組會促進其成長:EFS (例如 DecryptFile)、CryptoAPI (例如 CryptEnumProviders)、安全性 (例如 CheckTokenMembership)、事件追蹤 (例如 StartTrace) 和 Windows 管理介面 (WMI) (例如 WmiOpenBlock) 構成大量的新函數。

DAVID SOLOMON 研討會

David Solomon Expert Seminars 會在 2 月 21-25 日於聖地牙哥舉行。 由在 Microsoft 教書的人進行開發人員訓練。

  • Jeffrey Richter 的 Win32 程式設計
  • John Robbins 的電源偵錯
  • Jamie Hanrahan 的 Windows 2000 裝置驅動程式
  • Doug Boling 的 Windows CE 設備驅動器和應用程式

如需詳細資料,請參閱 http://www.solsem.com

未來動態

軟體專利已成為想要利用其智慧財產權的公司所需的遊戲。 Microsoft 對專利遊戲並不陌生,而 NT 的核心有一些美國專利商標局 (PTO) 認為值得的機制。 Microsoft 取得專利的核心區域包括 I/O 管理員和物件管理員。 下次我會提供一份我能夠挖掘到的 NT 核心專利清單。


感謝您閱讀 Systems Internals 電子報。

發佈時間:2000 年 1 月 6 日星期四下午 7:09,發佈者:ottoh

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