[ニュースレター アーカイブ ^] [Vol. 1、No. 2 >]

Systems Internals ニュースレター Vol. 1、No. 1

http://www.sysinternals.com


1999 年 4 月 14 日 - 本号の内容:

  1. Systems Internals の新機能

    • Windows 9x 用 VolumeID
    • EFSDump
    • ListDLLs for Compaq アルファ版
    • "起動プロセスの内部、パート 2"
    • Windows NT Magazine 4 月号の記事
    • 必要なクレジットがない
    • 新しくない内容
  2. 内部ニュース

    • Win2K ドライバー検証ツール
    • Boot.ini を使用した Y2K テスト
  3. 近日公開予定

    • Win2K のキューのあるスピンロック
    • Tokenmon

スポンサー: WINTERNALS SOFTWARE

Systems Internals ニュースレターは、http://www.winternals.com. の Web で Winternals Software によって後援されています。 Winternals Software は、Windows NT/2K 用の高度なシステム ツールの主要な開発者およびプロバイダーです。 Winternals Software 製品には、FAT32 for Windows NT 4.0、ERD コマンダー (Windows NT 向けブート ディスク機能)、NTRecover などがあります。

皆さん、こんにちは。

Systems Internals ニュースレターの第 1 号へようこそ。 うれしいことに、このニュースレターは 1 週間ほど前の発表以来、すでに 1,000 人の購読者を獲得しています。

このニュースレターの目的は、Systems Internals に掲載される新しいユーティリティや記事に関するタイムリーな情報を提供することと、Systems Internals Web サイトに適切なフォーラムがない Windows の内部に関するちょっとした情報を提供することです。 ニュースレターに関するご意見やご提案がございましたら、mark@... までお気軽にお寄せください。また、ニュースレターに興味をお持ちのお知り合いの方がいましたら、このニュースレターを転送してください。 購読、購読の中止、または購読の変更に関する手順は、ニュースレターの最後に記載されています。

ありがとうございます。

-Mark

Systems Internals の新機能

Windows 9x 用 VolumeID

Windows NT および Windows 9x では、"label" コマンドを使用して論理ドライブまたはフロッピー ディスク上のラベルを変更できますが、ドライブのフォーマット時に任意に割り当てるボリューム ID を変更できる手段はありません。 VolumeID プログラムは、Systems Internals サイトで Windows NT 向けに 1 年以上提供されてきましたが、このほど Windows 9x に移植されました。 このアプレットを使用すると、ハード ドライブやフロッピー ディスク上のボリューム ID を必要に応じて変更できます。

VolumeID は、アプリケーションがファイル システムをバイパスして論理ドライブ、および Win9x では物理ドライブ (フロッピー ディスク) に直接読み書きできるようにする API を使用しています。 Windows NT/2K では、VolumeID は通常の ReadFile および WriteFile を使用して生のドライブ データにアクセスします。そのトリックは、アクセスするボリュームの名前を指定する方法にあります。 Windows NT/2K でアプリケーションから物理ドライブまたは論理ドライブにアクセスする方法については、Microsoft サポート技術情報の記事 Q100027 を参照してください。 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 が多数用意されています。その 1 つである QueryUsersOnEncryptedFile を使用すると、どのユーザーが暗号化されたファイルにアクセスできるように登録されているか、どのユーザーがそれらのファイルの回復エージェントとして登録されているかを確認できます。 私は、システム上の暗号化されたファイルの情報を簡単に確認できるようにする EFSDump という小さなプログラムを作成しました。

私は EFS API をテーマにしていますが、4 月の MSDN の時点では文書化されていない新しい API が多数あります。これは、Windows 2000 リリース サイクルのこの後期段階において非常に気がかりなことです。 特に、OpenEncryptedFileRaw、ReadFileEncryptedRaw、WriteFileEncryptedRaw、CloseEncryptedFileRaw (すべて Win2K のADVAPI32.DLL によってエクスポートされる) はすべて、現在文書化されていません。 暗号化されたファイルをバックアップするアプリケーションでは、これらの API を使用する必要があります。つまり、Microsoft が暗号化ファイルに関する情報を一部のパートナーにのみ渡すか、最終的に Microsoft がドキュメントを公開したときに、バックアップ ソフトウェア企業が、自社製品を出荷するために奔走しなければならなくなるということを意味します。 1 つ確かなことは、Windows 2000 の NTBACKUP プログラムの開発者はすでに API ドキュメントにアクセスしているということです。Win2K Beta 3 の NTBACKUP では積極的に API が使用されています。

