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

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

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


2001 年 8 月 20 日 - 本号の内容:

  1. 論説

  2. SYSINTERNALS の新機能

    • Process Explorer v5.1
    • Handle v2.0
    • PsInfo v1.1
    • PsExec v1.24
    • PsLogList v2.07
    • Windows XP のソース レイアウト
    • DebugView v4.13
    • PageDefrag v2.1、Contig v1.41
    • Microsoft の Sysinternals
  3. INTERNALS INFORMATION

    • Inside Windows 2000、対話型 DVD
    • 開催日の紹介: Russinovich と Solomon がオースティンで一緒に講義する
    • コマンド ライン ディスク管理
    • WINHEC 2001 のオンライン スライド
    • XP の新しいファイル システム フィルター ドライバー インターフェイス
    • キー ストロークで Windows をクラッシュさせる
    • Windows XP のプリフェッチ
    • Windows .NET Connections
  4. 近日公開予定

    • 私の Itanium エクスペリエンス

スポンサー: WINTERNALS SOFTWARE

Sysinternals ニュースレターは、http://www.winternals.com. の Web で Winternals Software によって後援されています Winternals Software は、Windows NT/2K/XP 用の高度なシステム ツールの主要な開発者およびプロバイダーです。 Winternals Software 製品には、Wdinows NT 4.0 用 FAT32、NTFSDOS Professional Edition (DOS 用の読み取り/書き込み NTFS ドライバー)、およびリモート回復が含まれます。

Winternals は、最も高速で最も完全なエンタープライズ デフラグ ツールである Defrag Commander バージョン 1.31 を発表したことを誇りに思っています。 NT または Windows 2000 システムにクライアント ソフトウェアをインストールしなくても、シンプルな MMC スナップインから Windows エンタープライズ全体のデフラグ スケジュールを管理できるようになりました。 10 システムのライセンスは、わずか 169 ドルでオンライン購入が可能で、積極的な数量割引も用意されています。 詳細については、またはダウンロードして 30 日間無料で使用するには、http://www.winternals.com/39 を参照してください。

皆さん、こんにちは。

Sysinternals ニュースレターへようこそ。 現在、ニュースレターの購読者数は 33,000 人です。

私はいくつかの異なる容量のコンピュータを、ソフトウェア開発者として、ユーザーとして、そして (開発およびテスト システムの独自のネットワークの) システム管理者として使用しています。 私は Sysinternals フリーウェア ツールと Winternals の商用製品の最もk広範囲の対象ユーザーに到達する必要があるため、ほとんどのユーティリティは最低 Windows NT 4 から Windows XP までを対象とし、多くは Windows 95 から Windows Me でも実行されます。 私が作成しているツールの大部分はシステムレベルです。つまり、たいていは 1 つ以上のさまざまな Windows バリエーションのための特別なケースのコードが含まれています。 残念ながら、Windows NT の製品ラインと Windows 9x の製品ラインでは、ユーザー インターフェイスとカーネルに大きな違いがあり、同じ製品ラインのバージョン間にも違いがあります。

以前テストを行うときは、列挙した各種 Windows をマルチブートするようにいくつかのデバッグ システムを構成し、あるバージョンで起動してテストし、そして次のバージョンで再起動していました。 テストは低速であるだけでなく、適切にクリーンアップされていない、ユーティリティの中間テスト ビルドの破棄による干渉によってテストが歪められることもありました。 私は依然として問題をデバッグするためのマルチブート システムを持っていますが、VMWare (www.vmware.com) と呼ばれる革新的な製品によって、私のテスト サイクルは、より速く、より簡単になりました。

VMWare は、Windows NT、Windows 2000、または Linux のインストール環境 (ホスト) の上で実行される仮想コンピューター (ゲスト) を作成するために使用する仮想マシン環境です。 ゲストは、Windows、DOS、Linux のほとんどのバリエーションを実行できます。 あるバージョンのオペレーティング システムが別のオペレーティング システムの上で実行されるのを見ると、特に仮想マシンを全画面表示にした場合は混乱します。たとえば、Linux コンピューターの画面の前に座っているのではなく、Windows 2000 上で実行されている Linux コンピューターの仮想ディスプレイだということに気づく手段はほとんどありません。 仮想マシンは、仮想マシンで実行されているオペレーティング システムとアプリケーションをカプセル化する、ソフトウェアによって設定されたボックスであるため、アプリケーションにとって存在すると思われるハードウェアを操作しようとすると、仮想マシン ソフトウェアによってアクセスがインターセプトされます。 仮想マシン ソフトウェアでは、実際のハードウェアまたは仮想ハードウェアの慎重に制御された代理として機能する仮想デバイスが作成されます。 たとえば、ウィンドウに表示されている仮想マシン内で実行中のアプリケーションから仮想マシンの表示メモリに書き込む場合、仮想マシン ソフトウェアでは、アクセスによって実際のビデオ メモリを操作するのではなく、仮想マシンのディスプレイを表すウィンドウの内容を更新します。 仮想マシンが全画面表示モードで実行されていた場合、仮想マシン ソフトウェアでは、このようなアクセスでビデオ メモリを直接操作できるようにします。

