[電子報封存 ^][< Volume 1, Number 3] [Volume 1, Number 5 >]
Systems Internals 電子報第 1 卷第 4 期
http://www.sysinternals.com
Copyright (C) 1999 Mark Russinovich
1999 年 8 月 5 日 - 本期內容:
Sysinternals 最新動向
- Portmon v3.0
- Frob v1.5
- ListDLLs v2.1
- 新增 BOOT.INI 選項
- PsList v1.0
- 8 月「NT Internals」
- 部分既有功能
內部消息
- 更正重新:系統檔案保護
- Win2K RC1 DDK 已發行
- Win2K AWE API
- WinDev '99 West
未來動態
- SP4 的未記載 DiskEdit 工具
贊助者: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 宣佈將發行其最新系統復原公用程式 Remote Recovery。 遠端復原功能可讓您從企業中的任何位置,透過 TCP/IP 存取無法啟動電腦的磁碟機。 遠端修正導致 NT 或 Win9x 系統離線的驅動程式、檔案系統與設定問題,幫助您節省時間和金錢。 您可以前往 http://www.sysinternals.com/rrecover.htm 下載免費的唯讀試用版,並前往 http://www.winternals.com. 購買讀取/寫入版本
大家好,
歡迎瀏覽 Sysinternals 電子報第四版。 本電子報目前有 7,000 名訂閱者。
在最近一份電子報中,我表示接下來將探討 Windows 2000 的 (Win2K) AWE API。 我指出,AWE 是「位址視窗延伸模組」(Address Windowing Extensions) 的縮寫 (給 Windows 新手的溫馨說明:API 則是 Application Programming Interface,「應用程式開發介面」)。 在 Microsoft 硬體開發人員網站的此頁面,則將 AWE 描述如下:http://www.microsoft.com/hwdev/NTDRIVERS/AWE.htm. 不過,讀者 Laxmikant Gunda 也告訴我,在 Microsoft 網站的另一個 URL,http://www.microsoft.com/windows/server/News/fromMS/intelpae.asp 中,AWE 則被指定為「進階視窗延伸模組」API。 顯然,在 API 相關內容中,「位址」比「進階」的用詞更合理 (我會在本期電子報中再進一步說明),因此,我想一些行銷方面的作者在消化新聞頁面的素材時,可能會誤讀。
在 Microsoft 的技術推廣之前,我就發現了這樣的混淆問題。 近來,Win2K 可安裝檔案系統 (IFS) 套件 Beta 3 版本的安裝程式,在其啟動顯示畫面上,便會說明自己是「內部檔案系統套件」的設定。 IFS 中的「I」代表「可安裝」(Installable),如果解釋為「內部」(Internal) 就不太說得通 (除非開發人員不小心釋出非公開版本的套件)。因此,我猜測這是個翻譯搞砸的案例 (或者這是某位安裝程式碼員單打獨鬥的結果,因為沒有檔案系統小組成員可幫忙,只好絞盡腦汁瞎猜一通)。
我的觀點是什麼? 我沒什麼特別的想法,除了我們遲早都會濫用縮寫,搞得開發人員和行銷部門夥伴開始粗心大意,比如不小心用相同的三個字母,描述互不相同的技術。 Microsoft IIS (Internet Information Server) 群組中,有人將新的 API 命名為 AIE (Advanced ISAPI Extensions,「進階 ISAPI 延伸模組」- ISAPI 代表「網際網路伺服器 API」),而 MTS (Microsoft Transaction Server) 群組中的另一個人,也想到可以用 AIE 來指「不可部分完成介面交換」(Atomic Interface Exchange)。 我相信,總有一天行銷人員或技術寫手會從 IIS 團隊拿到一份技術說明,只標為「AIE」,如果這個人不清楚資料庫和檔案系統的區別,八成會猜「AIE」指的是「進階 Internet Explorer」(Advanced Internet Explorer)。
我也在其他工作場合中,看到縮寫之亂發生。 最近有一篇 Windows NT 雜誌文章,主題是討論序列和平行埠,在文字說明中使用了「COM 連接埠」一詞。 經過編輯最終審閱,文章發佈,這個句子則變成了「COM (元件物件模型) 連接埠」。
老樣子,請把這期電子報分享給可能會讀出樂趣的朋友吧。
感謝您!
-Mark
Sysinternals 最新動向
PORTMON V3.0
在 3.0 版本中,Portmon 已採用一些主要方法強化。 Portmon 是適用 Windows 95/98/NT/2K 的序列和平行埠監控應用程式。 3.0 版也引進下列項目:
- 進階篩選和輸出醒目提示功能
- 監視遠端系統上的序列和平行埠活動的能力
- 記錄至檔案和列印支援
- 剪貼簿整合
- 可讓您指定要記錄多少讀取/寫入資料的設定
請在此下載 Portmon v3.0:http://www.sysinternals.com/portmon.htm.
FROB V1.5
Windows NT 4.0 工作站讓無權限的系統管理員也可控制量子長度 (回合),也就是 NT 執行緒排程器提供給執行緒的量子長度。 在 Windows 4.0 工作站上,控制台中的系統小程式會有帶滑桿的「效能」索引標籤,可用於指定前景執行緒的量子加速 (「伺服器」也會顯示滑桿,但無法使用)。 較短的量子通常會導致應用程式對使用者輸入反應較快,而長量子則適用專用於執行非互動式伺服器應用程式的系統。
來自 Systems Internals 的 Frob 程式,可讓您更精細控制工作站和伺服器上量子長度,並可微調量子,配合您在系統上執行的工作負載。 不過,因為 Frob 會修改 NT 核心內部的設定,所以必須先更新,才能使用每個新的 Service Pack。 Frob v1.5 現已推出,並具備 Service Pack 5 的相容性。
您可以在此下載 Frob v1.5:http://www.sysinternals.com/ntfrob.htm.
LISTDLLS V2.1
ListDLLs 是命令列公用程式,會顯示已載入處理程序之 DLL 的詳細資訊。 ListDLLs 會從對應至所載入 DLL 檔案路徑的磁片上檔案擷取版本資訊,並使用未記載的介面取得路徑名稱。 有時候,應用程式已載入磁片上的 DLL 檔案之後就會更新,在此情況下,ListDLLs 會顯示不正確的版本資訊。
ListDLLs v2.1 也可辨識出磁片上與載入的 DLL 版本之間有差異,並在其輸出的差異處加上旗標。 當 ListDLLs 有差異時,會列印磁片上檔案和載入的檔案的連結時間。 可執行檔和 DLL 檔案的連結時間,位於 NT 將其封裝的可攜式執行檔 (PE) 檔案格式標頭中。
您可在 http://www.sysinternals.com/listdlls.htm. 下載 ListDLLs v2.1
新增 BOOT.INI 選項
Win2K Beta 3 引進了三個新的 BOOT.INI 交換器。 這三者都與 Intel 實體位址延伸模組 (PAE) 相關,這是 Intel 與 Pentium Pro 一同引進的技術,可讓 x86 系統處理最多 64 GB 的實體記憶體。 傳統上,x86 系統只能處理 4GB 的實體記憶體,但使用 PAE 和 450NX 晶片組時,即可破除此障礙。 Win2K 是第一個利用 PAE 的 Microsoft 作業系統 (Sun Solaris 7 和 SCO UnixWare 7 已經支援 PAE)。 實際上,Win2K 核心有一個特殊的組建,名為 ntkrnlpa.exe,包含內建支援。 NTLDR 是 Win2K 開機載入器,負責載入標準核心 ntoskrnl.exe 或啟用 PAE 功能的核心,根據系統是否能夠處理超過 4GB 的記憶體,且是否有 4GB 記憶體而定。
這三個新的 BOOT.INI 交換器,皆是設計用於處理大型記憶體系統 (系統超過 4GB) 的裝置驅動程式進行偵錯。 第一個交換器 /PAE 具有 NTLDR 載入的核心 PAE 版本,即使電腦目前沒有超過 4GB 的記憶體也可執行。 第二個交換器 /NOPAE 則會強制 NTLDR 載入標準核心。 最後一個交換器 /NOLOWMEM 具有 Win2K 核心,必須使用超過 4GB 的實體記憶體。 這會強制 Win2K 使用的所有實體位址,都必須有超過 32 位元來表示,因此會進行大型實體位址的裝置驅動程式處理。
您可在此找到最完整的 BOOT.INI 交換器清單:http://www.sysinternals.com/bootini.htm.
PSLIST V1.0
大部分的 UNIX 隨附命令列工具稱為「ps」,系統管理員會用來列出處理程序 CPU 和記憶體統計資料。 NT 具有對等的 GUI 型工具「工作管理員」,但 NT 沒有命令列版本。 Windows NT 資源套件包含兩個命令列的類「ps」工具:pstat 和 pumon。 PsList 會顯示 pstat 和 pumon 可用的資訊組合,但具有資源套件工具也沒有的功能:您可以使用 PsList 來查詢遠端系統上的處理程序資訊。
PsList 會採用數個旗標,可讓您檢視處理程序 CPU、記憶體或執行緒統計資料,也可讓您指定要查詢之不同 NT 電腦的交換器。 PsList 會使用 NT 的內建效能計數器來取得其顯示的資訊,而且可在 NT 3.51、4.0 和 Win2K 上運作。
您可在此下載 PsList:http://www.sysinternals.com/pslist.htm.
8 月「NT INTERNALS」
我在 8 月號 Windows NT 雜誌中的「NT Internals」專欄,撰寫了名為「Win2K 內部可靠性增強功能,第 1 部分」。 這系列文章有三篇,第一篇會探討 Win2K 功能,這類功能旨在協助系統管理員,如何處理系統無法開機的情況。 其中包括「安全模式」開機和「修復主控台」。
從 8 月初開始,Windows NT 雜誌文章的線上版本僅開放給訂閱者存取,且文章會隨每期新雜誌於線上發佈。 如果您尚未訂閱,請透過訂閱連結 (http://www.sysinternals.com/publ.htm) 取得 Sysinternals 訂閱折扣。
部分既有功能
如果您還沒有嚇壞朋友或兩個朋友,不妨參考一下 Sysinternals Bluescreen 螢幕保護裝置。 2.0 版在 Win2K 系統上執行時,會顯示 Win2K 版的 Blue Screen of Death (BSOD) 和 Win2K 啟動順序。 我可以很自豪地說,Bluescreen 螢幕保護裝置最近獲得了來自 Ziff-Davis 軟體圖書館的五顆星最高評價。
您可以在此下載 Bluescreen 螢幕保護裝置 v2.0:http://www.sysinternals.com/bluescrn.htm.
內部消息
更正重新:系統檔案保護
在最近一份電子報中,我指出 Win2K 的系統檔案保護 (SFP) 可藉由呼叫名為 SfcTerminateWatcherThread 的函式 SFP 匯出,讓 Service Pack (SP) 和熱修正程式等應用程式更新系統檔案。 雖然 SFP 會匯出該函式,但 SP 和熱修正在更新系統檔案時,不會使用函式。 相反地,SP 和熱修正能更新系統檔案,這是因為它們會以由 Microsoft 數位簽署的系統檔案取代現有的系統檔案。 SFP 會偵測更新,但允許使用舊檔案,因為 SFP 會驗證新檔案是否已經過數位簽署。 關於我的 SFP 探討範圍,還有另一項修正:在 Win2K Beta 3 之後,Microsoft 將 SFP 的名稱變更為 Windows 檔案保護 (WFP)。
請務必查看 Windows NT Magazine 的 9 月號,您可以在其中找到我的 NT Internals 專欄「Inside Win2K 可靠性增強功能,第 2 部分」,文中會詳細說明 WFP 和 Microsoft 數位檔案簽署的問題。
WIN2K RC1 DDK 已發行
現在您可以透過以下網址下載 Microsoft 裝置驅動程式開發工具組 (DDK) 的 Win2K RC1 版本:http://www.microsoft.com/ddk/ddk2kRC1.htm. 您可以免費下載工具組,或於線上瀏覽文件。
WIN2K AWE API
我已在本期電子報簡介中提到 AWE API,也引用了一個 Microsoft 網頁,如想進一步了解,可參考:http://www.microsoft.com/hwdev/NTDRIVERS/AWE.htm. 在具有超過 4GB 實體記憶體的系統上,Win2K 的 PAE 功能核心 - ntkrnlpa.exe - 能夠利用所有電腦的實體記憶體,而不需要修改應用程式。 Win2K 進階伺服器最多會使用 8GB 的實體記憶體,而 Win2K Datacenter Server 最多會使用 64GB 的實體記憶體。
雖然在大型記憶體系統上,每個應用程式最多都有 2GB 的虛擬記憶體可運用 (但如指定 /3GB BOOT.INI 交換器,則為 3GB),而指派給所有執行中應用程式實體記憶體的總和,可等於實體記憶體數量。 此外,在 Win2K 上,檔案系統快取會指派最多 960MB 的虛擬記憶體,但快取的檔案資料量,可能會比遠大於指派給快取的實體記憶體數量,並超過 960MB。
AWE API 可讓個別應用程式直接控制實體記憶體,並超過其虛擬位址空間大小所隱含的 2GB 或 3GB 限制。 AWE API 背後的基本概念是應用程式將其虛擬位址空間的一部分,指定為實體記憶體的「視窗」。 然後,應用程式會配置實體記憶體的區塊。 應用程式可配置的實體記憶體數量上限,必定是系統上的實體記憶體數量,減去由核心、裝置驅動程式和使用 AWE API 的其他應用程式,所配置的任何非分頁式記憶體數量。 應用程式想存取已配置實體記憶體的一部分時,會將記憶體對應至其虛擬位址視窗。 因此,應用程式可以使用指定對應存取的實體記憶體數量,受限於其保留的視窗大小。 最後,應用程式使用實體記憶體完畢後,只會釋放記憶體並關閉其所建立的虛擬位址視窗 (解除配置)。
對應至這些動作的 API 會由 kernel32.dll 匯出,如下所示:
- 應用程式會使用 MEM_PHYSICAL 和 MEM_RESERVE 旗標呼叫 VirtualAlloc,以建立虛擬位址視窗
- AllocateUserPhysicalPages 會為應用程式配置實體記憶體
- 應用程式會使用 MapUserPhysicalPages 將實體記憶體的部分對應到其視窗
- FreeUserPhysicalPages 可釋放應用程式配置的實體記憶體
應用程式直接操作多個 GB 記憶體的能力,在於使用需要大量記憶體的程式,例如資料庫伺服器、電子郵件伺服器、Web 伺服器、財務分析和科學應用程式。
雖然只有特定版本的 Win2K,才能使用超過 4GB 的實體記憶體,但所有版本都有 AWE API。 這表示,在具有 4GB 記憶體的 Win2K Professional 系統上,AWE API 仍可讓需要大量記憶體的應用程式在實體記憶體中管理超過 2 或 3GB 的資料。
AWE API 具有同等的核心模式介面,而 kernel32.dll 會以使用者模式 API 為基礎。 驅動程式可以使用 MmAllocatePagesForMdl 來配置實體記憶體,這是相當於 AllocateUserPhysicalPages 的核心模式。 此函式在 Win2K DDK ntddk.h 檔案中有原型,但並無記載。 其原型如下:
NTKERNELAPI
PMDL
MmAllocatePagesForMdl (
IN PHYSICAL_ADDRESS LowAddress,
IN PHYSICAL_ADDRESS HighAddress,
IN PHYSICAL_ADDRESS SkipBytes,
IN ULONG TotalBytes
);
LowAddress
是其想配置的最低可接受實體位址,最高則為 HighAddress。 SkipBytes 是應在 LowAddress
上方,以及開始配置實體記憶體的位址下方,保留核心可用的位元組數目。 TotalBytes
是驅動程式想要配置的位元組數目。 如果非零描述核心賦予驅動程式的實體記憶體,則函式的傳回值是 MDL。 若要存取記憶體的部分,驅動程式必須從傳回的 MDL 建立子 MDL,以描述實體記憶體的適當部分。 驅動程式想要存取子 MDL 所描述的實體記憶體時,就必須使用 MmGetSystemAddressForMdlSafe
對應子 MDL。
驅動程式會使用 MmFreePagesFromMdl
,相當於 FreeUserPhysicalPages
的核心模式,以釋放已配置 MmAllocatePagesForMdl
的實體記憶體。 此函式也會在 ntddk.h 中建立原型:
NTKERNELAPI
VOID
MmFreePagesFromMdl (
IN PMDL MemoryDescriptorList
);
請注意,驅動程式負責解除配置 MmAllocatePagesForMdl
傳回的 MDL,方法為呼叫 ExFreePool,因為 MmFreePagesFromMdl
不會釋放 MDL。
WINDEV '99 WEST
1999 West Coast 版本的 Windows 開發人員頂級會議即將來臨。 WinDev '99 West 將於 9 月 13 日至 18 日在加州聖塔克拉拉萬豪酒店舉行。 Windows 開發領域的一些風雲人物都會蒞臨並參與會談,包括 Jeff Richter、Jeff Prosise 和 Don Box 等。 我會和 Jamie Hanrahan 以及 Brian Catlin 一起參加裝置驅動程式討論。我的簡報會包含一整天的 NT internals 教學,還有在 Windows NT/2K 檔案系統驅動程式編寫,以及先進裝置驅動程式開發問題等議題。 歡迎共襄盛舉,並過來打個招呼吧!
歡迎造訪 WinDev West Web 頁面:http://www.butrain.bu.edu/windev/.
未來動態
NT 4.0 SP4 DISKEDIT
許多人可能沒發現,Windows NT 4.0 Service Pack 4 在其 CD 上隨附了一個 nifty 公用程式:DiskEdit。 這也難怪:因為這個工具不會安裝到硬碟上,也沒有說明文件,怪不得大家都沒注意到它的存在。 不過,我們幾乎可以確定,這是 Microsoft 檔案系統開發人員在內部使用的工具,只不過不小心附在 CD 上外流了。 如果錯過「適用 Windows NT 的 Norton 公用程式」磁碟編輯類型工具,或只是想探索 NTFS 和磁片上的 FAT 資料結構,就不能錯過 DiskEdit 這個好東西。 下一回,我會提供一些說明,告訴大家如何使用 DiskEdit。
感謝閱讀 Systems Internals 電子報。
發佈時間:1999 年 8 月 5 日星期四下午 7:13,發佈者:ottoh