EFS の内部に興味のある方は、Windows NT Magazine のコラム「NT Internals」で、6 月と 7 月に EFS に関して 2 回にわたって連載する予定ですのでぜひご覧ください。 この記事では、FEK (ファイル暗号化キー) とユーザー EFS キーが保存される場所、NTFS、EFS ドライバー、LSASRV (Local Security Authority Subsystem Server) による暗号化プロセスの実行方法、および暗号化解除のしくみについて正確に説明します。

完全なソース コードを含む EFSDump は http://www.sysinternals.com/misc.htm. からダウンロードしてください。

ListDLLs for Compaq アルファ版

利用可能な Systems Internals のアルファ版のユーティリティの数は増え続けています。 最新の追加は、実行中のプロセスの DLL 情報を表示できるコマンド ライン ユーティリティである ListDLLs です。 HandleEx ツールを使用すると、この情報に加えて、プロセスが開いたハンドル (ファイル、プロセス、スレッド、同期オブジェクト) に関する情報も確認できますが、HandleEx は GUI ツールであるため、必ずしも便利ではあるとは限りません (たとえば、バッチ ファイル内で実行することはできません)。

一般的な Systems Internals ユーティリティの x86 版と、それに対応するアルファ版のダウンロード数の比率が気になりませんか? これは約 20:1 であり、インストールされているアルファ版 NT ユーザー ベースが NT 市場全体の 5% であるという業界の推定値とほぼ一致しています。

ListDLL とその他のアルファ版 (HandleEx を含む) は、http://www.sysinternals.com/alpha.htm. からダウンロードできます。

"起動プロセスの内部、パート 2"

Windows NT Magazine の 1 月号のコラム「NT Internals」が、Windows NT Magazine Web サイトからオンラインでご覧いただけるようになりました。 そのリンクと、パート 1 以前の「NT Internals」コラムへのリンクは、Systems Internals の出版物ページで確認できます: http://www.sysinternals.com/publ.htm.

Windows NT Magazine 4 月号の記事

Windows NT Magazine 4 月号の特集記事「Linux とエンタープライズ」もぜひご覧ください。 Linux 2.2 カーネルとネットワーク サーバー アプリケーション ("エンタープライズ" アプリケーション) に関して、最終的にこのバージョンの Linux カーネルがパフォーマンスの面で NT や他の UNIX バージョンと真っ向から競争するのを妨げる、いくつかの重要な問題を明らかにしています。

必要なクレジットがない

これに関連して、エンタープライズ オペレーティング システムとしての Linux の機能について、D.H. Brown (アナリスト企業) が最近リリースしたのをご存知でしょうか。 このレポートの作成者は、1 月に誰かが Linux カーネル Usenet ニュース グループに公に投稿した私のメールを大幅に "拝借" していたことが判明しました。 このレポートにアクセスして、Linux とマルチプロセッサに関するページ (44 および 45) を読んで (レポートは一般に公開されていないため、高額で購入する必要がある)、Deja News で私のメールを読むと、細部に至るまでそっくりなことがわかります。

新しくない内容

ニュースレターのこのセクションでは、あまり気付かれていないような Systems Internals サイトの最近の変更を表示したり、ユーティリティについてサイトで入手可能できるものよりも詳しい情報を提供したりしています。 たとえば、数週間前に Filemon v4.1 をリリースしました。 このバージョンの Filemon では、Windows NT/2K で名前付きパイプとメール スロットの両方のアクティビティを監視できます。 名前付きパイプとメールスロットはファイル システム ドライバーとして実装されているため、これをサポートするために必要なコードの拡張は比較的軽微なものでした。 難しい (面倒な) 部分 は、Filemon で表示できるように、これらの特殊なファイル システムがサポートするプライベート IOCTL (I/O 制御コマンド) を把握することでした。 Filemon (Windows NT/2K および Windows 9x で動作) は http://www.sysinternals.com/filemon.htm. からダウンロードできます。