仮想マシンの機能だけでも VMWare は役に立ちます。なぜなら、"テスト システム" をいくつでもハード ドライブに格納できるためです。 VMWare がさらに強力だと思えるのは、仮想コンピューターを "中断" し、その状態をディスクに保存し、後でそれを再開して、中断した状態を数秒以内に復元できることです。 しかし、それだけではありません。 私は "非持続的ディスク" と呼ばれる機能をよく利用しています。これにより、ユーザーが定義した内容を含む仮想ディスクを使用して (たとえば、基本的な OS インストールだけが存在する) VMWare で仮想コンピューターを起動し、その後変更を追跡することで、それらを元に戻して開始状態に戻すことができます。 ユーティリティのテスト バージョンをインストールし、ユーティリティの変更を何も反映していないクリーンな状態に戻すようにする必要がある場合は、変更を元に戻すだけで済みます。 また、VMWare はユーザーとシステム管理者のロールでも役立ちます。 保持したいかどうかわからないアプリケーションをダウンロードするときは、アプリケーションをアンインストールするときに開発システムを侵害したり、残った破片でシステムをいっぱいにしたりするのではなく、最初に非永続ディスクを使用した仮想マシンで試します。

現在のバージョンには比較的軽微ないくつかの欠点があり、そのため実際のデバッグ コンピューターの使用をできるだけ控えていました。 1 つ目は、仮想マシンが DirectX をサポートしていないため、画面解像度が 640 x 480 の仮想マシンを除き、Numega の SoftICE デバッガーを実行できないことです。 2 つ目は、ホストとゲスト間、またはゲスト間で、Windbg または Kd を使用したカーネル デバッグができないように、VMWare のシリアル ポートの仮想化が制限されていることです。 ただし、後者の問題は、次の VMWare メジャー リリースで対処する必要があります。

VMWare について特に興味深いのは、VMWare によってそうでないことが実証されるまで、コンピューター サイエンティスト達は、パフォーマンスを大幅に低下させずに未変更のオペレーティング システムを実行できる程度に x86 アーキテクチャをソフトウェアで仮想化することは不可能であるという考えを主に持っていたということです。 特にハードウェア デバイス仮想化の分野では課題が大きく、VMWare の成功はブレークスルーと見なされています。そのため、VMWare は最近、毎年恒例の USENIX テクニカル カンファレンスでデバイス仮想化を実装する方法に関する「ベスト オブ カンファレンス」論文を発表しました。 この論文は、http://vmware1.m0.net/m/s.asp?HB4162878203X1075673X73339X. で読むことができます。

