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

システム内部ニュースレター Vol. 2、No. 5

www.sysinternals.com
Copyright (c) 2000 Mark Russinovich


2000 年 11 月 30 日 - この問題:

  1. 論説

  2. SYSINTERNALS の新機能

    • PsLoggedOn v1.2
    • PsShutdown v1.0
    • PsTools v1.1
    • BgInfo v1.1
    • Tokenmon v1.0
    • Filemon v4.32
    • Regmon v4.32
    • Windows 2000 内の 3 番目の論説
    • 11 月と冬の Windows 2000 マガジン
    • Microsoft の Sysinternals
    • Sysinternals ライセンス
  3. INTERNALS 情報

    • NFI
    • 非表示の Win9x レジストリ キー
  4. 近日公開予定

    • 新しい Whistler System Calls

スポンサー: WINTERNALS SOFTWARE

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

すべてのバージョンの Windows 9x および Windows NT/2000 に付属する netstat コマンドは、システムで開かれている TCP/IP ポートを示しますが、ポートが開いているプロセスは表示されません。 Winternals の最新の監視ツールである TCPView Pro には、netstat と同等のコマンドライン ツール Tcpvstat が付属しているだけでなく、各ポートが開いているプロセスを示しますが、同じ情報と TCP/IP アクティビティのリアルタイム トレースを示す GUI が含まれています。 リアルタイム トレースでは、ネットワーク アクセスを行うアプリケーション、オプションの DNS 名前解決を使用したアクセスのローカル IP アドレスとリモート IP アドレス、アクセスの種類、アクセスの成功、転送されるデータの量が明らかになります。 TCPView Pro はわずか $69 です。 14 日間の完全に機能する TCPView Pro の試用版を今すぐ www.winternals.com/products/monitoringtools/tcpviewpro.shtml からダウンロードします。

皆さん、こんにちは。

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

Windows NT から Windows 2000 に移行するベネフィットの 1 つは、信頼性が大幅に向上していることです。 いくつかの記事で機能強化の理由について書きましたが、それらは主にドライバー検証ツールと呼ばれるツールの結果です。 [スタート] メニューの [実行] ダイアログ ボックスに「verifier」と入力して起動する検証ツールを構成して、特定のデバイス ドライバーの実行を厳密に監視し、いくつかのドライバー プログラミング規則の違反を探すことができます。 検証ツールは、受動的に監視するよりもさらに一歩進みますが、潜在的な問題が悪化する場合もあります。たとえば、無効な領域にまたがっているドライバーにメモリ ブロックを割り当てたり、ドライバーに渡されるデータ構造の特定のフィールドをゼロにしたりすることによって、エラー条件が発生します。 本当に厳しくしたいのであれば、検証ツールにドライバーのメモリ不足状態をシミュレートさせることができる。

Microsoft はドライバー署名プログラムを通じて検証ツールを利用します。そのためには、Microsoft によってデジタル署名されたドライバーが厳密なドライバー検証ツール テストに合格する必要があります。 ドライバーがインストールされると、ハードウェア ウィザードによって、ドライバーが署名されているかどうかを確認します。 そうでない場合は、コントロール パネルのシステム アプレットの [ハードウェア] ページからアクセスできる [ドライバー署名オプション] ダイアログに入力した設定に応じて、警告が表示されるか、ドライバーのインストールに失敗します。

既定のドライバ署名ポリシーが、署名されていないドライバーについてエンドユーザーに警告を発しているという事実は、ほとんどのハードウェアベンダーがドライバーを堅牢にし、署名させる手間をかけさせるのに十分です。 しかし、デバイス・ドライバは、ドライバ署名ポリシーによって検出されずにシステムに忍び込む可能性があります。 INF ファイル (.inf 拡張子で終わるドライバー インストール ファイル) を使用してインストールされたドライバーのみが署名のチェックを受けます。 セットアップ アプリケーションでは、セットアップ API を直接使用するか、ドライバーのレジストリ設定を手動で構成することで、ドライバーを手動でインストールできます。 Sysinternals アプリケーションは、この非常によい例です: Filemon、Regmon、その他のドライバ・コンポーネントを持つ Sysinternals ツールは、ドライバを手動でインストールします。そのため Microsoft によって署名されていないことが警告されないのです。