Filemon の内部的な動作の詳細については、Windows NT Magazine 2 月号のコラム「NT Internals」の「NT ユーティリティの内部」を参照してください。 この記事では、Filemon、Regmon、NTFSDOS、NewSID、HandleEx の使用方法について説明し、それらの機能について少し紹介しています。

内部ニュース

Windows 2000 ドライバー検証ツール

Windows 2000 Beta 3 では、ドライバー検証ツールと呼ばれる非常に強力なデバイス ドライバー開発支援機能が導入されています。 このツールは、カーネル内のコードと連携してドライバーを制御し、以前は不可能だった方法でカーネル モード規則に準拠しているかどうかを調べます。 バグの多いデバイス ドライバーは、NT が不安定なオペレーティング システムであるという多くの人々の評判に、最も大きな影響を与えています。このツールは、ドライバー作成者がユーザーよりも先にバグを見つけるのを助けることによって、その評判を修復することを目的としています。

いくつかの種類の検出が難しい問題は、カジュアルなドライバー テスト (市場投入までの厳しい時間的制約の下で実行される最も一般的なタイプの種類) を通貨する可能性があり、きびしいストレス テストを通過してしまう可能性もあります。 一般的なドライバーの問題の種類の 1 つに、ドライバーが "昇格された IRQL" (高い割り込み優先度) でページングされたメモリにアクセスすることあります。 ドライバーがアクセスするメモリがアクセス時に物理的に偶然存在していると (ページング ファイルにページングされていないと)、不正なアクセスは気付かれません。 このルールに違反するドライバーをユーザーの世界にリリースすると、それは必ず姿を現し、その結果、ブルー スクリーン クラッシュが発生します。

もう 1 つの種類の一般的なドライバー プログラミング エラーは、開発者が、ページングおよび非ページング メモリまたはそのいずれかが常に使用可能であるという前提でコードを作成することです。つまり、割り当ての戻り値がチェックされていません。 プールが不足し、ドライバーが NULL バッファー アドレスを受け取った場合、ドライバーは喜んでシステムを逆参照してブルー スクリーンを表示します。 プールが枯渇することはまれなことですが、システム管理者にブルー スクリーンを表示するようなことではありません。 関連するメモリ バグとして、ドライバーが割り当てられたバッファーの外部で読み取りまたは書き込みを行うバッファー オーバーランまたはアンダーランがあります。

ドライバー検証ツールは、ドライバーの読み込み時に、ドライバー内の IRQL を操作するすべての関数 (例: KeRaiseIrqlKeAcquireSpinLock) の呼び出しを、対応する検証ツールのカーネル関数 (VerifierKeRaiseIrqlVerifierKeAcquireSpinLock) に置き換えることによって、IRQL の問題に対処します。 IRQL が DISPATCH_LEVEL 以上に引き上げられるたびに、検証ツールのコードは内部のメモリ マネージャー関数 MmTrimAllPageableSystemMemory() を呼び出し、ページングされたすべてのデータを物理メモリから強制的に取り出します。 したがって、ドライバーが DISPATCH_LEVEL 以上のページング可能なデータまたはコードにアクセスしないという IRQL の規則に違反すると、メモリ マネージャーは存在しないページへのアクセスの試行を検出し、ブルー スクリーンをスローします。 これにより、開発者はクラッシュをデバッグし、ドライバーが障害スタック上に存在することを確認できるため、ドライバーを外に出す前に、これらの種類のバグをすばやく発見できます。

ドライバー検証ツールは、ドライバーが標準のカーネル バージョンの代わりに検証ツールのメモリ関数を呼び出すように、検証対象のドライバーのインポート テーブルにパッチを適用することで、メモリ使用量テストを実行します。 たとえば、ExAllocatePool の呼び出しは VerifierAllocatePool の呼び出しに置き換えられます。 検証ツールは、開発者がメモリのバグをすばやく発見できるように、2 つの手法を使用しています。 1 つ目は、バッファーの終端のすぐ後にガード ページ (ガード ページが無効なページ) が配置される特別なメモリ プールを使用することです。 さらに、バッファが割り当てられているページのバッファより前の部分には署名が埋められます。 バッファーの終端を超えたページ内のオーバーランは、ガード ページで無効なページ フォールトを引き起こすため、すぐに検出されます。 バッファーに先行するデータの変更を伴うアンダーランは、署名が変更されるため、ドライバーがメモリーの割り当てを解除するときに検証ツールによって検出されます。

