Windows ファイル保護と Windows

最終更新日: 2001年12月4日

Microsoft Windows オペレーティング システムの歴史における共通の問題は、共有システム ファイルが、オペレーティング システム以外のインストール プログラムによって上書きされてしまう可能性でした。そのような変更が行われると、ユーザーは、アプリケーション エラーからオペレーティング システムのクラッシュに至るまで、予測できないシステム パフォーマンスを経験する場合があります。この問題は、いくつかの種類のファイルに影響します。最も一般的なのは、ダイナミック リンク ライブラリ (.dll) と実行可能ファイル (.exe) です。

Windows 2000 と Windows XP では、Windows ファイル保護 (WFP) 機能により、特定のシステム ファイルの上書きや置換は防がれます。共有システム ファイルを上書きすると、アプリケーション エラーからオペレーティング システムのクラッシュに至るまで、予測できないシステム パフォーマンスが生じる場合があります。システム ファイルの非標準的な置換によって生じるシステムの不安定さは、一般的な問題でした。これらの重要なシステム ファイルの置換を防ぐことによって、ファイル バージョンの不一致は避けられ、システムの全体的な安定性は向上します。

注 : システム ファイルの保護は、Windows Millennium Edition では System File Protection (SFP) と呼ばれています。WFP と SFP は、同じサービスを実行します。ただし、保護されたファイルを監視する方法、どのファイルが保護されるか、およびどの機構を使用して保護されたファイルを置換できるかという点でわずかに異なります。SFP については、System File Protection and Windows Me を参照してください。

トピック
Windows ファイル保護についてWindows ファイル保護について
Windows ファイル保護とドライバのインストールWindows ファイル保護とドライバのインストール
System File CheckerSystem File Checker
サポートされているファイル置換の機構サポートされているファイル置換の機構
保護されているファイルの一覧保護されているファイルの一覧
無人セットアップのパラメータ無人セットアップのパラメータ
Windows ファイル保護を無効にするWindows ファイル保護を無効にする
その他のレジストリ設定その他のレジストリ設定
*

Windows ファイル保護について

WFP は、バックグラウンドで動作し、保護されたシステム ファイルを置換する試みを検出することによってシステム ファイルを保護します。WFP は、保護されたディレクトリ内のファイルに対するディレクトリ変更通知を受信した後、トリガされます。この通知が受信されると、WFP はどのファイルが変更されたかを判定します。ファイルが保護されている場合、WFP は、カタログ ファイル内のファイル署名を参照して、新しいファイルが正しい Microsoft バージョンかどうか判定します。正しいバージョンでない場合、オペレーティング システムは、dllcache ディレクトリまたは配布メディア内の正しいバージョンでファイルを置換します。

保護されたファイルの置換を検出した後、WFP は、下記の順序で置換されたファイルを検索します :

1.

dllcache ディレクトリを検索します。

2.

システムがネットワーク インストール経由でインストールされた場合、ネットワーク インストール パスを検索します。

3.

CD を検索します。

ファイルが dllcache 内にある場合、またはインストール ソースが自動的に検索される場合、WFP は、ユーザーにメッセージを表示せずにファイルを置換し、続行します。ファイルが検索できない場合、WFP は、配布メディアを挿入するか復元操作を取り消すようユーザーに指示するダイアログ ボックスを表示します。

また、WFP は、システム イベント ログにイベントを記録し、ファイル置換の試みを注記します。管理ユーザーが WFP ファイル復元を取り消した場合、取り消しを記したイベントがログに記録されます。

注 : dllcache ディレクトリの "ヒット率" は、SFCQuota 設定で指定されるキャッシュのサイズに関連があります。SFCQuota 設定の詳細については、この記事で後述する「保護されているファイルの一覧」を参照してください。

ページのトップへページのトップへ

Windows ファイル保護とドライバのインストール

Windows 2000 と Windows XP の保護されたシステム ファイルには、"再頒布可能" として以前分類されていた多くのファイルが含まれています。Msvcrt.dll は、そのようなファイルの例です。Windows 2000 と Windows XP 用のドライバは、これらのファイルをインストールしてはならず、その代わりに、オペレーティング システムが提供するバージョンを使用する必要があります。