INF ファイルと一緒に一般的にインストールされないドライバーには、ウイルス スキャナー、暗号化ソフトウェア、CD-ROM 書き込みソフトウェアが含まれます。 しかし、ハードウェア関連のドライバーがすり抜ける可能性を排除するものではありません。 Windows 2000 用 Sysinternals Ctrl2cap ドライバー (www.sysinternals.com/ctrl2cap.htm は、ドライバー署名チェックをバイパスする方法でインストールされるハードウェア関連ドライバーの例です。 この抜け穴は、システムに検証されていないドライバーが存在し、システムの安定性を損なう可能性があります (すべての Sysinternals ドライバーを最高の設定で確認します)。 Microsoft は、INF ファイルと共にインストールするドライバーだけでなく、すべてのドライバーに署名チェックを強制的に実行する必要があります。

なぜこのように騒ぎ立てるのでしょうか? 市場でそのタイプのソフトウェアの中で最も人気のある私の CD-ROM 書き込みソフトウェアには、再現可能に私の Windows 2000 SP1 システムをクラッシュさせるドライバがあります。 ドライバー検証ツールでチェックするように設定すると、検証ツールがドライバーの最初の違反を検知してシステムをクラッシュさせるまで、システムは起動すら完了しません。 ドライバーは INF ファイルなしでインストールされているため、署名されていないという警告が表示されませんでした。 もし Microsoft のポリシーがもっと厳しかったら、このベンダーは署名のない (そしてバグの多い) ドライバーを出荷する前に熟考するようになることは間違いありません。

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

ありがとうございます。

-Mark

SYSINTERNALS の新機能

PSLOGGEDON V1.2

LoggedOn から PsLoggedOn への明らかな名前の変更に加えて、このコマンドライン ツールには、ローカルまたはリモート システム上のリソース共有を介してローカルにログインしているユーザーを表示する機能があります。 1 つ目は、ユーザーからのフィードバックから得られた '-l' コマンドライン スイッチです。 多くのユーザーは PsLoggedOn を使用して、任意のアカウントがサーバーにローカルにログオンしているかどうかを確認します。 たとえば、ファイル共有を通じてログオンしているユーザーがいるかも知れませんが、アカウントを更新したり、サーバーをリモート管理したりするタイミングを決定する際には関係ありません。

PsLoggedOn の 2 番目の新機能では、ログオンしたユーザーだけでなく、ログオンが行われた時刻も表示されます。 PsLoggedOn は、Win32 API NetSessionEnum を使用してリソース共有ログオンを列挙するときに、リソース共有からログオンのログオン時間を無料で取得します (コマンドライン Net コマンドでは、NetSessionEnum を使用してセッションを列挙します)。 しかし、誰がローカルにシステムにログオンしているか、ましてや何時にログオンしたかを教えてくれる Win32 API はありません。

システムにローカルでログオンしているユーザーを確認するために、PsLoggedOn はコンピューター HKEY_USERS のレジストリ キーの下にあるセキュリティ ID (SID) を列挙します。 コンソールまたはサービスを介して、誰かがローカルでコンピューターにログオンすると、そのユーザーのプロファイルが HKEY_USERS キーに読み込まれます。 アプリケーションは、HKEY_CURRENT_USER キーを使用してプロファイルのレジストリ設定にアクセスできます。これは、そのキーが HKEY_USERS の下にある特定のプロファイルへのシンボリック リンクとして扱われるためです。 したがって、PsLoggedOn は、コンピューターの HKEY_USERS キーで見つけた SID を対応するユーザー名に変換することで、ローカルでログオンしているユーザーを把握できます。 PsLoggedOn は、リモート システムにログオンしているユーザーを一覧表示するように指示するときに、RegConnectKey を使用してリモート コンピューターのレジストリに接続します。

同様のトリックを使用して、ユーザーがログオンした時間を把握します。 WinLogon プロセスがログイン後にユーザーのプロファイルを HKEY_USERS に読み込むと、WinLogon は、適切に Volatile Environment という名前のプロファイルに揮発 (ディスク上のプロファイルに保存されません) サブキーを作成します。 レジストリには、レジストリ キーの最後に変更されたタイムスタンプが格納されます。また、システムは作成後に Volatile Environment サブキーを変更しないため、PsLoggedOn は Volatile Environment サブキーのタイムスタンプを取得することで、ユーザーがログオンしたタイミングを判断できます。

完全なソースを使用して PsLoggedOn v1.2 をダウンロードする
www.sysinternals.com/psloggedon.htm。

PSSHUTDOWN V1.0

ローカルまたはリモートの Windows NT/2000 システムをシャットダウンまたは再起動する必要がある場合は、PsShutdown をダウンロードします。 PsShutdown は、シャットダウン Windows NT/2000 リソース キット ツールの複製です。 シャットダウン前の遅延、再起動するかどうか、システムに現在ログオンしているユーザーに表示するオプションのメッセージ、シャットダウンまたは再起動するコンピューターの名前を指定できるのと同じコマンドライン引数を使用します。

www.sysinternals.com/psshutdn.htm で PsShutdown v1.0 をダウンロードします。

PSTOOLS V1.1

Sysinternals では、プレフィックス "Ps" で始まるツールの数が増えていることに気付いたでしょう。 1 つ目は、ローカルまたはリモートの Windows NT/2000 システム上のアクティブなプロセスに関する情報を一覧表示するコマンドライン ツールである PsList でした。 標準の UNIX コマンドライン プロセス情報ツールの名前が "ps" であるため、PsList にその名前を付けました。 プレフィックスを取得する次のツールは PsKill です。これは、ローカルまたはリモートの Windows NT/2000 システムで実行されているプロセスを終了できるコマンドライン ユーティリティです。 PsKill に "Ps" プレフィックスを付け、PsList に完璧なコンパニオンを提供しました。

時間の経過と同時に、PsList と PsKill と同じ定義特性を共有する他のツールを開発してきました: これらはコマンドライン ベースであり、ローカルまたはリモートの Windows NT/2000 システムで動作します。 たとえば、ElogList を使用すると、システムのイベント ログの内容をダンプでき、GetSid にはコンピューターまたは特定のアカウントの SID が表示されます。 最近、これらのツールをすべて "Ps" プレフィックスを付け、PsTools という名前の 1 つのパッケージとしてダウンロードできるようにすることに決めました。

PsList、PsKill、および名前が変更された PsLogList と PsGetSid を含む PsTools は、合計 7 つのツールで構成されます。 Sysinternals ツールに "Ps" プレフィックスが付いている場合は、ローカルとリモートで動作するコマンド ライン ツールであることが自動的にわかります。

www.sysinternals.com/pstools.htm で PsTools v1.1 をダウンロードします。

BGINFO V1.1

膨大なユーザー フィードバックの結果として、Bryce は BgInfo に更新しました。このユーティリティは、取得したユーザー フィードバックの結果として、システムの構成に関するカスタマイズ可能な情報を表示するようにデスクトップの壁紙を設定するユーティリティです。 既定では、BgInfo はダイアログ ボックスで指定された設定を適用する前に 10 秒間カウントダウンしますが、新しいコマンドライン オプションである /timer を使用すると、カウントダウンを完全に変更または削除できます。 これにより、ログオン スクリプトに BgInfo を含めるか、プロファイルのスタートアップ フォルダーにショートカットとして含めるのがより便利になります。

バージョン 1.1 には、定義した任意のテキストを表示する機能、定義済みの情報カテゴリなど、その他の新機能が含まれています。 BgInfo v1.1 で作成されるデスクトップ ビットマップも一般に小さくなり、BgInfo のデスクトップ メモリ占有領域が最小限に抑えられます。

www.sysinternals.com/bginfo.htm で BgInfo v1.1 をダウンロードします。

TOKENMON V1.0

Tokenmon は、Sysinternals からダウンロードできるさまざまな監視ツール スイートに加えた最新の機能です。 Tokenmon は、そのいとこ関係にある Regmon や Filemon と同じ UI を共有し、Windows NT/2000 システムで重要なセキュリティ関連のアクティビティを監視します。 "重要な" セキュリティ関連のアクティビティとは? Windows NT/2000 セキュリティの中核となるのは、トークン オブジェクト、アカウント SID、グループ SID、および特権を含むデータ構造です。 プロセスがセキュリティで保護されたオブジェクトへのアクセスを試みるたびに、セキュリティ参照モニターはアクセス検証の一環としてトークン内の SID を使用します。 システムの再起動など、プロセスが制限された操作を実行しようとすると、システムはプロセスのトークン内の適切な特権をチェックします。

Windows NT/2000 セキュリティ モデルの強力な (特許を取得した) 機能の 1 つが偽装です。 偽装により、スレッドはプロセスベースの ID を一時的にオーバーライドし、偽装トークンを使用して代替 ID を採用できます。 サーバー アプリケーションは、クライアントの代わりにリソースにアクセスするときに、アクセスの間にクライアントの ID を採用するときに、偽装を利用します。

Tokenmon は、レジストリ API の場合と同じ方法でシステム呼び出しフックをインストールし、トークンの作成と削除、特権の有効化と無効化、偽装を監視します。 また、Tokenmon は、NT/2000 カーネルによって提供されるプロセス作成フックを使用して、プロセスの作成と削除を監視し、他の API を使用して、ユーザーがいつログオンし、いつログオフするかを判断します。

Tokenmon への完全なソース コードが投稿されており、コードが示す興味深い手法をいくつか説明する価値があります。 Tokenmon は、新しいログオン セッションの最初のプロセスの初期トークンを作成するために WinLogon などのログオン ブローカーによって使用される NtCreateToken システム呼び出しをフックすることによってログオン イベントを検出します。 最初のプロセスによって作成されたプロセスは、最初のトークンのコピーを継承します。 ログオフを検出するために、Tokenmon はカーネル モード SeRegisterLogonSessionTerminatedRoutine 関数 (ネットワーク リダイレクターと呼ばれるファイル システム ドライバーの利点のために存在し、ログオン セッション データをキャッシュし、ユーザーがログオフしたときにクリーンアップする API) を使用してログオフ通知を登録します。 ネットワーク リダイレクターは、ファイル共有クライアント/サーバー接続のクライアント側を実装します。

もう 1 つの興味深い Tokenmon 実装の詳細は、Tokenmon が監視する API をフックする方法です。 Tokenmon がフックする API のいくつかは、デバイス ドライバが使用するためにエクスポートされていませんが、Win32 の同等物を使用するアプリケーションが使用するために、ユーザーモードの NTDLL.DLL ライブラリにエクスポートされています。 Regmon フックがカーネル モードでエクスポートされるすべてのレジストリ API により、Regmon デバイス ドライバーがシステム呼び出し番号を取得し、システム呼び出しテーブルを適切にフックすることができます。 ドライバーで使用するためにエクスポートされない API の場合、Tokenmon GUI は、NTDLL.DLLのエクスポートを使用して呼び出し番号を取得し、ドライバーがシステム呼び出しテーブルをフックできるようにドライバーに番号を渡す必要があります。 したがって、Tokenmon は、カーネル モードでエクスポートされないシステム呼び出しをフックする方法を示します。

www.sysinternals.com/tokenmon.htm で完全なソースを含む Tokenmon v1.0 をダウンロードします。

FILEMON V4.32

この最新の Filemon 更新プログラムでは、より直感的で完全なフィルター処理、Windows 9x/Me ネットワーク ファイル アクセス用の完全な UNC パス名の表示、NTFS メタデータ ファイル名の表示が導入されています。

以前のバージョンの Filemon では、必須のワイルドカードを使用してフィルターを入力する必要がありました。 たとえば、ドライブ C: 上の Temp ディレクトリへのアクセスを監視する場合は、次のようなフィルターを入力する必要がありました: "c:\temp\*"。 新しいフィルター構文のワイルドカードは省略可能であるため、フィルターの例は機能しますが、"c:\temp" は同じ効果を実現します。 さらに、Filemon では、入力したフィルターが、プロセス名、要求の種類、パス、"その他" 列など、表示内のすべてのフィールドに適用されるようになりました。 この柔軟性により、特定の種類の要求、または他の列の特定のデータを含む要求に対して、以前は不可能だったものを監視できます。

Windows 9x/Me システムの Filemon のユーザーは、リモート リソースにアクセスすると、完全な UNC 構文を持つ Filemon 表示パス名が表示されるようになりました。 Filemon では以前、このようなアクセスのサーバー名または共有名が表示されず、パス名が不完全になっていました。

最後に、Windows NT/2000 で Filemon を使用したことがある場合は、多くのアクセスに対してパス列に "DASD" というテキストが表示されているのは間違いありません ("DASD" は "Direct Access Storage Device" に由来します。これは、Microsoft がファイル システム構造をバイパスするボリュームへのアクセスを記述するために使用する用語です)。 NTFS ボリューム上のほとんどのアクティビティでは、DASD は過去のものになりました。 代わりに、読み取りと書き込みを行っている NTFS メタデータ ファイルの名前が表示されます。 たとえば、MFT レコードを更新すると、以前は DASD 出力行が生成されましたが、MFT の内部メタデータ ファイル名である "$Mft" へのアクセスとして表示されます。

Filemon が以前にメタデータ ファイル名を表示しなかった理由と、これらの名前を取得する方法 NTFS メタデータ ファイルを表すファイル オブジェクトにはファイル名が格納されないため、Filemon はファイル オブジェクトから名前を抽出できません。 ファイルの名前を取得し、ファイル システム ドライバーに対してクエリを実行するための Filemon の代替方法は、NTFS メタデータ ファイルに対しても機能しません。 NTFS はメタデータ ファイルの名前で応答しますが、NT 4 の NTFS はランダムにクラッシュを引き起こし、Win2k の NTFS はこのようなクエリに応答するとハングすることがあります。

したがって、Filemon はメタデータ ファイル名を取得するためのトリックに頼る必要があります。 名前のない NTFS ボリューム上のファイル オブジェクトに送信された要求が表示されると、ファイルのインデックスに対するクエリが NTFS に送信されます。 これは、Win32 関数 GetFileInformationByHandle が返すインデックスと同じであり、NTFS ボリューム上のファイルの場合、インデックスはファイルの MFT インデックスです。 MFT の最初の 16 個のエントリは特定のメタデータ ファイル用に予約されているため、その範囲のインデックスを指定すると、Filemon は単に独自のテーブル内のメタデータ ファイル名を検索します。

残念ながら、FAT はディレクトリ メタデータ ファイルまたは FAT の名前を格納しないため、FAT ボリューム上のディレクトリ メタデータとファイル割り当てテーブル (FAT) アクセスに対する DASD は引き続き表示されます。 NTFS ログ ファイル ($LogFile) にアクセスする頻度に驚くでしょう。 ちなみに、Whistler の NTFS にはメタデータ ファイルの名前が格納されるため、Whistler ではこのトリックは不要です。

最終的な Filemon の機能強化により、Filemon はミリ秒の解像度で時刻のタイムスタンプを表示できます。 このサポートでは、Windows 9x/Me カーネルのタイミング関数にバグがあるため、Windows 9x/Me Filemon ドライバーで ugly hack (醜いハック) が必要でした。 詳細については、ソース コードを参照してください。

ソース コードを含む Filemon v4.32 を www.sysinternals.com/filemon.htm にダウンロードします。

REGMON V4.32

Regmon の変更は Filemon の変更ほど大きくありませんが、Regmon では Filemon と同じより直感的なフィルター構文がサポートされるようになりました。Filemon と同様に、すべてのフィールドにフィルターが適用されます。 タイムスタンプにミリ秒の解像度を表示することもできます。

Whistler (Windows 2000 の後継者) ベータ 1 でプレイを開始したユーザーは、以前のバージョンの Regmon により、Whistler が起動時にクラッシュしていることに気付いたかもしれません。 これは、Microsoft がシステム呼び出しテーブルを配置したためです。これは、Regmon がフックを挿入するように変更し、書き込み保護されたメモリに配置したためです。 Regmon v4.32 は、これを回避しています。この回避策には Microsoft からの要請により私はコードを提供していません。これは、この手法が Whistler の最終リリースで中断する可能性があり、Microsoft がシステム呼び出しフックをサポートする方法を検討しているためです。 Windows NT は、システム コール フックをサポートするように設計されていませんでした。これは、1996 年半ばに Regmon の最初のリリースで開拓されたものです。

文書化されていない Filemon/Regmon ヒントを次に示します。 Windows NT/2000 の管理者以外のアカウントから Regmon または Filemon を実行する方法を尋ねるメールを頻繁に受け取ります。管理者アカウントから実行すると、特定のアプリケーションは適切に動作しますが、特権のないユーザーからは動作しない場合が多くあります。Regmon と Filemon は、アプリケーションが失敗する理由を判断するのに役立ちます (通常はファイルまたはレジストリ キーのセキュリティ設定に関連する問題です)。 しかし、特権のないアカウントから Regmon と Filemon を実行すると失敗します。これは Filemon と Regmon の両方が管理者権限を必要とするデバイス ドライバーをインストールするためです。

ただし、これを回避できるトリックがあります。管理者としてログインし、Filemon または Regmon を起動すると、その後、特権のないアカウントから実行できるようになります。 これは、Filemon と Regmon が最初の実行にドライバーをインストールし、次の実行で既に読み込まれているドライバーにアクセスするためです。 ドライバーにセキュリティを実装していないため、特権のないユーザーは、ドライバーが読み込まれた後にツールを実行できます。 セキュリティの問題ですか? はい。しかし、Filemon と Regmon はトラブルシューティング ツールを目的としているので、私や、特権のないアカウントからユーティリティを実行する方法を尋ねる人々は、これを機能として捉えています。

www.sysinternals.com/regmon.htm で完全なソース コードを含む Regmon v4.32 をダウンロードします。

DEBUGVIEW V4.02

私が最も多くのユーザーフィードバックを受け取ったアプリケーションの1つは、ちょっと驚くべきことに、DebugView です。 この新しいバージョンには、私が受け取った多くの機能要求に対処し、DebugView をこれまで以上に強力にする重要な機能強化がいくつかあります。

ほとんどの場合、DebugView では最大 5 つの異なる強調表示フィルターがサポートされるようになりました。それぞれに独自のカスタマイズ可能な色があります。 これにより、デバッグ出力のさまざまなキーワードに同時にホームインし、それらを簡単に区別できます。 さらに、DebugView は Filemon および Regmon と同じ新しいフィルター構文を実装し、部分文字列の一致ではワイルドカードを省略可能にします。

以前のバージョンの DebugView について受け取った苦情は、Win32 デバッグ出力をキャプチャするだけの場合でも、DebugView を実行するには管理者権限が必要だったということです。これは、デバイス ドライバーをインストールできない場合は DebugView が実行されないためです。 この新しいバージョンは、特別な特権を持たないアカウントからでも実行されます。 ドライバーをインストールまたはアクセスできない場合は、カーネル モード キャプチャ関連のメニュー項目を無効にします。

ログイン時に DebugView で自動的に出力のキャプチャを開始できるようにする 2 つの機能は、その minimize-to-play オプションとコマンドライン スイッチのサポートです。 コマンドライン スイッチを使用すると、システム トレイで DebugView を起動し、ファイルにキャプチャする出力をログに記録できます。DebugView を開始した後は、メニュー オプションを使用して、最小化ボタンの動作を、通常の最小化とシステム トレイへの最小化の間で切り替えることができます。

Windows 2000 ターミナル サービスのリモート セッションで DebugView を実行するユーザーの場合、DebugView は、リモート セッションで実行されているアプリケーションによって生成された Win32 出力をキャプチャし、必要に応じてコンソール セッションからキャプチャするようになりました。 これは、COM サーバーと Win32 サービスをリモートでデバッグする場合に便利です。これらの種類のプログラムはコンソール セッションで実行されるためです。

最後に、DebugView は Whistler ベータ 1 で動作し、カーネル モードの DbgPrint 関数でいくつかの新しい Whistler バリアントからの出力をキャプチャできるようになりました。

www.sysinternals.com/dbgview.htm で DebugView v4.02 をダウンロードします。

INSIDE WINDOWS 2000、第 3 版

Windows 2000 の内部に関する公式書籍が公開されました。 David Solomon (www.solsem.com) と Mark Russinovich の共著であるこの版は、ネットワーク、プラグアンドプレイ、電源管理、サービス、レジストリ、WMI、ブートとシャットダウン、ストレージを新たにカバーし、前版より 40% 以上量が増えています。 また、Windows 2000 の内部を調査するために、他の場所では利用できないいくつかの強力なツールを備えた CD も含まれています。

この本のために私が書いたツールの 1 つは LiveKd です。これは、クラッシュ ダンプを見ているかのように、ライブ システムで Microsoft カーネル デバッガーである i386kd と WinDbg の両方を実行するプログラムです。 本に示されている実験の多くは、LiveKd を使用して実行すると、ライブ システムで動作します。 LiveKd は、クラッシュ ダンプ ファイルであるかのように、コンピューターの物理メモリを Microsoft デバッガーに表示するファイル システム フィルター ドライバーをインストールすることによって機能します。 LiveKd は 0 の長さの擬似ダンプ ファイルを作成し、デバッガーがファイルから読み取ると、LiveKd は物理メモリからデータを返します。 LiveKd v1.0 と複数のオンアクセス ウイルス スキャナーとの非互換性を修正する LiveKd パッチについては、書籍の正誤表と更新情報に関するページをご覧ください。

本の目次を見て、今すぐ www.sysinternals.com/insidew2k.htm から発注してください。

11 月と冬の WINDOWS 2000 マガジン

NTFS v4 と NTFS v5 の間で正確に何が変更されたかについて興味がありますか? その場合は、Windows 2000 マガジンの 11 月と冬号で私の 2 部構成のシリーズをチェックしてください。 パート 1 では、再解析ポイント、ディレクトリ ジャンクション、ボリューム マウント ポイント、クォータのサポート、統合セキュリティ設定について説明します。 パート 2 の最後では、暗号化、ストリーム、分散リンクの追跡、変更ジャーナルを詳しく見ます。 どちらの記事も、ディスク上の変更とこれらの新機能の内部動作を示す、他の記事よりも詳しく説明します。

1 つ私が記事で話していないことは、Windows NT 4 の NTFS が本当にはバージョンではないということです

すべての文書へのリンクは、www.sysinternals.com/publ.htm にあります。

SYSINTERNALS AT WWW.MICROSOFT.COM

Sysinternals は、前回のニュースレター以降、いくつかの新しい Microsoft サポート技術情報 (KB) 記事に登場しました。また、私も Sysinternals を参照するいくつかの古い KB 記事も追跡しました。

  • Q260513 PRB: Visual Studio 製品をインストールするときにエラーが発生する
    http://support.microsoft.com/support/kb/articles/Q260/5/13.ASP
    この記事では、Microsoft Visual Studio のインストールに関する問題のトラブルシューティングに Filemon と Regmon を使用することを推奨しています。

  • Q202258 XADM: 指定されたパスがシステムで見つかりません - ID 番号: 0cx002003
    http://support.microsoft.com/support/kb/articles/Q202/2/58.ASP
    Microsoft では、実際には、Filemon を使用して Exchange 5.0 Service Pack のアップグレードに関する問題のトラブルシューティングを行い、サンプルの Filemon 出力行とフィルターの設定に関する推奨事項を完了します。

  • Q269383 PRB: VB/VBA 参照を表示するときの `システム レジストリへのアクセス中にエラーが発生しました` というメッセージ
    http://support.microsoft.com/support/kb/articles/Q269/3/83.ASP
    Regmon は、この記事から紹介を取得します。この記事では、複数のキーに不適切なアクセス許可を適用する Seagate Crystal Reports のバグの結果として、Visual Basic IDE の [参照] ダイアログがレジストリ キーにアクセスできない場合にレポートする理由を判断する方法について説明します。

  • Q269251 BUG: 製品の列挙時に Windows インストーラーの自動化がハングする可能性がある
    http://support.microsoft.com/support/kb/articles/q269/2/51.asp
    Regmon はここでも再び強調されています。ここでは、Windows インストーラーの自動化バグを明らかにするために使用されます。

  • Q276525 開いているハンドルを監視すると、コンピューターの応答が停止する可能性がある
    http://support.microsoft.com/support/kb/articles/Q276/5/25.asp
    NtHandle は、Windows NT 4 SP6a で、NtHandle を使用するときにカーネルが特定の条件下でハングするバグを明らかにする役割を担います。 Microsoft は問題を解決するために私と協力し、修正プログラムを発行しました。 NtHandle を使用しているときに NT 4 システムがハングする場合は、この記事のリンクを参照してください。

  • Q160660 Ntregmon.exe により、新しい Service Pack で STOP 0x0000001E が発生する
    http://support.microsoft.com/support/kb/articles/Q160/6/60.asp
    最後に紹介するのは古いものですが、いいものです。 Regmon の最初のバージョンでは、レジストリ API をフックするために、ハードコーディングされたシステム呼び出し番号を使用してシステム サービス テーブルにパッチを適用しました。 システム呼び出し番号はサービス パック間で変更されることがあるため、この手法はかなり脆弱であり、私はこれを見越して (Regmon が壊れることを恐れていた Andrew Schulman の進言に反して) 防御的にコーディングしていませんでした。 確かに、SP3 はいくつかの新しいシステム呼び出しを導入し、Regmon は正しくないシステム呼び出しをフックしたときにシステムをクラッシュさせます。 この事は確かに少数の人々を悩ませましたが、そこから私は自分の KB 記事が産まれたのです。

SYSINTERNALS ライセンス

Sysinternals からダウンロードしたソフトウェアはフリーウェアです。つまり、料金を支払わずに使用できますが、再配布したり、Sysinternals ソース コードから配布する製品を派生させたりすることはできません。 たとえば、複数のユーザーが特定の Sysinternals ツールが役立つと考えている会社で働いている場合、内部共有や Web サイトにツールを投稿することはできません。 代わりに、Sysinternals 上の各ツールのホームへのリンクをサイトに配置します。 これは、同僚が常に最新バージョンをダウンロードするのにも役立ちます。

Sysinternals ツールを内部的、商用製品、または Shareware CD に再配布する場合、または Sysinternals ソース コードに商用製品または再頒布可能プログラムを基にする場合は、目的の使用方法の詳細を説明するメールを licensing@ に送信します。

INTERNALS 情報

NFI

数回前のニュースレターで、私は Microsoft がうっかり NT 4 SP4 の CD に同梱した DiskEdit ツールがあることを明らかにしました。 DiskEdit は、NTFS と FAT (興味深い NTFS サポートですが) ディスク上のデータ構造を調べるために使用できる、非常に強力ですが、奇抜なファイル システム構造ビューアーです。 NT 4 SP 4 CD を見逃していて、NTFS のディスク上の構造を探索することに興味があるなら、あなたはまだ完全に暗闇から脱出していません。 Microsoft は、NTFS ボリュームの内部構造を理解し、ダンプできる NFI (NTFS 情報) という名前の無料ツールをリリースしました。 その出力は DiskEdit のものほど詳細ではありませんが、興味深く、明らかになります。

OEM サポート ツールの一部として http://support.microsoft.com/support/kb/articles/q253/0/66.asp. で NFI をダウンロードできます ファイル名で NFI を実行すると、そのファイルの NTFS MFT レコードがダンプされます。 次の例は、ボリュームでクォータ管理が有効になっている場合にのみ存在するファイルである $Quota メタデータ ファイルの MFT レコードを NFI でダンプする方法を示しています:

C:\nfi c:\$extend\$quota
File 24
\$Extend\$Quota
$STANDARD_INFORMATION (resident)
$FILE_NAME (resident)
$INDEX_ROOT $O (resident)
$INDEX_ROOT $Q (resident)

出力は、ファイルが MFT の 24 番目のエントリ (ファイル インデックスは 24) を占め、標準情報、ファイル名、2 つのインデックス ルートを含む 4 つの属性が含まれていることを示しています (インデックスは基本的にディレクトリなどのエントリの照合リストです)。 NTFS v5 で最新の Windows 2000 Magazine シリーズの $Quota インデックスを NTFS で使用する方法について説明します。

ボリューム上のすべてのファイルをダンプするには、ファイル名を指定せずに NFI のコマンド ラインでドライブ文字を指定します (例: nfi c:)。 すべてのメタデータ ファイルを含む各 MFT エントリの一覧が表示されます。

NFI には、セクター番号をそれが存在するファイルに変換する機能など、他にもいくつかの優れた機能があります。 ドライブ C: 上のファイル セクター 2345 が何かを知りたいですか? コマンド nfi c: 2345 を使用します。 これは、ボリューム セットやストライプ セットなどのソフトウェア RAID ボリュームでは失敗します。 NFI は NT 4 と Windows 2000 の両方で動作します。

非表示の WIN9X レジストリ キー

2 号前の記事で、私は次のニュースレターで「非表示の Win9x レジストリキー」のことを話すと言いました、そして、それを私が忘れていたことを皆さんが思い出させてくれました。 そういうわけで今月は、Windows 9x の非表示のレジストリ キーについて説明します。

数年前、私は Windows NT で非表示のレジストリキーを作成する方法を発見しました。 非表示というには、Regmon を使用してキーを作成するアプリケーションによってアクセスされているキーを確認できますが、キーの値を確認する Win32 プログラムを作成することも、Regedit または Regedt32 レジストリ エディターを使用してキーを確認することもできないことを意味します。 非表示のキーは、試用版製品のタイムアウト日など、エンドユーザーが変更できないようにするデータを格納する場合に便利です。

非表示のレジストリ キーを作成するトリックは、Win32 API が構築されるシステム呼び出しインターフェイスであるネイティブ NT API が、カウントされた Unicode 文字列としてレジストリ キーを指定する必要があることを認識することでした。 カウントされた Unicode 文字列は、長さが null 終端記号の存在ではなく、長さフィールドによって示される文字列です。 そのため、ネイティブ API を使用して、"test\0test" のような null 文字を含むレジストリ キーを作成できます。 Win32 API のレジストリ キー API は null で終わる文字列に基づいているため、Win32 API を使用して null 終端文字を含むレジストリ キーを開く方法はありません。 前の例のキー名を RegOpenKey または RegCreateKey に渡そうとした場合、または "test" として扱われる場合、文字列は null 文字で切り捨てられます。 Windows NT と Windows 2000 にバンドルされているものを含むすべての既存のレジストリ エディターは Win32 API を使用するため、ネイティブ API を使用して null 文字埋め込み名を作成するアプリケーションは、非表示キーを効果的に作成します。

この方法は Windows NT で動作しますが、Windows 9x はどうなりますか? 私はある人が Regedit に表示されないキーに Internet Explorer(IE) がアクセスしていることを示す Regmon ログファイルをメールで送ってくるまで、Windows 9x で非表示レジストリ・キーを作る方法があるとは思わいませんでした。 これを自分で確認するには、Regmon を起動し、次のインクルード フィルター "policydata" を設定します。 次に、IE (IE 4 および IE 5 のすべてのバージョンで動作します) を起動し、Web サイトにアクセスします。 Regmon に出力が表示されない場合は、IE のオプション構成ダイアログに移動し、Content Advisor が有効になっていることを確認します。

Content Advisor が有効になっている場合、またはシステムで有効になっている場合は、HKLM\PolicyDatキーとそのサブキーへのアクセスが表示されます。 ただし、Regedit を見ると、HKEY_LOCAL_MACHINE の下に PolicyData キーは見つかりません。 少し時間をとって、何が起こっているのかわかるか見てみましょう。

答えは、IE は RegLoadKey Win32 API を使用してレジストリ ハイブを動的に読み込み、必要な値を読み取り、RegUnloadKey を使用してハイブをアンロードすることです。 ハイブには C:\Winows\System\Ratings.pol という名前が付けられています。ファイルは非表示で読み取り専用ですが、「attrib –r –h c:\windows\system\ratings.pol」と入力することで表示できます。

Regmon に表示されるトレースには、Content Advisor がハイブで探している情報が表示されます。 その内容を自分で調べる場合は、www.sysinternals.com/regload.zip から my Regload ユーティリティをダウンロードし、次の構文で実行します: regload test c:\windows\system\ratings.pol。 次に、Regedit を開き、HKLM\test を参照します。 表示される値は、Content Advisor で指定した設定に対応し、ハイブの Users\FileName0 値で指定された設定ファイルに関連しています。 値は通常、C:\Windows\System\RSACi.rat を指します。これは、インターネット コンテンツ評価関連付けによって定義された評価ファイルです。 ちなみに、Content Advisor のレジストリ設定には、"PleaseMom" というややユーモラスな名前の値が表示される場合があります (例: HKLM\Test\Users\Default の下)。 この値は、[Content Advisor の設定] ダイアログの [全般] ページの [スーパーバイザーがパスワードを入力して制限されたコンテンツを表示できる] チェックボックスから派生します。

Microsoft がこれらのレジストリ値の存在を難読化する理由は明らかです。 しかし、そのデザインにはかなり深刻な弱点があります。 Content Advisor を有効にする場合は、[Content Advisor の設定] ダイアログを保護するパスワードを指定する必要があることに注意してください。 このパスワードは HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Ratings\Key に保存されません。 その値を削除し、パスワードを入力せずに Content Advisor の設定にアクセスできます。 では、IE の開発者がわざわざ Content Advisor の設定を難読化したのに、なぜこのようなバックドアを野放しにしているのでしょうか? それは、一般的な Microsoft のセキュリティ設計だと思います。 ところで、Regload で読み込んだキーをアンロードするには、regload test と入力するだけです。

近日公開予定

新しい Whistler システムコール

Whistler は、Windows 2000 オペレーティング システムの段階的な進化であり、信頼性の向上と Windows 9x オペレーティング システムからのユーザーの簡単な移行に焦点を当てています。 ただし、カーネルの変更がいくつか含まれています。 最も顕著なのは、いくつかの新しいシステム呼び出しとエクスポート (デバイス ドライバーで使用できる) カーネル関数です。 次回は、これらの新しいカーネル API のプレビューを提供します。


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

公開日: 2000 年 11 月 30 日 午後 7:05 by ottoh

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