1999年4月14日-在此問題中:

  1. 系統內部的新功能

    • Windows 9x 的 VolumeID
    • EFSDump
    • 適用于 Compaq Alpha 的 ListDLLs
    • 「在開機過程中,第2部分」
    • 我的四月 Windows NT 雜誌文章
    • 未到期的信用額度
    • 不是-新的東西
  2. 內部新聞

    • Win2K 驅動程式驗證器
    • 使用 Boot.ini 的 Y2K 測試
  3. 即將推出的內容

    • 在 Win2K 中排入佇列的旋轉鎖
    • Tokenmon

贊助商: 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。

大家好,

歡迎使用系統內部電子報的第一篇文章。 我很高興說,電子報在一周前已經獲得了1000的訂閱者。

我在電子報中的目標是為您提供有關系統內部所出現之新公用程式和文章的即時資訊,並提供甜頭的資訊,讓您瞭解在系統內部網站沒有適當論壇的 Windows 內部。 如果您對電子報有任何意見或建議,請在 mark@ 時,隨意傳遞給我 .。。此外,請將電子報轉寄給您知道可能有興趣的任何人。 有關訂閱、取消訂閱或修改訂用帳戶的指示,請參閱本電子報的結尾。

謝謝!

-Mark

系統內部的新功能

WINDOWS 9X 的 VOLUMEID

雖然 Windows NT 和 Windows 9x 可讓您使用 "label" 命令變更邏輯磁碟機或磁片上的標籤,但它們不提供任何方法,讓您能夠在格式化磁片磁碟機時,變更它們所隨機指派的磁片區識別碼。 有一年的系統內部網站 Windows NT 可使用的 VolumeID 程式,只是移植到 Windows 9x。 此小程式可讓您將硬碟和磁片區的磁片區識別碼變更為您想要的任何內容。

VolumeID 使用的 Api 可讓應用程式直接讀取和寫入邏輯磁片磁碟機,而在 Win9x 上,實體磁片磁碟機 (磁片) )略過檔案系統。 在 Windows NT/2K VolumeID 使用一般 ReadFile 和 WriteFile 來存取原始磁片磁碟機資料,其秘訣在於其如何指定所要存取之磁片區的名稱。 您可以從 Microsoft 知識庫文章 Q100027 的 Windows NT/2K,瞭解如何從應用程式存取實體或邏輯磁片磁碟機。 針對 Windows 9x 存取邏輯磁碟機,您可以根據 Microsoft 知識庫文章 Q174569 中提供的範例程式碼來撰寫程式碼。 如果您需要在 Windows 9x 上從您的應用程式執行直接磁片磁碟機存取,請使用 MSDN 中記載的 Win32 IOCTL VWIN32_DIOC_DOS_INT13。

下載 VolumeID 于 http://www.sysinternals.com/misc.htm.

EFSDUMP

Windows 2000 將是 Microsoft 內建檔案加密技術的首次推出,也就是加密檔案系統。 使用 EFS 提供許多新的 Api 來管理加密的檔案,包括一個 QueryUsersOnEncryptedFile,可讓您查看哪些使用者已註冊以存取加密檔案,以及哪些使用者註冊為這些檔案的復原代理程式。 我撰寫了一個小程式,稱為 EFSDump,可讓您輕鬆地查看系統上加密檔案的這種資訊。

