こんにちは、阿久津です。昨日Microsoftの月例セキュリティ更新プログラムが公開されたばかりですが、その中に突如公開を取りやめた更新プログラムがありました。「MS13-036」はサポート技術情報「2829996」で発見されたKMD(Kernel-Mode Driver)がメモリ内で行うオブジェクト処理に問題があり、特権が昇格するというセキュリティホールです。

対象となるOSはWindows Vista、Windows 7、Windows Server 2008および、Windows Server 2008 R2の4種類で、Windows 8は含まれていません。しかし、同更新プログラムを適用するとSTOPエラーが発生し、Windows OSが正常に起動しない、もしくは一部のアプリケーションが動作しないという問題が発生しました。Microsoftは一部のアプリケーションとしてKasperskyのウイルス対策ソフトを取り上げ、Kernel側も自社フォーラムで注意を喚起しています。

図01 注意喚起を行うKasperskyのフォーラム投稿

筆者も日本マイクロソフトが公開した「KB2839011」で知りましたが、一歩出遅れたのか、仮想マシン上のWindows VistaおよびWindows 7にKB2839011はインストールされていません。既に「KB2823324」をインストールされた場合は、管理者権限を持つコマンドプロンプト上で「wusa.exe /uninstall /kb:2823324 /quiet」と実行すればアンインストール可能です。

既にコンピュータがSTOPエラーで正常に動作しない場合は、先のKB2839011」で説明されているように、Windows VistaもしくはWindows 7のセットアップDVD-ROMからコンピューターを起動し、「システム回復オプション」から以前の復元ポイントに復元するか、「dism /image:C:\ /get-packages | findstr 2823324」と実行して、インストール済み更新プログラムを検索。ヒットした場合は「dism /image:C:\ /remove-package /PackageName:Package_for_KB2823324~31bf3856ad364e35~x86~~6.1.1.1」と実行して、KB2823324をアンインストールしてください。

さて、今回のKB2839011問題でも対処法として紹介されているように、復元ポイントの作成は重要です。復元ポイントは基本的に毎日自動作成されますが、デスクトップアプリやデバイスドライバーのインストール時や、「Windows 7のファイルの回復」でバックアップを作成する場合にも自動作成されるため、必ずしも毎日作成される訳ではありません(図02)。

図02 システムの復元ポイントはデスクトップアプリのインストール時も自動的に作成されます

また、以前の状態を残すには、HDD(ハードディスクドライブ)の空き容量と、システムの保護に用いる領域を一定量確保する必要があります。同機能は最小限で300メガバイトの空き容量を必要とし、初期状態ではドライブ容量の15パーセントを領域として確保されますが、筆者は256ギガバイトのSSD(ソリッドステートドライブ)に対して1ギガバイトを割り当て中(図03)。

図03 復元ポイントの保存領域が狭いと、古い復元ポイントが順番に削除されるため、余裕を持って確保する必要があります

この復元ポイントを作成するには、「システムのプロパティ」ダイアログの<システムの保護>を開き、<作成>ボタンをクリックしなければなりません。もっともコマンドプロンプトや、「ファイル名を指定して実行」から「rstrui.exe」を実行すれば同ダイアログは起動しますが、少々面倒であることに変わりはありません。そこで今週のチューニングは、デスクトップのコンテキストメニューに復元ポイントを作成する項目を追加しましょう。なお、今回はVBScriptファイルで復元ポイントを作成しますので、ここからZIP形式ファイルをダウンロードし、展開してお使いください。

1. 管理者権限でレジストリエディターを起動します。
2. HKEY_CLASSES_ROOT\Directory\Background\shellキーにCreate Restore Pointキーを作成します。
3. Create Restore Pointキーを開き、「(既定)」のデータ値を「復元ポイントの作成」に変更します。
4. 文字列値「HasLUAShield」を作成します。
5. 文字列値「Icon」を作成し、値のデータを「SystemPropertiesProtection.exe」に変更します。
6. HKEY_CLASSES_ROOT\Directory\Background\shell\Create Restore Pointキーにcommandキーを作成します。
7. commandキーを開き、「(既定)」のデータ値を「WScript C:\Windows\CreateRP.vbs」に変更します。
8. レジストリエディターを終了させます。
9. リンクからダウンロードした「CreateRP.vbs」ファイルをWindowsフォルダーに移動します。

これでチューニングが完了しました(図04~20)。

図04 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図05 レジストリエディターが起動したら、HKEY_CLASSES_ROOT\Directory\Background\shellまでキーをたどって開きます

図06 shellキーを右クリックし、メニューから<新規>→<キー>とクリックします。

図07 キー名を「新しいキー #1」から「Create Restore Point」に変更します

図08 Create Restore Pointキーの「(既定)」をダブルクリックし、値のデータを「復元ポイントの作成」に変更して<OK>ボタンをクリックします。

図09 Create Restore Pointキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図10 値名を「新しい値 #1」から「HasLUAShield」に変更します

図11 Create Restore Pointキーの右ペインを右クリックし、<新規>→<文字列値>とクリックします

図12 値名を「新しい値 #1」から「icon」に変更します

図13 文字列値「icon」をダブルクリックし、値のデータを「SystemPropertiesProtection.exe」に変更して<OK>ボタンをクリックします

図14 Create Restore Pointキーを右クリックし、メニューから<新規>→<キー>とクリックします。

図15 キー名を「新しいキー #1」から「command」に変更します

図16 commandキーの「(既定)」をダブルクリックし、値のデータを「WScript C:\Windows\CreateRP.vbs」に変更して<OK>ボタンをクリックします。

図17 <×>ボタンをクリックして、レジストリエディターを終了させます

図18 本記事のリンクからダウンロードしたVBScriptファイルをWindowsフォルダーにドラッグ&ドロップします

図19 管理者権限を求めるメッセージが現れたら、<続行>ボタンをクリックします

図20 VBScriptファイルでる「CreateRP.vbs」がWindowsフォルダーに用意できれば準備は完了です

それでは結果を確認してみましょう。デスクトップのコンテキストメニューには、<復元ポイントの作成>が追加されており、同項目を選択するとステップ9で用意した「CreateRP.vbs」が起動し、復元ポイントの作成が始まります。ダイアログのテキストボックスには、自動的に「手動復元ポイント」とメッセージが挿入されるようにしましたが、必要に応じてメッセージを変更しても構いません(図21~23)。

図21 デスクトップの何もないところを右クリックし、メニューから<復元ポイントの作成>をクリックします

図22 すると「復元ポイントの作成」ダイアログが現れます。必要に応じてテキストボックスの内容を変更してから<OK>ボタンをクリックしてください

図23 これで復元ポイントが作成されました。<OK>ボタンをクリックしてダイアログを閉じます

復元ポイントの作成を確認するには「rstrui.exe」を実行して「システムの復元」を起動してください。ご覧のとおり復元ポイントが作成されたことを確認できます。なお、本チューニングを破棄する場合は、Windowsフォルダーに移動した「CreateRP.vbs」を削除し、HKEY_CLASSES_ROOT\Directory\Background\shell\Create Restore Pointキーを削除してください(図24~26)。

図24 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「rstrui」と入力して<OK>ボタンをクリックします

図25 「システムの復元」が起動したら、<別の復元ポイントを選択する>→<次へ>ボタンとクリックします

図26 図21から図23で実行した復元ポイントが作成されたことを確認できます

それでは、また次号でお目にかかりましょう。

阿久津良和(Cactus