1999年5月15日-此問題:

  1. 系統內部的新功能

    • SDelete
    • 藍屏螢幕保護裝置的 Win2K 更新
    • 「Linux 和 Enterprise」
    • 「在 NT 公用程式內」
    • 我的 Windows NT 雜誌專欄
    • 不是-新的東西
  2. 內部新聞

    • Dr. GUI 的 Bedside 形式不佳
    • WinDev ' 99 東部
    • Numega 驅動程式即將發行
    • Beta 3 DDK 已發行
    • Win2K 佇列的旋轉鎖
  3. 即將推出的內容

    • (SFP) 的 Win2K 系統檔案保護裝置

贊助商: WINTERNALS SOFTWARE

系統內部電子報是由 Winternals Software 贊助,網址為: http://www.winternals.com. Winternals Software 是 advanced systems tools for Windows NT 的領導開發人員和提供者/2K。 Winternals Software 產品包含 Windows NT 4.0 的 FAT32、ERD Commander (Windows NT) 的開機磁片功能,以及 NTRecover。

大家好,

歡迎使用系統內部電子報的第二個版本。 這份電子報目前有2700的訂閱者,訂用帳戶仍會有強大的訂閱。

自從上一期的電子報起,Microsoft 正式發行了 Windows 2000 Beta 3 版。 Beta 3 核心的組建編號是2031,而 NT 4.0 的初始發行核心是1381,而 NT 3.51 的組建編號是1025。 . 我發現奇怪的 (,有點令人討厭的) ,那就是 Microsoft 每次在每個工作) 天都執行完整的 (作業系統組建時,都會遞增組建編號,不過,核心的回報組建編號會反映其初始公開版本的組建編號。 例如,即使 NT 4.0 Service Pack 5 核心的實際組建編號遠高於1381,核心仍會將1381報告為組建編號。

Beta 3 版本的 Windows 2000 是針對開發人員群體的喚醒通話。 Microsoft 宣佈它將于10月寄送 Windows 2000,而 Beta 3 代表即將推出之功能的完整版本,因此開發人員可以開始撰寫新的產品,而不需要擔心即將變更的專案。

Windows 2000 隨附新的 api、分層服務和核心增強功能的許多。 設備磁碟機開發人員會特別看到的一項變更,就是 (BSOD) 的藍色螢幕已變更。 在舊版的 NT 中,BSOD 會顯示系統上所有驅動程式的連結時和載入位址資訊,以及當機時存在的堆疊傾印。 在 Windows 2000 中,只有停止代碼和相關聯的位址行 (s) (位址行會將一個或多個停止程式碼參數轉譯成設備磁碟機內的位置) 顯示,以及詳細資訊訊息。 支援訊息建議您檢查您的 BIOS 和硬碟設定,並停用磁碟重組軟體和病毒掃描程式,以避免再次發生損毀。 Microsoft 頂級支援 Services (PSS) 根據其經驗和客戶的意見反應來決定,而 NT 4 樣式的 BSOD 對於判斷損毀的原因並沒有説明。

我個人發現載入的驅動程式清單(尤其是堆疊傾印)在取得使用者的驅動程式 bug 報告時很有用,因為取得此資訊的方式比讓使用者傳送多 mb 損毀傾印更簡單且更快速。 我通常會根據堆疊傾印來隔離損毀的原因,並根據驅動程式清單中顯示的版本資訊來驗證使用者已載入的驅動程式版本。 我想知道您的想法:您想要看到 NT 4 樣式的 BSOD 向前 Windows 2000,還是新的 BSOD 格式夠了? 如果您有任何意見,請傳送電子郵件給我。 我將在下一張電子報中報告這項非正式輪詢的結果。 當我使用 BSODs 時,請務必查看受歡迎系統內部藍屏螢幕保護裝置的 Windows 2000 更新,這會在此問題中討論。

謝謝!

-Mark

系統內部的新功能

SDELETE

在 Windows NT 4.0 完成 C2 安全性分級需求的過程中,它會實行「物件重複使用保護」。 這表示當應用程式第一次存取資源時,會配置 NT 零檔案和記憶體資源應用程式。 這可防止應用程式建立大型檔案並檢查其內容,以查看先前儲存在磁片上的內容。 不過,「物件重複使用」保護的範圍並不是為了保護可被略過標準資源相關 Api 之應用程式存取的資源,或完全略過作業系統的資源。 例如,您可以使用磁片編輯器(例如資源套件的 DiskProbe)來檢查磁片未配置部分的內容。 這可讓您查看先前屬於已刪除檔案的資料。

許多環境都需要「安全刪除」功能。 這項功能可讓使用者永久刪除機密資料,讓略過作業系統保護設施的工具看不到該資料。 加密檔案系統 (EFS) 的問世強調了 Windows 2000 中的安全刪除設備需求。 當您加密先前未加密的檔案時,EFS 不會在釋出磁片配置時清除包含檔案未加密資料的磁片配置內容。 因此,即使您加密之檔案的作用中版本是安全的,但舊版本的檔案仍會存在於磁片的未配置部分中,直到遭到 NTFS 指派給這些部分的新檔案資料覆寫為止。

為了填補這個漏洞,我撰寫了 SDelete (安全的刪除) 。 它是一種命令列工具,不僅可讓您安全地刪除標準檔案,還可以安全地刪除任何先前已刪除的資料,這些資料存在於未配置的磁片部分中。 此外,它也適用于 Windows NT/2000 壓縮、加密和稀疏檔案,也就是需要使用磁碟重組 API 的檔案。 SDelete 會遵守美國國防部的清除和清理標準 DOD 5220.22-M,如此一來,您就可以確定刪除資料之後,它會永遠消失。

我會提供有關完整原始程式碼的 SDelete,以及其運作方式的說明,讓您可以查看它使用 defragmention API 的方式,讓您可以確認我的宣告是否可防止您的機密刪除資料被覆原。

You can find documentation on the Windows NT/2000 defragmentation API at http://www.sysinternals.com/defrag.htm. 下載具有完整原始程式碼的 SDelete http://www.sysinternals.com/sdelete.htm.

藍屏螢幕保護裝置的 WIN2K 更新

Microsoft 對 NT 啟動畫面和藍色螢幕的 BSOD 所做的變更, (在 Windows 2000 中的) 配置,讓系統內部的藍屏螢幕保護裝置需要進行重大更新。 為了繼續提供您最 BSOD 的真實性,我發行了2.0 版的螢幕保護裝置程式。 它不只會反映 BSOD 格式的變更,也會精確地模擬 Windows 2000 啟動畫面,並以旋轉進度 stripe 和進度列更新完成。 這其實是因為螢幕保護裝置會讓 2000 Windows 的專家使用者和開發人員更擅長。 當然,NT 4.0 藍屏螢幕保護裝置仍會顯示 NT 4.0 BSOD 和啟動畫面。

我要如何重新建立 Windows 2000 啟動畫面,而不是完全違反著作權法則? 我不會在螢幕保護裝置中包含 Windows 2000 啟動點陣圖圖形。 相反地,我會使用 DirectX 將圖形模式切換至啟動順序期間 Windows 2000 所使用的相同模式,然後我會參考 Windows 200 核心檔案的點陣圖資源 ntoskrnl.exe。 這些資源 (您可以藉由在 Visual Studio 中開啟 ntoskrnl.exe 的資源來加以查看,) 是核心所顯示的資源,也就是在啟動圖形實際為不同檔案的情況下,Windows 9x 執行作業的方式有所變更。 電腦 oem 看起來似乎有機會自訂 Windows 2000 的啟動體驗 .。。

您可以下載藍屏 http://www.sysinternals.com/bluescreen.htm. 如果您有與使用螢幕保護裝置程式滿意某人相關的幽默案例,請將它傳遞出去。

您可以在12月的 1997 Windows NT 雜誌 NT 內部專欄「在藍色畫面內」中,找到有關 BSODs 的方式和原因的詳細資訊。 系統內部的 [發行集] 頁面上的連結 http://www.sysinternals.com/publ.htm 會帶您前往該資料行的線上版本。 此頁面也包含我所撰寫之文章和專欄的其他線上簡報連結。

「LINUX 和企業」

在4月的 linux 核心的擴充性不足的 Windows NT 雜誌中,linux 團體的巨大回應會提示雜誌張貼文章的線上版本,並在排程之前張貼。 您可以在 [文章] 區段的「Linux 和 Enterprise」一文找到連結,網址是:http://www.sysinternals.com/publ.htm. 本文說明目前的 Linux 核心版本 (2.2 x) 的幾項限制,包括缺乏有效率的事件等候機制、重要的系統呼叫序列化、無異步 i/o,以及 NT 其稱為 TransmitFile) socket API 的 sendfile (不佳。 這些限制的組合可讓 Linux 在企業級的應用程式(例如網頁伺服器、資料庫伺服器和電子郵件伺服器)上,透過 NT 和其他 UNIXs (以效能為依據)來競爭。

「在 NT 公用程式內」

如果您曾經使用過 Filemon、Regmon 或 HandleEx,而且想要深入瞭解它們告訴您的內容,以及如何實行它們,那麼您就會對二月 Windows NT 雜誌專欄「在 NT 公用程式內」專欄感興趣。本專欄將說明這些工具的本質,並針對 Regmon 和 Filemon,告訴您在捕捉登錄或檔案系統活動時,所記錄的錯誤碼和要求類型。 這篇文章的線上版本連結(剛剛推出)位於: http://www.sysinternals.com/publ.htm.

我的 WINDOWS NT 雜誌專欄

您是否曾經想過 Windows NT/2000 如何組織記憶體中或磁片上的登錄內容? 目前的 (可能) Windows NT 雜誌的相關問題,包括「在登錄中」這裡面的專欄,告訴您這一點。 例如,瞭解設定管理員核心模式子系統如何 (負責管理登錄的子系統) 查閱金鑰、儲存價值資料、優化搜尋,以及保護登錄在磁片上的檔案完整性。 Windows NT 雜誌, http://www.winntmag.com 可在框線及 barnes and 和 Nobles 中取得。

不是-新的東西

在 Windows 2000 Beta 2 發行之後,我採用 (的) 組建來檢查核心影像檔案 (ntoskrnl.exe) ,在核心上進行字串搜尋,並取得用來建立核心的原始程式檔名稱清單。 NT/2000 核心的檢查組建包含許多 Assert 語句 (一致性檢查) ,其中包含判斷提示所在之檔案的檔案名。 假設核心來源中任何意義的幾乎每個檔案在其中都至少有一個判斷提示,則清單相當詳盡。 將清單傾印成 JAVA 腳本,讓我成為 Windows 2000 來源樹狀目錄中目錄結構的類似瀏覽器樹狀結構。 在 http://www.sysinternals.com/nt5src.htm. 立即了解

內部新聞

博士。 GUI 不佳的 BEDSIDE 形式

在3月/4 月的 Microsoft 開發人員網路新聞 Dr 的問題中,有一個讀者提出的問題,會詢問驅動程式如何將相似化為 (強制使用特定 CPU) 其執行緒。 Dr. GUI 會回應沒有辦法從驅動程式判斷系統上的處理器數目,而驅動程式執行緒無法分辨它正在執行的處理器。 可惜的是,震驚這種診斷 (可能是 Dr. 的 Dr. GUI) 。

NT kernel (ntoskrnl.exe) 會匯出 NTDDK 中定義的名為 KeNumberProcessors 的變數。H 為:

extern PCCHAR KeNumberProcessors;

這可以直接在驅動程式中參考,如下所示:

CHAR    i;

for( i = 0; i < *KeNumberProcessors; i++ ) {

    // do processor specific stuff
}

若要判斷驅動程式執行緒在哪個處理器上執行,請使用 KeGetCurrentProcessorNumber () ,這是另一個不只在 NTDDK 中定義的核心匯出。H.,其實是在 DDK 中記錄!

Dr. GUI 針對此困擾指定錯誤的藥物,所以我委婉地讓 Dr。透過禮貌的電子郵件來瞭解。 令人驚訝的是,Dr. GUI 從未認可過電子郵件。 我們會在下一期的錯誤中看到 fesses 是否有問題。

WINDEV ' 99 東部

適用于 Windows 開發人員之頂級會議的1999東部海岸版本很快就會達到。 WinDev ' 99 東部是在波士頓康橋 Marriot 的6月14-18 日進行。 在 Windows 開發中有許多龐大的名稱,包括 jeff Richter、jeff Prosise 和 Don Box。 在設備磁碟機的曲目中,我將會有曉明的 Hanrahan 和 Brian Catlin。我的簡報包含 NT 內部的一長時間教學課程,以及撰寫 Windows NT/2K 檔案系統驅動程式,以及一種先進的設備磁碟機開發問題。 說好!

NUMEGA 驅動程式即將發行

Compuware NuMega Labs 的 brink 是發行一個強大的新 Windows 9x/NT/2k 設備磁碟機開發工具組 DriverStudio。 DriverStudio 結合了所有 NuMega 的現有設備磁碟機工具(包括 DriverAgent、DriverWorks、SoftICE 和 VtoolsD),並為驅動程式和 BoundsChecker (Windows NT FieldAgent 只) 的驅動程式加入新的/2K。

BoundsChecker 的設備磁碟機版本提供您的驅動程式所使用之每個核心 API 的全面監視,您也可以使用它來監視驅動程式與系統上任何其他設備磁碟機的互動。 FieldAgent 可讓您將 BoundsChecker 的驅動程式版本部署至用戶端系統,讓用戶端可以為您收集可以分析的追蹤。 即將推出作為 DriverStudio 客戶的免費更新,會 TrueTime 驅動程式和 TrueCoverage 的驅動程式,可讓您輕鬆地調整效能,以及測試設備磁碟機的涵蓋範圍。

此封裝是終極的驅動程式開發工具組,而我 heartily 建議 (我在測試計劃) 。 深入瞭解 http://www.numega.com.

BETA 3 DDK 已發行

除了 Windows 2000 Beta 3 的發行版本之外,Microsoft 還提供免費下載的 Windows 2000 Beta 3 DDK (設備磁碟機套件) 。 您可以在此取得 DDK http://www.microsoft.com/ddk/ddk2kb3.htm. 我希望 SDK 即將完成,因為 Beta 3 中有許多 Win32 Api 在 MSDN 的四月版中並未記載。

WIN2K 佇列的旋轉鎖

Windows 2000 使用名為「佇列 spinlock」的新 spinlock 類型作為其全域鎖定。 Windows 2000 中的全域鎖定與 Windows NT 4.0 相同,並包括:

  • KiDispatcherLock:排程器資料庫鎖定
  • KiContext-SwapLock:踏板交換鎖定
  • MmPfnLock:實體頁面框架資料庫鎖定
  • MmSystemSpaceLock:核心模式位址空間鎖定
  • CcMasterSpinLock:快取管理員的全域 spinlock
  • CcVacbSpinLock:快取管理員的對應-陣列鎖定

在單處理器佇列的旋轉鎖上,其運作方式與一般的旋轉鎖一模一樣。 不過,在多處理器的 NT 組建中,佇列的旋轉鎖會有很大的不同。 如同標準的旋轉鎖,已排入佇列的旋轉鎖會實作為 HAL。 核心會呼叫 HAL 函數 KeAcquireQueuedSpinlock 來取得佇列 spinlock,並叫 KeReleaseQueuedSpinlock 用以釋出已排入佇列的 spinlock。 KeAcquireSpinlock 而且 KeReleaseSpinlock ,核心用來取得和釋放標準旋轉鎖的 HAL 函式,需要指定 spinlock 的位址做為參數。 相反地,佇列的 spinlock 函式會採用全域 spinlock 的索引編號。 核心會初始化陣列中的全域旋轉鎖,其中每個 spinlock 都有一個預先定義的索引編號,可供核心用來向 HAL 識別。 因此,裝置磁碟機無法定義和使用佇列的旋轉鎖,因為沒有任何方法可以擴充全域佇列的 spinlock 陣列。

在 Windows 2000 中,每個處理器控制區域 () 的 SMP 中,每個) 處理器都有一個 pcr (每個處理器都有一個具有任意數量的專案,因為佇列中的旋轉鎖。 每個陣列專案都包含兩個欄位:其對應于 ("spinlock" 欄位) 和 "queue" 欄位的佇列 spinlock 指標。 在下列描述中,當我參考 [spinlock] 和 [queue] 欄位時,我在討論與要取得或釋放之 spinlock 的陣列專案相關聯的欄位。

KeAcquireQueuedSpinlock 運作方式如下:此函式會嘗試使用連鎖交換 CPU 指令來取得 spinlock,以將目前處理器之 PCR 的位址放在 spinlock 中。 如果保留了 spinlock,則函式會在交換作業中包含其他處理器之 PCR 的位址。 然後,此函式會藉由切換其本身的 PCR 中 spinlock 欄位的低位,將本身識別為「等待中」。 接下來,它會將自己的 PCR 位址放入從 spinlock 抓取之 PCR 的 [佇列] 欄位中。 最後,它會等候忙碌迴圈,直到位關閉時,在 spinlock 欄位中關閉低位為止,然後目前的處理器已被授與 spinlock,因此它會返回取得函式的呼叫者。

在處理器取得佇列 spinlock 並完成它想要在持有鎖定時進行的處理時,會呼叫 KeReleaseQueuedSpinlockKeReleaseQueuedSpinlock 查看目前處理器之 PCR 中指定 spinlock 的隊欄欄位。 如果隊欄欄位不是零,則會有另一個處理器「已排入佇列」其 PCR。 KeReleaseQueuedSpinlock 清除等候 PCR 之 spinlock 欄位的低位,然後清除其本身的隊欄欄位並傳回。 藉由清除等候中的 PCR spinlock 欄位中的低位,它只會在下一次 CPU 有鎖定時發出信號。 如果隊欄欄位為零,則沒有其他處理器正在等候鎖定,而且只是 KeReleaseQueuedSpinlock 執行連鎖交換操作來清除全域 spinlock。

排入佇列的旋轉鎖是指處理器「啟動」以等待已保留的 spinlock。 每個處理器都會將其排入佇列,並在其等候的那一行告訴它。 這可讓您依序取得佇列 spinlock 處理器的取得順序,以要求的順序取得 spinlock。 針對標準的旋轉鎖,沒有這類順序。 排入佇列的旋轉鎖還有另一個顯著的優點。 當處理器等待 spinlock 欄位已清除低位時,就會在其本身處理器的私用記憶體上旋轉。 當處理器忙碌等候標準 spinlock 時,它會在全域 spinlock 本身(由所有處理器共用)上旋轉。 因此,已排入佇列的旋轉鎖具有更好的多處理器匯流排特性,因為在忙碌等候期間不會有共用的快取行存取。 此外,由於佇列旋轉鎖的佇列本質,通常會比標準的旋轉器更少,因為鎖定會在多個處理器的爭用下進行。

排入佇列的旋轉鎖是 Microsoft 針對 Windows 2000 進行多重處理擴充性的幾項增強功能之一。

即將推出的內容

Windows 2000 包含許多功能,可讓操作員錯誤和 misbehaved 應用程式更具彈性。 其中一個是和目錄下的許多 Dll 和驅動程式都會受到稱為「系統檔案保護裝置」 %systemroot%\system32%systemroot%\system32\drivers (SFP) 的看門狗所保護。 您可以藉由前往該目錄並重新命名來確認它是否存在 system32ntoskrnl.exe 。 監視程式將會喚醒,並通知您它偵測到受保護的系統檔案的篡改,並且正在修復。 如果您再次檢查目錄,將會發現您已 ntoskrnl.exe 被魔術地取代。 下一次我會告訴您這是如何運作的。


感謝您閱讀系統內部電子報。

依 ottoh 發佈星期六、5月15日 1999 7:15 PM

[電子報封存 ^][ 磁片區1,數位 1][磁片區1,數位 3 ]

[電子報封存 ^][ 磁片區1,數位 1][磁片區1,數位 3 ]

系統內部電子報第1、第2號

http://www.sysinternals.com