空でないプールを常に想定しているドライバーは、検証ツールの "メモリ フォールト インジェクション" を使用することで騙されてクラッシュを生成します。 ドライバーのプール割り当てをランダムに失敗させるように検証ツールを構成できます。

ドライバー検証ツールがチェックするその他のエラーの種類は、IRP (I/O 要求パケット) の整合性、システムおよびドライバー コード ページの読み取り専用保護など、他にもいくつかあります。

あなたがデバイス ドライバー開発者であれば、検証ツールを使用してテストすることは、自分自身、自分の会社、そして NT コミュニティに貢献することになるでしょう。 ドライバー検証ツールにアクセスできるようになったらすぐに (ほとんどの開発者は、4 月下旬または 5 月に、MSDN から Win2K Beta 3 が出荷される際に受け取ります)、Win2K と互換性のある NT 4.0 ドライバーもテストする必要があることに注意してください。

詳細については、「ドライバーの検証ツール」を参照してください。

Boot.ini を使用した Y2K テスト

Systems Internals Web サイトを頻繁にチェックしている方は、文書化されていない新しい Win2K の BOOT.INI スイッチ、/YEAR についてはすでにご存じかもしれません。 Web サイトでは、このスイッチが NT 4.0 Service Pack 4 でもサポートされていることについて言及していませんでした。 このスイッチを使用すると、NT と NT システム上のすべてのソフトウェアをスプーフィングして、別の年であるかのように装うことができます。 たとえば、/YEAR=2001 と指定すると、システムは 1999 年ではなく 2001 年であると認識します。 したがって、このスイッチは、あらゆるレベルのソフトウェアで Y2K 問題をテストするのに最適です。また、BIOS クロックを (たとえば、クロック アプレット経由で) 手動でリセットする代わりにこのスイッチを使用する利点は、変更が一時的であり、BOOT.INI 行にこのスイッチが存在するインストール環境を起動した場合にのみアクティブになることです。 これにより、BOOT.INI から既存のブート行を取得して複製し、/YEAR スイッチを追加するだけで、特別な Y2K インストール環境を簡単に作成できます。

近日公開予定

次回のニュースレターは数週間後にお届けします。 次回は、内部構造のヒントとして、Windows 2000 がグローバル スピンロックに使用する新しい種類のスピンロックであるキュー スピンロックについて説明します。 Windows 2000 に存在するグローバル スピンロックを次に示します。

  • KiDispatcherLock: スケジューラ データベース ロック
  • KiContext-SwapLock: トレッド スワップ ロック
  • MmPfnLock: 物理ページ フレーム データベース ロック
  • MmSystemSpaceLock: カーネル モード アドレス空間ロック
  • CcMasterSpinLock: キャッシュ マネージャーのグローバル スピンロック
  • CcVacbSpinLock: キャッシュ マネージャーのマッピング配列ロック

Windows 2000 カーネルは、NT 4.0 と同様にこれらのグローバル ロックに通常のカーネル スピンロック (KeAcquireSpinLock、KeReleaseSpinLock) を使用する代わりに、キュー スピンロック (KeAcquireQueuedSpinLock、KeReleaseQueuedSpinLock) を使用します。 これらのロックには、SMP でのバス アクティビティを最小限に抑える興味深いプロパティがいくつかあります。 次回は、キュー スピンロックがどのように実装されているかを説明します。

Systems Internals では、もう 1 つの監視ツールである Tokenmon が近日公開予定です。 Tokenmon は、ログイン、ログアウト、特権の使用、偽装など、システム上のすべてのトークン関連のアクティビティに関する詳細情報を表示します。


Systems Internals ニュースレターをお読みいただき、ありがとうございました。

公開日: 1999 年 4 月 14 日 (水) 午後 7:16 by ottoh

[ニュースレター アーカイブ ^] [Vol. 1、No. 2 >]