USENIX テクニカル カンファレンスと言えば、私はそこで発表された「High-Performance Memory-Based Web Servers: Kernel and User-Space Performance」 (http://www.sysinternals.com/files/webserver.pdf). という論文を共同編集しました。 この論文では、IBM Research に勤務している間に参加した革新的な研究の一部が説明されています。 作業が貢献した領域は、カーネルモードの Web サーバー アクセラレーションで、私はアーキテクチャへの貢献以外に、Windows NT と Windows 2000 での多くの実装を担当しました。 このプロジェクトは非常に成功したため、Web サービスのパフォーマンスに関する SPECWeb の世界記録を一貫して保持し、IBM Netfinity Web Server Accelerator と呼ばれる今も進化を続ける IBM 製品としてリリースされ、Microsoft と Linux の両方のコミュニティは、この重要なアイデアのいくつかを独自の製品 (Windows 2000 の IIS や Linux の Tux など) に組み込んでいます。

その内容に興味があると思われるお友だちにニュースレターをお渡しください。

ありがとうございます。

-Mark

SYSINTERNALS の新機能

Process Explorer v5.1

Process Explorer は HandleEx の新しい名前で、これはプロセスと、これらによって読み込まれた DLL、これらによって開かれたオペレーティング システム リソースへのハンドルに関する詳細情報を表示する多目的ユーティリティです。 Process Explorer の最新バージョンでは、名前が新しくなったことに加えて、効率的な自動更新、CPU 使用率の列、プロセスの優先順位を変更する機能、システムがターミナル サーバーである場合のプロセス セッション ID のレポートなど、さまざまな新機能が導入されています。 さらに、プロセスに関するより多くの情報が表示されます。 たとえば、プロセス内で実行されているサービスの一覧 (該当する場合) を表示したり、プロセスの環境変数を調べたり、プロセスのコマンド ラインを表示したりできます。 "プロセス ツリー" と呼ばれる新しい並べ替えオプションを使用すると、プロセスの親子関係をグラフィカルに確認できます。これはプロセスの目的を特定するのに役立ちます。 Process Explorer は、すべての Windows 9x バージョンと、Windows NT 4 から Windows XP までで実行されます。

Process Explorer のインターフェイスで、すぐにはわからないかもしれないものとして、どのプロセスが特定のファイルまたはディレクトリを開いているかを示す機能があります。 表示をハンドル モードに切り替え、対象のファイルまたはディレクトリの名前を検索ダイアログに入力します。 検索機能は、ファイルまたはディレクトリの削除や名前変更を妨げているプロセスを追跡するために最もよく使用されますが、特定の DLL が読み込まれているプロセスを一覧表示するためにも使用できます。

Process Explorer v5.1 は次の場所からダウンロードしてください: http://www.sysinternals.com/ntw2k/freeware/procexp.shtml.

Handle v2.0

Handle は、Process Explorer のハンドル表示機能のコマンド ライン バージョンで、プロセスで開いているファイルなどのオペレーティング システム リソースへのハンドルを表示できます。 場合によっては、Handle のコマンド ラインでファイルまたはディレクトリの名前の一部を入力するだけで済むため、Handle を使った方が、Process Explorer の検索機能を使うよりも、ファイルまたはディレクトリを開いているプロセスを識別するのが速くなります。 ハンドル名の検索が効率的になったことに加えて、Handle 2.0 は Windows 95/98/Me で動作するようになりました。

Handle v2.0 は次の場所からダウンロードしてください: http://www.sysinternals.com/ntw2k/freeware/handle.shtml.

PsInfo v1.1

管理ツールの PsTools スイートに追加された最新の機能は PsInfo です。 PsInfo は、コンピューターのハードウェアとオペレーティング システムの特性を報告するコマンド ライン ツールです。 たとえば、実行中のオペレーティング システムが、サービス パック番号、インストール日と有効期限 (該当する場合)、構成 (ドメイン コントローラーやメンバー サーバーなど) を含めて表示されます。 また、コンピューター上の CPU の種類、速度、数、および取り付けられている物理メモリの数も一覧表示されます。 この情報のおかげで、PsInfo はシステムの識別やインベントリに役立つものとなっています。 PsTools スイートのすべてのツールと同様に、PsInfo はローカルまたはリモートの Windows NT、2000、XP コンピューターで実行されます。

PsInfo v1.1 は次の場所からダウンロードしてください: http://www.sysinternals.com/ntw2k/freeware/psinfo.shtml.

PsExec v1.24

PsExec を使用すると、システムがネットワーク近隣にある限り、リモート システムにソフトウェアを手動でインストールすることなく、リモート システムでプロセスを起動できます。 PsExec の強みは、リダイレクトされたコンソール プログラム I/O のサポートにあります。ここで、リモート コンソール プログラムのキーボード入力とテキスト出力は、それがローカル システムで実行されているかのように処理されます。

PsExec の最新バージョンでは、同じリモート システムで実行中の複数のプロセスがサポートされており、たとえば、別のシステムからリモートで複数のコマンド プロンプトを開くことができます。 また、PsExec でファイルを実行するためにリモート コンピューターにコピーし、既存のバージョンを置き換えることを指定できる新しい "強制コピー" オプションもあります。

PsExec v1.24 は次の場所からダウンロードしてください: http://www.sysinternals.com/ntw2k/freeware/psexec.shtml.

PsLogList v2.07

PsLogList は、別の PsTools ユーティリティであり、ローカル システムまたはリモート システムからイベント ログをダンプします。 同じ目的を持つ Windows 2000 リソース キット ツールである eloglist とは異なり、PsLogList はレコードの完全なイベント文字列を表示し、リモート ログをダンプするときは、ローカル システムではなくリモート システムからのイベント ログ文字列リソース ファイルを使用します。

PsLogList のバージョン 2.07 には、拡張イベント ログ レコード情報 (レコードに関連付けることができる追加情報) をダンプするように指示できるコマンド ライン スイッチと、指定した最新の日付のレコードのみを表示できるようにする新しいスイッチが含まれています。

PsLogList v2.07 は次の場所からダウンロードしてください: http://www.sysinternals.com/ntw2k/freeware/psloglist.shtml.

Windows XP のソース レイアウト

Microsoft が Windows NT/2000/XP カーネルを構成するソース コードをどのように編成しているのか疑問に思ったことはないでしょうか。 私もありました。そして、その情報が公開されていることに気づきました。 Microsoft が Windows 2000/XP の新しいビルドをリリースするときは常に、いくつかのバージョンがリリースされます。

  • ユニプロセッサの "フリー" バージョン
  • 4 GB を超える物理メモリをサポートするユニプロセッサの "フリー" バージョン
  • マルチプロセッサの "フリー" バージョン
  • 4 GB を超える物理メモリをサポートするマルチプロセッサの "フリー" バージョン
  • "チェック済み" マルチプロセッサ バージョン
  • 4 GB を超える物理メモリをサポートするマルチプロセッサの "チェック済み" バージョン

合計 6 つのバージョンがあります。 "フリー" と "チェック済み" の違いは、"フリー" バージョンが無料ということではなく、MSDN CD セットに含まれている "チェック済み" バージョンには、オペレーティング システムとデバイス ドライバーのデバッグに役立つコードとデータが含まれているということです。 "フリー" バージョンは、条件付きコンパイル ステートメントに含まれている追加のコードがない状態でコンパイルされたものです。

追加のチェック済みコードの例として、オペレーティング システムの動作を報告するデバッグ プリント ステートメント、デバイス ドライバーからカーネルモード関数に渡されるパラメーターのより厳密な整合性チェック、そして "アサーション" ステートメントがあります。 アサート ステートメントは、あるコード領域に適用される条件に関する開発者の仮定を検証します。 たとえば、識別署名を使用して、ポインターがデータ構造を指す必要がある場合、開発者はその効果にアサーションを挿入できます。 アサーションの仮定に反すると、どうなるでしょうか。 それはアサーションによって異なりますが、チェック済みビルドに含まれているものである場合、デバッグ出力メッセージが出力され、デバッガー ブレークポイントがトリガーされて、カーネル デバッガーがアクティブになります (または、デバッガーがアクティブな場合は、クラッシュが発生し、うまくいけば、後で調べることができるダンプ ファイルが生成されます)。

アサーションによってキャッチされた問題を簡単に特定するために、チェック済みビルドで使用されるアサーションでは、ファイル、関数、およびアサーションの場所の行番号が出力されます。 私は、私の "strings" 文字列抽出ユーティリティでこれらの文字列を抽出し、それらを java ツリービューに整理することで、ソース ツリーのレイアウトを示すことができます。

http://www.sysinternals.com/ntw2k/info/xpsrctree.shtml で Windows XP のソース レイアウトを確認し、アサーションの詳細について学習してください (IE では、ページの読み込みが遅くなることに関する警告が表示されることに注意してください。それを閉じると、ツリーが表示されます)。

DebugView v4.13

DebugView は、ローカル システムまたはリモート システム上のアプリケーションまたはドライバーからデバッグ出力をキャプチャできる開発者向けユーティリティで、複数のシステムから同時に行うことも可能です。 この最新リリースには、Windows XP RC 1 との互換性が追加されています。 DebugView は、Windows 9x、Windows Me、Windows NT、Windows 2000、Windows XP で動作します。

DebugView v4.13 は次の場所からダウンロードしてください: http://www.sysinternals.com/ntw2k/freeware/debugview.shtml.

PageDefrag v2.1、Contig v1.41

最も人気のある Sysinternals のダウンロードの上位にランクアップされているのは、PageDefrag と Contig です。 PageDefrag は起動時にコア システム データ ファイルを最適化し、Contig はコマンド ライン ファイル最適化ユーティリティです。 これらのツールの最新バージョンには、改善された Windows 2000 用の最適化エンジンが付属しており、それぞれにいくつかの独自の機能強化がなされています。

最新バージョンの PageDefrag では、レジストリ ファイルとページング ファイルの最適化に加えて、イベント ログ ファイルも最適化されます。 また、Windows 2000 の Chkdsk と同様に、PageDefrag ではブート プロセス中に 3 秒のカウントダウンが行われ、その間に任意のキーを押して最適化をスキップできます。

Contig の独自の特徴としては、これを使用して、個々のファイル、ディレクトリ全体、またはディスク全体を最適化できるということがあります。 Contig は商用のデフラグ ツールとは異なり、ディスク上の将来の断片化を防ぐために空き領域の統合を行わないため、アプリケーションのパフォーマンスに不可欠な特定のファイルを最適化することを目的としています。 新しい Contig では、最適化エンジンの強化に加えて、非詳細モードと詳細モードの両方で出力形式が改善されています。

PageDefrag v2.1 は次の場所からダウンロードしてください: http://www.sysinternals.com/ntw2k/freeware/pagedefrag.shtml.
Contig v1.4 は次の場所からダウンロードしてください: http://www.sysinternals.com/ntw2k/freeware/contig.shtml.

SYSINTERNALS AT WWW.MICROSOFT.COM

ここでもう一度、前回のニュースレター以降にリリースされた Microsoft サポート技術情報 (KB) 記事の Sysinternals リファレンスの最新の記事を次に示します。 これにより、Sysinternals への KB 参照の合計数が 27 になります。

  • SQL Server ODBC ドライバーでの 0x8000FFFF "致命的なエラー" メッセージ
    http://support.microsoft.com/support/kb/articles/Q243/3/49.ASP

  • ACC: エラー メッセージ: ActiveX コンポーネントでオブジェクトを作成できない
    http://support.microsoft.com/support/kb/articles/Q296/2/05.ASP

  • HOWTO: Internet Explorer で使用される MSXML のバージョンを確認する
    http://support.microsoft.com/support/kb/articles/Q296/6/47.ASP

  • HOWTO: "ADODB.Connection" エラー 800a0bb9 をレコードセット DTC からトラブルシューティングする
    http://support.microsoft.com/support/kb/articles/Q197/3/23.ASP

  • INFO: 80004005 およびその他のエラー メッセージのトラブルシューティング ガイド
    http://support.microsoft.com/support/kb/articles/Q183/0/60.ASP

  • XADM: メールボックス ストアを設定するときにイベント ID 3036 および 3026 メッセージが発生する
    http://support.microsoft.com/support/kb/articles/Q296/1/36.ASP

INTERNALS INFORMATION

Inside Windows 2000、対話型 DVD

Dave Solomon と私は、Windows 2000 の内部構造とアーキテクチャの公式ガイドである「Inside Windows 2000、第 3 版」を執筆しましたが、「Inside Windows 2000」の DVD チュートリアルがまもなく公開されることをお知らせできることを嬉しく思っています。 このチュートリアルは、9 時間を超えるコンテンツを収録した DVD 5 枚組みで構成されており、Windows 2000 内部の動作について、Dave と私が打ち解けたスタイルで解説しています。

扱われているトピックには、メモリ管理、プロセスとスレッド、ストレージ、ファイル システム、ネットワークなどがあり、視聴しやすいように、それぞれ 10 分から 20 分のモジュールに分かれています。 プレゼンテーションには、多くの図、デモ、スクリーンショット、まとめの一覧が含まれており、各モジュールの締めくくりには、理解度をテストして確かめるための復習の質問が用意されています。

最終的な価格と公開日はまだ確定していませんが、公開の通知を受け取りたい場合は、件名に "interest" という単語を付けて mailto:video@... にメールしてください。 または、詳細については http://www.sysinternals.com/video/ をご覧ください。

日付をマーク: Russinovich と Solomon がオースティンで共同講義を開催

DVD セットに興味があるなら、Dave と私が NT の内部構造についてライブで解説する機会にも興味があるかと思います。 12 月 11 日から 13 日までテキサス州オースティンに来て、Windows XP/2000/NT の内部アーキテクチャについての 3 日間のクラスにご参加ください。 このクラスは「Inside Windows 2000、第 3 版」に基づいており、環境サブシステム、システム 呼び出しディスパッチ、システム スレッド、スタートアップとシャットダウン、レジストリの内部構造、プロセスとスレッドのスケジューリング、メモリ管理、セキュリティ、I/O システム、ストレージ、NTFS、キャッシュ マネージャーについて説明します。 Windows XP と 2000 の内部の動作を理解することで、プラットフォームをより効果的に利用し、問題のデバッグやトラブルシューティングをより効果的に行うことができます。

詳細がわかったら、ニュースレターやウェブサイトでお知らせしますので、楽しみにしてください。

コマンド ライン ディスク管理

システム管理者からの圧力に押されて、Microsoft はついに Windows 2000 でディスクを管理するためのスクリプト可能なコマンドライン ツールを公開しました。 DiskPart を使用すると、ボリュームまたはパーティションの作成や、ミラーの作成と中断、ボリュームの拡張のほか、ディスク、ボリューム、パーティションの詳細を調査することができます。 良い点は、DiskPart が http://www.microsoft.com/downloads/release.asp?ReleaseID=31167. から無料でダウンロードできることです

WINHEC 2001 のオンライン スライド

Microsoft の毎年恒例の Windows ハードウェア エンジニアリング カンファレンス (WINHEC) を見逃した場合でも、多くのプレゼンテーションのスライドを見ることができます。 セッション、説明、および Power Point 資料へのリンクの一覧については、http://www.microsoft.com/winhec/sessions/driver.htm を参照してください。 一般的に興味深いプレゼンテーションとしては、ドライバー デバッグ手法、フィルター ドライバー、NDIS ミニポート ドライバーと中間ドライバーに関するものがあります。

XP の新しいファイル システム フィルター ドライバー インターフェイス

ファイル システム フィルター ドライバーに基づくリアルタイムのファイル ミラーリング、オンアクセス ウイルス チェック、または階層型ストレージ管理の製品がある場合は、Microsoft が Windows XP に導入したユーザーに影響する変更に遅れずについていくようにする必要があります。

最大の変更は、高速 I/O ルーチンに関するもので、これはメモリ マネージャー、キャッシュ マネージャー、I/O システムがファイル システム I/O を実行し、IRP を生成しなくてもファイル システム ドライバーと対話できるようにファイル システム ドライバーが登録する特別な機能です。 ファイル システム フィルター ドライバーが常にバイパスされる 6 つの高速 I/O ルーチンがあることを知れば、驚く人もいるかもしれません。 これらは次のとおりです。

FastIoAcquireFileExclusive
FastIoReleaseFile
FastIoAcquireFileForCcFlush
FastIoReleaseFileForCcFlush
FastIoAcquireFileForModWrite
FastIoReleaseFileForModWrite

メモリ マネージャーは、ファイルによってサポートされるセクションの作成前と作成後に FastIoAcquireFileExclusiveFastIoReleaseFile を呼び出します。また、他のカーネルモード サブシステムは、これらのルーチンを呼び出して、セクションの作成を一時的に防ぐことができます。 キャッシュ マネージャーは、ファイルの変更されたキャッシュ データのすべてまたは一部をディスクにフラッシュして戻す前と後に FastIoAcquireFileForCcFlushFastIoReleaseFileForCcFlush を呼び出し、メモリ マネージャーは、マップ済みファイルのダーティ ページをファイルに書き戻す前と後に FastIoAcquireFileForModWriteFastIoReleaseFileForModWrite を呼び出します。

カーネルモード サブシステムは、高速 I/O 関数を直接呼び出すのではなく、代理ファイル システム ランタイム (FsRtl) ルーチンを使用します。 ほとんどの高速 I/O 関数のランタイム ルーチンは、ターゲット ファイル オブジェクトの IoGetRelatedDeviceObject を呼び出 してフィルター デバイス オブジェクトへの参照を取得し、フィルターの対応する高速 I/O ルーチンを呼び出すことによってフィルター ドライバーを呼び出しますが、リストされている高速 I/O 呼び出しに関連するランタイム ルーチンは、代わりに IoGetBaseFileSystemDeviceObject を呼び出し、これによって、基になるファイル システム ドライバーのデバイス オブジェクトが返されます。 ランタイムがこれらの関数のフィルターをバイパスする理由は、私の意見では、やや説得力に欠けるのですが、ランタイムがフィルター ドライバーを信頼していないということです。 フィルターがこれらの呼び出しを基になるファイル システム ドライバーに渡さない場合、ファイル システム データの破損が発生し、ほぼ間違いなくクラッシュします。 しかし、クラッシュを引き起こす原因となるフィルター ドライバの動作には、多くのものがあります。

Windows XP の FsRtl には、これらのさまざまな操作のためのコールバックを登録するためにフィルター ドライバーで使用される新しい関数 FsRtlRegisterFileSystemFilterCallbacks が導入されています。 これにより、ファイル システム フィルター ドライバーがこれらの操作を調査し、これらを失敗させることさえでき、ランタイムでは、基になるファイル システム ドライバーが必要に応じて常に呼び出されるようにすることができます。 この関数のドキュメントは、どこで入手できるでしょうか。 Windows XP Installable File System Kit は、Microsoft の http://www.microsoft.com/ddk/ifskit/XPdefault.asp. から 995 ドルで入手できます。

キー ストロークで Windows をクラッシュさせる

いくつか前のニュースレターで、特別なキー シーケンスを使用して、実行中のシステムのブルースクリーン クラッシュを開始し、別の方法では入力に応答しないシステムを分析できるようにする設定を Windows 2000 レジストリに追加する方法を示しました。 レジストリに何も設定せずに Windows NT と Windows 2000 をクラッシュさせる方法についてはどうでしょうか。

コマンド プロンプト ウィンドウを開き、現在のディレクトリをブート ドライブのルート (\winnt というドライブ) に変更し、「dir /s」と入力します。 これが実行中に、F7 キーと Enter キーを数回押し、Ctrl キーを押しながら C キーを押して一覧表示を中止します。 すぐにブルー スクリーンが表示されるか、自発的に再起動が実行されます。 すごいでしょう? 残念ながら、これは私が以前に報告した技巧とは異なり、設計された動作ではないバグであり、http://www.WindowsITsecurity.com/articles/index.cfm?articleID=22037. からレポートを見つけることができます

キーストローククラッシュ設定について扱ったニュースレターを見逃した方は、Microsoft Debugging Tools ヘルプ ファイルの説明に従って、次のレジストリ値を Windows 2000 または XP のレジストリに追加します。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters\CrashOnCtrlScrll DWORD 1

再起動し、左側のコントロール キーを押しながらスクロールロックを 2 回押すことによって、システムをクラッシュさせることができます。

Windows XP のプリフェッチ

Microsoft では、Windows XP のエンド ユーザー エクスペリエンスの向上に重点的に取り組んでおり、ユーザーは、コンピューターの電源を入れてから使用できるまでの速さがエクスペリエンスの重要な部分を占めると考えています。 そのため、Microsoft の開発者は、ブート プロセスとアプリケーションの起動のパフォーマンス向上に、多大な労力を費やしてきました。 これはいくつかの方法で対処されています。1 つ目は、シリアル デバイス ドライバーとネットワーク デバイス ドライバーが並列に初期化されることで、Windows 2000 で逐次的に初期化されたのとは異なっています。 2 つ目は、Winlogon で、ログオン ダイアログを表示してユーザーにログオンさせる前に、ワークステーション サービス (それ自体がネットワーク サービスを待機します) が使用可能になるのを待機しなくなったことです。 最後の 1 つは、ブート プロセスとアプリケーションの起動に "プリフェッチ" と呼ばれる手法が組み込まれたことです。 以下に、プリフェッチのしくみについて簡単に説明し、ブートの最適化について Microsoft から公開されたホワイトペーパーを示します。

Windows (リアルモードの Win3.1 を除くすべてのバージョン) は、デマンドページング オペレーティング システムで、アプリケーションがアクセスを試みると、ディスクからメモリにファイル データとコードの "ページ フォールト" が発生します。 データとコードは "ページ" の粒度のチャンクでページ フォールトが発生します。ページのサイズは CPU のメモリ管理ハードウェアによって決定されます。 x86 のページは 4 KB です。 プリフェッチとは、データとコードのページを要求される前にディスクからメモリに取り込むプロセスのことです。

プリフェッチする必要がある対象を把握するために、XP キャッシュ マネージャーは、アプリケーションの起動時に発生するページ フォールトを監視します。 既定では、ブート プロセスの最初の 2 分とアプリケーションの起動の最初の 10 秒がトレースされます。 NTFS マスター ファイル テーブル (MFT) メタデータ ファイル (アプリケーションが NTFS ボリューム上のファイルまたはディレクトリにアクセスする場合)、参照されているファイル、参照されているディレクトリで取得され、ページ フォールトに編成されるトレースを収集した後、名前付きイベント オブジェクトを通知することで、タスク スケジューラのプリフェッチ コンポーネントを通知します。 タスク スケジューラは、トレース用のクエリを指定する情報の種類を使用して NtQuerySystemInformation の呼び出しを行い、それを読み取ります。 トレース データに対して後処理を実行した後、データはタスク スケジューラによって \Windows\Prefetch の下のファイルに書き込まれます。 ファイルの名前は、トレースが適用されるアプリケーションの名前の後に、ダッシュと、ファイルのパスのハッシュの 16 進数表現が続きます。 ファイルの拡張子は ".pf" であるため、たとえば NOTEPAD.EXE-AF43252301.PF となります。

ファイル名の規則の例外は、ブートのトレースを格納するファイルで、これは常に NTOSBOOT-B00DFAAD.PF という名前が付けられます (プログラマが初期化されていないデータを表すためによく使用する 16 進数と互換性のある単語 "BAADF00D" を複雑にしたもの)。 システム プロセスまたはアイドル プロセスで発生したページ フォールトは、ブートの一部と見なされます。これは、デバイス ドライバーが読み込んで初期化するシステム プロセス内にあるため、理にかなっています。

ブートが開始されたとき、またはアプリケーションが実行されると、プロセス マネージャーはキャッシュ マネージャーを呼び出し、プリフェッチを実行する機会を与えます。 キャッシュ マネージャーはプリフェッチ ディレクトリを調べ、問題のプリフェッチ シナリオのトレース ファイルが存在するかどうかを確認します。 存在する場合、キャッシュ マネージャーは NTFS を呼び出して MFT メタデータ ファイル参照をプリフェッチし、参照されている各ディレクトリの内容を読み取り、最後に参照されている各ファイルを開き、メモリ マネージャーを使用して、まだメモリ内にないトレースで指定されたデータとコードを読み取ります。 メモリ マネージャーは、すべての読み取りを非同期的に開始し、完了するまで待機してから、アプリケーションの起動を続行します。

このスキームにはパフォーマンス上どのような利点があるでしょうか。 その答えは、通常のブートまたはアプリケーションの起動時に、一部のページがファイルの一部から取り込まれ、次に別の部分から取り込まれ、そして別のファイルから取り込まれ、その後ディレクトリから取り込まれるといった順序でページ フォールトが発生するという事実にあります。 このように跳び回ることは、まさにディスク上を跳び回ることに相当し、Microsoft では、ディスク シーク時間がブートとアプリケーションの起動時間を遅らせる主な要因であることが、分析を通じてわかりました。 プリフェッチにより、特定のファイルまたはディレクトリからデータを一度に読み取った後、別のファイルまたはディレクトリに移動すれば、シーク動作は事実上なくなります。

シークをさらに最小限に抑えるために、タスク スケジューラは 3 日おき程度に、ブートまたはアプリケーションの起動時に参照される順序でファイルとディレクトリの一覧を整理し、\Windows\Prefech\Layout.ini という名前のファイルにリストを格納します。 次に、完全な最適化を実行するのではなく、ファイルの内容に基づいて最適化するようにデフラグ ツールに指示するコマンドライン オプションを使用して、システム デフラグ ツールを起動します。 デフラグ ツールは、一覧に示されているすべてのファイルとディレクトリを保持するのに十分な大きさがある、ボリューム上の連続領域を見つけ、それらが順々に格納されるようにそれらをその領域に移動します。

これらは XP プリフェッチ スキームの基本であり、Microsoft ではブート プロセスが大幅に高速化されることが報告されています (XP が Windows 2000 よりもはるかに高速に起動していることが実際にわかります)。 プリフェッチとその他の高速ブートの拡張機能の詳細については、http://www.microsoft.com/hwdev/fastboot/. のホワイト ペーパーを参照してください。 また、Dave Solomon と私は「Inside Windows 2000」の XP リビジョン (春半ばに出版する予定) の作業に着手しており、この資料では、さらに詳細な説明を読むことができます。

Windows .NET Connections

TechEd での私の講演を聞き逃した方は、10 月 3 日にアリゾナ州スコッツデールで開催される Windows .NET Connections カンファレンスで私の話を聞くことができます。 私は Windows NT/2000 のクラッシュ ダンプ分析と、Windows XP でのカーネルの変更に関するプレゼンテーションを行います。 カンファレンスの他の講演者には、Windows 2000 Magazine の共同編集者である同僚の Mark Minasi と Sean Daily がいます。 カンファレンスのことをニュースレターで知って出席した方は、お知らせください。

私の講演の要約と Windows .NET Connections サイトへのリンクは、http://www.sysinternals.com/ntw2k/info/talk.shtml.でご覧いただけます

近日公開予定

私の Itanium エクスペリエンス

Microsoft は、Sysinternals ユーティリティを Win64 に移植できるように、Itanium システムを私に貸し出しました。 マシンの仕様は、2 個の 733 MHz プロセッサと 8 GB の RAM という素晴らしいものです。 次回は、Win64 で動作するようにさまざまなユーティリティに加えなければならなかった変更など、移植エクスペリエンスについて説明します。


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

公開日: 2001 年 8 月 20 日 (月) 午後 7:03 by ottoh

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