注 : Windows Hardware Quality Labs (WHQL) は、これらシステム ファイルのいずれかをインストールするすべてのドライバに対して、"Designed for Windows" ロゴを許可しません。

残念なことに、多くの Windows NT 4.0 ドライバが機能するには、これらの再頒布可能ファイルが必要です。さらに、デバイス ドライバ インストール ファイル (.inf) では、ドライバ開発者が条件付き分岐を実行できず、そのため Windows 2000、Windows XP、および Windows NT 4.0 の各ドライバを区別できません。Windows NT 4.0 ドライバがシステム ファイルのインストールを必要とするケースでは、ソリューションはシンプルです。ドライバ開発者は、同様だが別個の、2 つの INF ファイルを提供する必要があります。

Windows 2000 と Windows XP の場合、再頒布可能と定義されていたかいなかったかにかかわらず、INF ファイルは、すべてのシステム ファイルをインストールまたは変更してはなりません。これらのファイルは、INF の [CopyFiles] セクションに表示しないでください。

Windows NT 4.0 ドライバの場合、INF ファイルは、必要に応じて再頒布可能ファイルをインストールできます。

最高のプラグ アンド プレイの操作性をユーザーに提供するため、Windows 2000 または Windows XP の INF ファイルは、配布メディアのルート ディレクトリに置く必要があります。Windows プラグ アンド プレイはこの INF ファイルを検索し、最小限のユーザー操作で、ドライバをインストールします。Windows NT 4.0 の INF ファイルは、配布メディア上のサブディレクトリ内に配置する必要があります。ベンダは、Windows NT 4.0 ユーザーに対し、ドライバをインストールするため、このサブディレクトリに移動するよう指示できます。

Windows 2000 または Windows XP 配布メディア上にドライバを持つベンダは、下記のガイドラインに従うことによって、それらのドライバをより新しいバージョンで更新できます :

更新済みドライバを開発する際、INF ファイルで、1 つまたは複数の DriverVer エントリ内の日付を更新します。この日付は、ドライバ パッケージ内の 1 つ以上のファイルが変更された日付でなければなりません。DriverVer エントリについては、INF ファイルの [Version] セクションに関する Windows DDK ドキュメントを参照してください。

Windows ロゴのテストおよびドライバ署名取得のために、更新済みドライバ パッケージを WHQL に提出します。

WHQL が提供する署名済みカタログ ファイルと共に、更新済みドライバ パッケージを配布します。

この更新済みおよび署名済みのドライバ パッケージを受信すると、ユーザーは、ファイル署名確認のダイアログ ボックスがインストール中表示されることなく、更新済みドライバをインストールできます。

WFP とドライバに関する問題の概要 :

Windows 2000 または Windows XP のどのシステム ファイルも再頒布しないでください。WHQL は、任意の Windows システム ファイルを含むか、インストールするか、または変更するすべてのドライバに対して、"Designed for Windows" ロゴを許可しません。

必要に応じ、Windows 2000、Windows XP、および Windows NT 4.0 でのデバイス インストールを処理するため、それぞれ異なる INF ファイルを開発して配布します。

Windows 2000 または Windows XP 配布メディアに含まれるドライバを持つベンダは、これらのドライバを更新できます。

Windows ロゴ テストとドライバ署名用に、ドライバを WHQL に提出します。

デバイス ドライバのインストールの詳細については、Windows DDK を参照してください。

ページのトップへページのトップへ

System File Checker

System File Checker (SFC.EXE) というコマンド ライン ユーティリティを使用すると、管理者は、保護されたファイルをすべてスキャンして、それらのバージョンを確認できます。また、System File Checker は、後述の「その他のレジストリ設定」で説明するレジストリ値 SFCScan を設定できます。

さらに、System File Checker は、%Systemroot%\system32\dllcache ディレクトリをチェックして再作成します。dllcache ディレクトリが破損するか使えなくなった場合、SFC /SCANNOWSFC /SCANONCESFC /SCANBOOT、または SFC /PURGECACHE を使用して、dllcache ディレクトリの内容を修復できます。

