共用方式為


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

Systems Internals 電子報第 1 卷第 4 期

http://www.sysinternals.com
Copyright (C) 1999 Mark Russinovich


1999 年 8 月 5 日 - 本期內容:

  1. Sysinternals 最新動向

    • Portmon v3.0
    • Frob v1.5
    • ListDLLs v2.1
    • 新增 BOOT.INI 選項
    • PsList v1.0
    • 8 月「NT Internals」
    • 部分既有功能
  2. 內部消息

    • 更正重新:系統檔案保護
    • Win2K RC1 DDK 已發行
    • Win2K AWE API
    • WinDev '99 West
  3. 未來動態

    • 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

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