現象
Windows 8 ベースのコンピューターにおいて Win32 API RasSetEntryProperties() 関数を実行するとハンドル リークが発生します。繰り返しこの関数が実行される場合、このハンドル リークが原因でページ プール内のリソース不足になることがあります。また、この関数は 既存の電話帳エントリのプロパティを変更したり、新規で電話帳エントリを作成するために使われるため、このような動作をするプログラムを実行した場合もハンドル リークが発生することがあります。
原因
Windows 8 の RasSetEntryProperties() 関数内部の動作でレジストリを操作するためにハンドルを 1 つ生成します。しかし、このハンドルが解放されないため、この関数を実行したプロセスにおいてハンドル リークが発生します。
解決方法
プロセスを終了させると、そのプロセスが生成したハンドルは、すべて解放されます。
そのため、ハンドル リークが発生するプロセスを定期的に再起動することによって、ページ プール内のリソース不足を抑止できます。
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細
プロセスが保持するハンドルの数はタスク マネージャーを使って確認することができます。
以下の手順に沿って操作してください。
-
Ctrl + Shift + Esc キーを入力し、タスク マネージャーを起動します。
-
「詳細」タブをクリックします。
-
名前、PID 等が表示されているカラムを右クリックし、「列の選択」をクリックします。
-
「ハンドル」にチェックし、「OK」ボタンをクリックします。
-
名前、PID 等が表示されているカラムに「ハンドル」が追加されていることを確認します。