SFC.exe は、保護されたシステム ファイルをすべてスキャンし、正しい Microsoft バージョンで誤ったバージョンを置換します。以下に構文を示します。

SFC [/SCANNOW] [/SCANONCE] [/SCANBOOT] [/CANCEL] [/QUIET] [/PURGECACHE] [/CACHESIZE=x]

/SCANNOW  すべての保護されたシステム ファイルを直ちにスキャンします。

/SCANONCE  すべての保護されたシステム ファイルを 1 回スキャンします。

/SCANBOOT  すべての保護されたシステム ファイルを、起動時に毎回スキャンします。

/CANCEL  保護されたシステム ファイルの保留中のスキャンをすべて取り消します。

/QUIET  ユーザーに確認メッセージを表示せずに、誤ったファイル バージョンをすべて置換します。

/PURGECACHE  ファイル キャッシュを削除し、保護されたシステム ファイルをすべて直ちにスキャンします。

/CACHESIZE=x  ファイル キャッシュのサイズを設定します (メガバイト単位)。

ページのトップへページのトップへ

サポートされているファイル置換の機構

保護されたシステム ファイルの置換は、下記の機構を使用してサポートされます :

Windows Service Pack のインストール (UPDATE.EXE)

HOTFIX.EXE を使用してインストールされる修正プログラムの配布

オペレーティング システムのアップグレード (WINNT32.EXE)

Microsoft Update

Windows デバイス インストーラ

保護されたファイルを上記のもの以外の手段で置換すると、WFP によって置換されているファイルとなります。

Windows 2000 または Windows XP と共に出荷されるサード パーティのドライバを更新する場合、ドライバ開発者には、下記の 2 つのオプションがあります。

