Windows File Protection を無視する方法
Windows 2000やMe以降のOSにはシステムファイルを置き換えても元に戻す機能が搭載されています。
Windows File ProtectionやSystem File Checker と呼ばれる機能です。(MeはSystemFileProtection)
でも、パッチを当てたりしたシステムファイルが置きかえれなくて困ることもあります。
そこで、これらを無効にする方法や、有効にしたまま置き換える方法を紹介します
レジスタの変更後は再起動が必要です。
レジストリ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon と
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Windows File Protection
後者が優先される。
SfcScan(DWORD)
0x0= 再起動後に保護されたファイルをスキャンしない (デフォルト値)
0x1= 再起動のたびにすべての保護されたファイルをスキャンする (sfc /scanboot を実行した場合に設定)
0x2= 再起動後 1 回のみすべての保護されたファイルをスキャンする (sfc /scanonce を実行した場合に設定)
SFCQuota(DWORD)
Dllcache で保護される検証済みのキャッシュサイズ。
ただし、仮想ディスクの最大値を差し引いたHDDの空き容量が600M未満の場合や、ネットワークインストールしたときのi386\lang 内のファイルは除外される。
SFCDllCacheDir(REG_EXPAND_SZ)
DllCacheのデフォルトの場所、デフォルトは%SystemRoot%\System32
SFCDisable(DWORD)
1のときSFCが無効になる起動の際、再び有効にするかどうか確認される。デバッガが必要。
2の時は次の起動の時のみ、ただし、デバッガが必要。
3はsetup.exeやsfctest.exeのパフォーマンステスト用。有効になる。
4の時は有効だが、ポップアップを表示しない(サーバーOSのデフォルト)
0xffffffd9 無効にする。
SFCShowProgress(DWORD)
System File Checker がスキャン中に進行メーターを表示しない場合は0を指定する(デフォルトは表示)
SFCDebug(DWORD)
SFCのデバッグ用?読み込むだけで未使用。
SFCChangeLog(DWORD)
0以外の時、%systemroot%\sfclog.txt にログを出力する。
SFCStall(DWORD)
指定時間(秒)の間SFCの機能を停止する
Windows Meの場合は
HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\SystemFileProtection
レジストリのShowPopups の値を1にするとポップアップ表示が有効になります。
以前の記事で書いたようにmsconfigでスタートアップの *STATEMGRを無効にして再起動 するとSFPを無効にすることもできます。
Windows 2000やXPは以下のフォルダを参照してファイルを復元します。
%SystemRoot%\system32\dllcache %SystemRoot%\ServicePackFiles
%SystemRoot%\Driver Cache\i386
ですから、これらの参照もとのファイルを置き換えたり、フォルダを一時的に別の名前にしてしまうと、参照して復元することができません。
それを利用して、SFCを無効化せずにファイルを置き換えることもできます。
これらを、IE6 BonusPackがインストールできない人は試してみてください。
関連サイト:
Windows ファイル保護機能について
Windows ファイル保護と Windows
システム ファイルの保護のポップアップ通知を表示する方法
関連記事:
Windows Me に Windows Script Host 5.7をインストール
Internet Explorer 6 Bonus Pack 作りました
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Windows File Protectionというキーが見あたりません。
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoftまでは有るのですが
以降Windows NTというキーが無く代わりにWindowsといったキーが有ります。
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windowsには
Windows File Protectionというキーは有りません。
レジストリ内を「Windows File Protection」で検索したところ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\System\Windows File Protectionというキーは有りましたが
上記のDWORD値は有りませんでした。
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Windows File Protectionというキーが見あたりません。
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoftまでは有るのですが
以降Windows NTというキーが無く代わりにWindowsといったキーが有ります。
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windowsには
Windows File Protectionというキーは有りません。
レジストリ内を「Windows File Protection」で検索したところ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\System\Windows File Protectionというキーは有りましたが
上記のDWORD値は有りませんでした。
sfc.dll上では Software\Policies\Microsoft\Windows NT\Windows File Protection を参照してるので間違いないようです。
ある場合に最優先されるだけなので、気にしなくて良いでしょう。
sfc.dll上では Software\Policies\Microsoft\Windows NT\Windows File Protection を参照してるので間違いないようです。
ある場合に最優先されるだけなので、気にしなくて良いでしょう。
SFCDisableに「ffffffd9」を入力して再起動すると「0」に戻ってしまいました。
変更後再起動せずにWindowsXP-Windows2000-Script58-v3-x86-jpn.EXEを実行しても
jscript.dllのバージョンは変わらないようです。
SFCDisableに「ffffffd9」を入力して再起動すると「0」に戻ってしまいました。
変更後再起動せずにWindowsXP-Windows2000-Script58-v3-x86-jpn.EXEを実行しても
jscript.dllのバージョンは変わらないようです。
SFCの件は調べてみますが
ためしに、explorer.exeを全て終了させた状態で、Jscript.dllをコマンドプロンプトで削除できるか確認して(復活しないのを確認して)、WindowsXP-Windows2000-Script58-v3-x86-jpn.EXE か IE6Bonus-Packを実行してみてください。
復活するなら、復旧元のフォルダを一時的に変更してみてください。
SFCの件は調べてみますが
ためしに、explorer.exeを全て終了させた状態で、Jscript.dllをコマンドプロンプトで削除できるか確認して(復活しないのを確認して)、WindowsXP-Windows2000-Script58-v3-x86-jpn.EXE か IE6Bonus-Packを実行してみてください。
復活するなら、復旧元のフォルダを一時的に変更してみてください。
ファイルが復活するのは、元のファイルがバックアップとして残ってるからです。
この記事にあるように、元のフォルダ名を変更します。
C:\WINNT\system32は復旧元ではなく復旧先です
Jscript.dllを削除してもすぐに復活してしまうのですが
「復旧元のフォルダを一時的に変更してみてください。」
とはどういう事でしょうか。
Jscript.dllが存在するC:\WINNT\system32のフォルダ名を変更しろという事でしょうか。
復旧元のフォルダがわかりません。
ファイルが復活するのは、元のファイルがバックアップとして残ってるからです。
この記事にあるように、元のフォルダ名を変更します。
C:\WINNT\system32は復旧元ではなく復旧先です
Jscript.dllを削除してもすぐに復活してしまうのですが
「復旧元のフォルダを一時的に変更してみてください。」
とはどういう事でしょうか。
Jscript.dllが存在するC:\WINNT\system32のフォルダ名を変更しろという事でしょうか。
復旧元のフォルダがわかりません。
ファイルが復活するのは、元のファイルがバックアップとして残ってるからです。
この記事にあるように、元のフォルダ名を変更します。
C:\WINNT\system32は復旧元ではなく復旧先です
ファイルが復活するのは、元のファイルがバックアップとして残ってるからです。
この記事にあるように、元のフォルダ名を変更します。
C:\WINNT\system32は復旧元ではなく復旧先です
C:\WINNT\Driver Cache\i386をC:\WINNT\Driver Cache_tmp\i386_tmpに変更し
C:\WINNT\system32\dllcacheをC:\WINNT\system32\dllcache_tmpに変更した上で
(%SystemRoot%\ServicePackFilesは容量確保の為既に削除済みでした)
jscript.dllを削除しても復活してしまいました。
Cドライブを対象に「jscript.dll」をWindows標準の検索ツールで検索しても
C:\WINNT\system32\jscript.dll以外に見あたりません。
バックアップ元はどこにあるのでしょうか。
C:\WINNT\Driver Cache\i386をC:\WINNT\Driver Cache_tmp\i386_tmpに変更し
C:\WINNT\system32\dllcacheをC:\WINNT\system32\dllcache_tmpに変更した上で
(%SystemRoot%\ServicePackFilesは容量確保の為既に削除済みでした)
jscript.dllを削除しても復活してしまいました。
Cドライブを対象に「jscript.dll」をWindows標準の検索ツールで検索しても
C:\WINNT\system32\jscript.dll以外に見あたりません。
バックアップ元はどこにあるのでしょうか。
復活と言う話なのですが、コピー自体はできていますか?
一度 Explorer.exe / IExplore.exeを終了後、コマンドプロンプトで
JScript.dllを削除してみて、ファイルが復活するかチェックしてみてください。
復活するならば、Filemonでどこからコピーされているか見てみましょう。
復活と言う話なのですが、コピー自体はできていますか?
一度 Explorer.exe / IExplore.exeを終了後、コマンドプロンプトで
JScript.dllを削除してみて、ファイルが復活するかチェックしてみてください。
復活するならば、Filemonでどこからコピーされているか見てみましょう。