雖然我在使用 EFS api,但有許多新的 api 未記載于四月的 MSDN,但在 Windows 2000 發行週期的這個晚期階段有很大的影響。 最值得注意的是,OpenEncryptedFileRaw、ReadFileEncryptedRaw、WriteFileEncryptedRaw 和 CloseEncryptedFileRaw (全部都是由 Win2K's ADVAPI32.DLL) 所有目前未記載。 任何想要備份加密檔案的應用程式都需要使用這些 Api,這表示 Microsoft 只會將這些 Api 的相關資訊傳遞給精選合作夥伴,或備份軟體公司必須加密,才能在 Microsoft 最後公開記載這些檔案時取得其產品。 其中一個問題是,Windows 2000 的 NTBACKUP 程式開發人員已經有 api 檔的存取權: Win2K Beta 3 的 ntbackup 正在積極使用 api。

如果您對 efs 內部有興趣,請務必在 Windows NT 雜誌的「NT 內部」專欄中,查看即將推出的「NT 內部」資料行中的 < 6 月/7 月兩部分系列。 在本文中,我會確切描述 FEKs (檔案加密金鑰) 和使用者 EFS 金鑰的儲存位置、NTFS、EFS 驅動程式和 LSASRV 如何 (本地安全機構子系統伺服器) ,以及解密的運作方式。

下載具有完整原始程式碼的 EFSDump,網址為 http://www.sysinternals.com/misc.htm.

適用于 COMPAQ ALPHA 的 LISTDLLS

系統內部 Alpha 的可用公用程式數量會持續增加。 最新的新增功能是 ListDLLs,這是一個命令列公用程式,可讓您查看 DLL 資訊以執行進程。 我的 HandleEx 工具可讓您查看這項資訊,以及處理常式已開啟之控制碼 (檔、進程、執行緒、同步處理物件) 的相關資訊,但 HandleEx 是 GUI 工具,因此它不一定方便 (無法在批次檔內執行,例如) 。

您是否想知道將 x86 版的一般系統內部公用程式下載到其對應 Alpha 版本的比率? 它大約是20:1,它會密切地追蹤已安裝之 Alpha NT 使用者群的產業估計,以及 NT 市場總計的5%。

您可以下載 ListDLLs 和其他 Alpha 埠(包括 HandleEx),網址為: http://www.sysinternals.com/alpha.htm.

「在開機過程中,第2部分」

Windows NT 雜誌的1月份「NT 內部」專欄現在可透過 Windows NT 雜誌網站線上取得。 您可以在系統內部的 [發行集] 頁面中找到它的連結,以及第1部分和較舊的「NT 內部」資料行: http://www.sysinternals.com/publ.htm.

我的四月 WINDOWS NT 雜誌文章

此外,請務必看看我在「Linux 和 Enterprise」 Windows NT 雜誌的四月問題中的功能文章。 我發現 linux 2.2 核心和網路伺服器應用程式 ( 「企業」應用程式的幾個重大問題,) 這些應用程式最終會防止此版本的 linux 核心在效能方面與 NT 和其他 UNIX 變異競爭。

未到期的信用額度

在相關的附注中,您可能聽說過最近發行的 D.H. 棕色 (分析師公司) 以 Linux 的功能作為企業作業系統。 結果是,報表的作者從他在1月公開張貼至 Linux 核心 Usenet 新聞群組的電子郵件中「借用」。 如果您有報表的存取權,並閱讀 (44 和 45) 討論 Linux 和多重處理器的頁面 ( 報表無法公開取得-您必須購買等於沉重總和) ,然後在似曾相識新聞中閱讀我的電子郵件,您將會看到直接平行、最小的詳細資料。

不是-新的東西

我使用本電子報的這一節,將最近的變更帶到您可能不知道的系統內部網站,以及/或提供與網站上所提供的公用程式相關的詳細資訊。 例如,在幾周前,我們發行了 Filemon 4.1 版。 此版本的 Filemon 可以監視 Windows NT/2K. 的具名管道和郵件位置活動 支援這項功能所需的程式碼增強功能相對較小,因為具名管道和 Mailslots 會實作為檔案系統驅動程式。 困難的部分 (繁瑣的) 是找出私用 IOCTLs (的 i/o 控制命令) 這些特殊的檔案系統支援,讓 Filemon 能夠顯示這些命令。 您可以下載 Filemon (,其適用于 Windows NT/2K 和 Windows 9x) http://www.sysinternals.com/filemon.htm.

如果您想要深入瞭解 Filemon 在內部的運作方式,請參閱我的二月 Windows NT 雜誌的「nt 內部」專欄,其為「在 nt 公用程式中」。 本文說明如何使用 Filemon、Regmon、NTFSDOS、NewSID 和 HandleEx,並告訴您一些如何運作。

內部新聞

WINDOWS 2000 驅動程式驗證器

Windows 2000 Beta 3 推出了一個非常強大的裝置驅動程式開發輔助工具,稱為驅動程式驗證器。 這項工具適用于核心中的程式碼,可控制您的驅動程式,並以先前不可能的方式,使用它來遵循核心模式規則。 如果有錯誤的設備磁碟機,則在 NT 是不穩定的作業系統的情況下,這項信譽最重要的是,這項工具的目標是要協助驅動程式作者在使用者進行之前找到其錯誤,藉此修復該信譽。

有數種類型的微妙問題可以讓它透過單純的驅動程式測試, (最常見的測試類型在合理的上市時間限制下) ,甚至是透過嚴重的壓力測試來進行。 其中一種常見的驅動程式問題,就是存取分頁記憶體的驅動程式,以「提高的 IRQL」 (高中斷優先順序) 。 如果在存取時,驅動程式所存取的記憶體實際上會存在, (未將其分頁至分頁檔) ,則不會忽略不合法的存取。 將違反這項規則的驅動程式釋出到實際的使用者,並將其系結在一起,進而出現藍色的螢幕損毀。

另一種常見的驅動程式程式設計錯誤,是為了讓開發人員撰寫程式碼,並假設分頁及/或非分頁式記憶體一律可供使用,也就是它們不會檢查分配的傳回值。 如果集區已用盡且驅動程式收到 Null 緩衝區位址,驅動程式會 merrily 將系統的取值為藍色螢幕。 雖然集區耗盡很罕見,但它並不是應該提供藍色螢幕的系統管理員。 相關的記憶體 bug 是緩衝區溢位或不足的情況,其中驅動程式會在其所配置的緩衝區外讀取或寫入。

驅動程式驗證器會藉由取代在驅動程式中操作 IRQLs 之所有函式的呼叫來解決 IRQL 問題 (例如 KeRaiseIrqlKeAcquireSpinLock 使用對應的 Verifier 核心函式) (VerifierKeRaiseIrqlVerifierKeAcquireSpinLock) 在驅動程式載入時。 只要將 IRQL 引發至 DISPATCH_LEVEL 或更高版本,驗證程式程式碼就會呼叫內部記憶體管理員函式, MmTrimAllPageableSystemMemory() 以強制所有分頁的資料用盡實體記憶體。 如此一來,驅動程式就會中斷無法從或更高版本存取可分頁資料或程式碼的 IRQL 規則 DISPATCH_LEVEL ,記憶體管理員將會偵測到嘗試存取不存在的頁面,並擲回藍色的畫面。 這可讓開發人員在驅動程式取得大門之前快速攔截這些類型的錯誤,因為它們可以偵測損毀,並查看其在錯誤堆疊上的驅動程式。

驅動程式驗證器會使用它來測試要驗證的驅動程式匯入資料表,以便驅動程式呼叫 Verifier 記憶體函式,而不是標準核心版本。 例如,的呼叫 ExAllocatePool 會取代為的呼叫 VerifierAllocatePool 。 有兩種技術可讓驗證器用來協助開發人員快速找出記憶體錯誤。 第一種方式是使用特殊的記憶體集區,其中 guard 頁面 (防護頁面是不正確頁面) 放置於緩衝區結尾的正上方。 此外,在緩衝區之前配置緩衝區的頁面部分會填入簽章。 在超過緩衝區結尾的頁面內,會立即偵測到溢出,因為它們會在防護頁面上產生不合法的分頁錯誤。 當驅動程式解除配置記憶體時,驗證器會偵測到需要修改緩衝區前面資料的不足,因為簽章將會變更。

一律會預期非空白集區的驅動程式,會因為使用其「記憶體錯誤插入」,而被驗證器產生損毀。 您可以設定讓驗證器隨機失敗驅動程式的集區配置。

驅動程式驗證器會檢查一些其他錯誤類型,包括 IRP (i/o 要求封包) 一致性,以及系統和驅動程式字碼頁的唯讀保護。

如果您是設備磁碟機開發人員,您將會使用驗證器來執行自己、公司和 NT 社區。 請注意,當您可以存取驅動程式驗證器時,您也應該測試與 Win2K 相容的 NT 4.0 驅動程式 (大部分的開發人員都可以在4月5月底或可能) 的情況下,使用 MSDN 的 Win2K Beta 3 出貨。

您可以在下面找到有關驅動程式驗證器的詳細資訊: https://docs.microsoft.com/windows-hardware/drivers/devtest/driver-verifier

使用 BOOT.INI 的 Y2K 測試

如果您經常檢查系統的內部網站,您可能已經知道新的 Win2K 未記載 BOOT.INI 交換器/YEAR。 我不在網站上提到,NT 4.0 Service Pack 4 也支援此參數。 此參數可讓您在 NT 系統上欺騙 NT 和所有軟體,以為它的年份不同。 例如,/YEAR = 2001 會讓系統認為它是2001,而不是1999。 因此,此參數非常適合用來測試任何層級軟體的 Y2K 問題,而是使用它,而不是透過時鐘小程式手動重設 BIOS 時鐘 (,例如) 是當您開機至在其 BOOT.INI 行中有參數的安裝時,此變更是暫時性的,而且只是作用中。 這可讓您輕鬆地建立特殊的 Y2K 安裝,方法是從 BOOT.INI 取得現有的開機線路、複製它,然後新增/YEAR 交換器。

即將推出的內容

在幾周內預期下一份電子報。 接下來我將為您提供的內部秘訣,是關於已排入佇列的旋轉鎖,這是一種新類型的 spinlock,Windows 2000 用於其全域旋轉鎖。 以下是存在於 Windows 2000 中的全域旋轉鎖:

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

Windows 2000 核心會使用佇列的旋轉鎖 (KeAcquireQueuedSpinLock、KeReleaseQueuedSpinLock) ,而不是使用一般的核心旋轉鎖 (KeAcquireSpinLock,KeReleaseSpinLock 這些全域鎖定的) 做為 NT 4.0。 這些鎖定有一些有趣的屬性,會將 SMPs 上的匯流排活動最小化。 下一次我會告訴您如何執行排入佇列的旋轉鎖。

系統內部的即將推出 Tokenmon,還有另一個監視工具。 Tokenmon 會顯示您系統上所有與權杖相關之活動的詳細資訊,包括登入、登出、許可權的使用和模擬。


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

Ottoh 在1999年4月14日星期三發行,下午7:16

[電子報封存 ^][磁片區1,第2號 ]

[電子報封存 ^][磁片區1,第2號 ]

系統內部電子報第1個,第1篇

http://www.sysinternals.com