完了したドライバ更新プログラムを、検証テスト用に、Windows Hardware Quality Labs (http://www.microsoft.com/japan/whdc/whql/default.mspx) に提出します。ドライバが Pass した場合、WHQL によって署名され、デバイス インストーラ経由で問題なくインストールできます。

WHQL 検証テスト中のドライバの未署名バージョンをインストールします。既定では、署名されていないドライバをインストールしようとすると、Windows デバイス インストーラは、ユーザーに警告ダイアログ ボックスを表示します。ユーザーは、その警告を無視して、署名されていないドライバをインストールすることもできます。

ページのトップへページのトップへ

保護されているファイルの一覧

Windows CD 上で出荷されるすべての SYS、DLL、EXE、および OCX ファイルは、保護されます。また、TrueType フォントである、Micross.ttf、Tahoma.ttf、および Tahomabd.ttf も保護されます。

dllcache ディレクトリのサイズは、レジストリ値 HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Winlogon\ SFCQuota の設定に依存します。dllcache ディレクトリのサイズが SFCQuota の値に達するまで、WFP はキャッシュにファイルを追加します。SFCQuota の値を 16 進数 0xFFFFFFFF に設定すると、WFP は、保護されたシステム ファイルをすべてキャッシュします。SFCQuota = 0xFFFFFFFFh は、Windows 2000 の場合、既定の設定です。

セットアップの完了後、WFP は、保護されたファイルすべてのスキャンを実行し、無人インストール方法を使用してインストールされたアプリケーションによってファイルが変更されなかったことを確認します。また、このスキャンにより、dllcache ディレクトリは、確認済みのファイル バージョンで作成されます。dllcache ディレクトリが破損した場合、SFC /PURGECACHE を実行します。SFC は、dllcache ディレクトリの内容を削除し、すべての Windows ファイルを再スキャンして、確認済みのファイル バージョンで dllcache ディレクトリを再作成します。

dllcache ディレクトリの場所は、HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Winlogon\SFCDllCacheDir (REG_EXPAND_SZ) で指定されます。SFCDllCacheDir の既定値は、%Systemroot%\system32\dllcache です。SFCDllCacheDir の設定は、ローカル パスである必要があります。

WFP は、dllcache ディレクトリで、システム ファイルの正しいバージョンを検索できない場合もあります。dllcache ディレクトリには、ファイルの古いバージョンが含まれているか、ファイルのどのバージョンもまったく含まれていない可能性があります。そのような場合、WFP はインストール メディアを検索しようとします。WFP がインストール メディアを検索できない場合、適切なメディアを挿入するようユーザーに指示するメッセージが表示されます。その後、WFP は、オペレーティング システムによって使用されている、または dllcache ディレクトリで検索された、誤ったファイル バージョンを置換します。

ページのトップへページのトップへ

無人セットアップのパラメータ

[SystemFileProtection]

このセクションには、WFP サービス用のパラメータが含まれます。このセクションが見つからないか空の場合、セットアップは、既定値を使用して WFP をインストールします。

SFCShowProgress

値 : 0 | 1

既定値 : 1

System File Checker がスキャン中に進行メーターを表示する場合、指定します。

値の説明

0    進行メーターは表示されません。

1    進行メーターが表示されます。

SFCQuota

値 : <MB 単位のサイズ (16 進数)> 既定値 : 0xFFFFFFFFh

システム ハード ドライブに格納される dllcache ファイル キャッシュのサイズを指定します。0xFFFFFFFFh が指定された場合、すべてのシステム ファイルが、dllcache ディレクトリにキャッシュされます。

例 : SFCQuota = 0xFFFFFFFFh

SFCDllCacheDir

値 : <dllcache ディレクトリの場所>

既定値 : %Systemroot%\system32\dllcache

dllcache ディレクトリの場所を指定します。このパスは、ローカル パスである必要があります。

例 : SFCDllCacheDir = "C:\Winnt\System32\dllcache"

ページのトップへページのトップへ

Windows ファイル保護を無効にする

HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Winlogon で値 SFCDisable (REG_DWORD) を設定することによって、WFP を無効にできます。既定では、SFCDisable0 に設定され、WFP がアクティブであることを意味します。SFCDisable1 に設定すると、WFP は無効になります。SFCDisable2 に設定すると、次のシステム再起動のときのみ、WFP を無効にします。その際、再び有効にするかどうかの確認メッセージは表示されません。

重要 : SFCDisable = 1 または SFCDisable = 2 を使用するには、I386kd.exe や Windbg.exe などのカーネル デバッガを、ヌル モデム ケーブル経由でシステムに接続する必要があります。

SFCDisable = 1 設定を使用して WFP が無効になった後、下記のメッセージがログオン後に表示されます。

警告 : Windows ファイル保護はこのシステムではアクティブになっていません。今、Windows ファイル保護を有効にしますか?これは次回の再起動まで Windows ファイル保護を有効にします。<はい> <いいえ>。

[はい] をクリックすると、次のシステム再起動まで WFP は再アクティブ化されます。SFCDisable0 に設定されるまで、このメッセージは、ログオンに成功するたびに表示されます。

注 : 上記のメッセージは、Administrators にのみ表示されます。

ページのトップへページのトップへ

その他のレジストリ設定

WFP または System File Checker 用のレジストリ設定はすべて、HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Winlogon にあります。既定では、Administrators と System のみが、これらの設定を変更できます。

SFCDisable (REG_DWORD)

0 = 有効化 (既定値)。

1 = 無効化。起動の際、再び有効にするかどうか確認される。デバッガが必要。

2 = 次の起動時のみ無効化。再び有効にするかどうか確認されない。デバッガが必要。

SFCScan (REG_DWORD)

0 = 起動時に、保護されているファイルをスキャンしない (既定値)。

1 = 起動時に毎回、保護されているファイルをスキャン。

2 = 保護されているファイルを 1 回スキャン。

SFCQuota (REG_DWORD)

n = dllcache クォータのサイズ (MB 単位)。

FFFFFFFF = ローカル ハード ドライブ上の保護されているシステム ファイルをキャッシュ。

SFCShowProgress (REG_DWORD)

0 = System File Checker の進行メーターは表示されない。

1 = System File Checker の進行メーターを表示 (既定値)。

SFCDllCacheDir (REG_EXPAND_SZ)

パス = dllcache ディレクトリのローカルの場所 (既定値は %Systemroot%\system32\dllcache)。


ページのトップへページのトップへ