Windows 2000で PageFileを 0 にする
Windows 2000は仮想メモリにゼロを指定すると、0x1400000 バイト(約20Mバイト)のtemppf.sys というファイルができてしまい、そこを仮想メモリとして使用します。
しかもこの一時的な仮想メモリファイルができると、必ずダイアログで警告を促すメッセージが出てきます。
仮想メモリを完全にゼロにした上で、この警告メッセージも出さないようにすることはできるでしょうか?
この制御はどこでやっているかというと、実はWinlogon.exe が処理しています。
ログイン時にページファイルのサイズが一定値以下だった場合、20Mの temppf.sys を %SystemRoot%\System32\ に作成して、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management の TempPageFile のDWORDの値が 1 だった場合ダイアログを表示するという処理が行われています。(ページファイルが小さい場合レジストリをセットしています)
1. WinLogon.exe の temppf.sys 作成機能を殺す方法。
WinLogon.exe は、ACLの権限を取得できなかった場合、 PageFileの作成をあきらめてしまうので、それを利用して、PageFileの作成をさせない方法です。 1箇所 jnz を jmp に書き換えました。
ダウンロードはこちら 。
ベースは Windows2000-KB904711-v2-x86-JPN ですから、5.0.2195.7061 の WinLogon.exe になります。
一応、書き換え箇所 をアップ。 75 を eb に書き換えただけです。
2.ファイルの置き換えがいやだという人向けに、
まず、 %SystemRoot%\System32\ に temppf.sys という、【フォルダ】を作成します。既に、 temppf.sys がある場合は、仮想メモリを増やして、再起動して消してから作ってください。
実は、 Winlogon.exe は temppf.sys を DeleteFileW で消してから、NtCreatePagingFile を呼んでるだけなので、フォルダだと削除できないのです。
次に regedt32 を起動して、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management へ移動して、セキュリティの設定から、アクセス許可、詳細を開いて、SYSTEMの値の設定権限を拒否にしてやります。
後、TempPageFile が1になってたら、0にしておきましょう。
これで、ダイアログが出なくなります。
どちらでも仮想メモリゼロが実現できるはずです。
ただ、taskmanager では仮想メモリは物理メモリとページファイルの合計なので、確認できないことと、Windowsが仮想メモリを想定して作られてるシステムなので、メモリの残りがなくなるとアプリケーションが簡単に起動できなくなったり、不安定になったりします。
だから、あまりお勧めはしませんけどね(^^;
ちなみに、0にすると コミットチャージの報告値がバグるので、あんまり良くないかもしれません。レジストリでページファイル1M指定すると、直りますが、小さすぎるページファイルだと不安定なのは変わらないようです。
Comments