次の方法で共有


Windows 上の LSAISO プロセスでの CPU 使用率が高い

この記事では、Windows を実行しているコンピューターで LSAISO プロセスで高い CPU 使用率が発生する問題の解決策について説明します。

適用対象: Windows 10 - すべてのエディション、Windows 11 - すべてのエディション、Windows Server 2016、Windows Server 2019、Windows Server 2022
元の KB 番号: 4032786

現象

LSAISO (LSA 分離) プロセスでは、Windows 10、Windows Server 2016、またはそれ以降のバージョンを実行しているコンピューターで CPU 使用率が高くなります。

原因

Windows では、LSAISO プロセスは、仮想セキュア モード (VSM) と呼ばれる新しいセキュリティ環境で分離ユーザー モード (IUM) プロセスとして実行されます。

DLL を IUM プロセスに読み込んだり、スレッドを挿入したり、ユーザー モードの APC を配信したりするアプリケーションとドライバーは、システム全体を不安定にする可能性があります。 この不安定化には、「現象」セクションに記載されている LSAISO CPU の高いシナリオが含まれる場合があります。

解決策 1: 排除のプロセスを使用する

一部のアプリケーション (ウイルス対策プログラムなど) では、DLL またはキューの APCs を LSAISO プロセスに挿入するのが一般的です。 これにより、LSAISO プロセスで CPU 使用率が高くなります。

トラブルシューティングのために、ツールを IUM プロセスにアタッチすることはできません。 これにより、LSAISO CPU スパイク中に Windows デバッグ ツールまたは WPA\XPERF を使用してスタック トレースをキャプチャできなくなります。 そのため、このシナリオで最適なトラブルシューティング方法は、"排除のプロセス" 手法を使用することです。 これを行うには、CPU スパイクが軽減されるまで、アプリケーションとドライバーを無効にします。 問題の原因となっているソフトウェアを特定したら、ソフトウェア更新プログラムのベンダーに問い合わせてください。 次の MSDN トピックに記載されている ISV の推奨事項を参照できます。

分離ユーザー モード (IUM) プロセス

Note

この方法では、CPU スパイクをテストするときに、疑わしいソフトウェアとドライバーを無効にした後、再起動が必要になる場合があります。

解決策 2: キューに入った APCs を確認する

Windows 用の無料のデバッグ ツール (WinDbg、KD、CDB、NTSD) をダウンロードします。 これらのツールは、Windows Driver Kit (WDK) と Windows Driver Kit (WDK) の両方に含まれています。 次に、次の手順に従って、どのドライバーが APC を LSAISO にキューに入れているかを確認します。

  1. CPU スパイクを再現するときに、次の Sysinternals Web サイトのNotMyFault.exeなどのツールを使用してカーネル メモリ ダンプを生成します。

    Sysinternals Suite

    Note

    システムで VSM が有効になっている場合は復号化が必要になるため、完全なメモリ ダンプは推奨されません。 カーネル ダンプを有効にするには、次の手順に従います。

    1. コントロール パネルで System 項目を開き、[Advanced システム設定]>を選択
    2. [システムのプロパティ] ダイアログ ボックスの [Advanced] タブで、[開始と回復] 領域の [Settings を選択します。
    3. [開始と回復] ダイアログ ボックスで、[デバッグ情報カーネル メモリ ダンプを選択します。
    4. 手順 5 で使用する Dump ファイル の場所を書き留め、 OK を選択します。
  2. Windows 用デバッグ ツールからWinDbg.exe ツールを開きます。

  3. [ File メニューの Symbol ファイル パスをクリックし、Microsoft Symbol Server の次のパスを [ Symbol パス ボックスに追加し、 OKを選択します。
    https://msdl.microsoft.com/download/symbols

  4. [ File ] メニューの [クラッシュ ダンプ 開く] をクリック

  5. 手順 1d で説明したカーネル ダンプ ファイルの場所を参照し、 Open を選択します。 .dmp ファイルの日付を確認して、このトラブルシューティング セッション中に新しく作成されたことを確認します。

  6. Command ウィンドウで、「!apc」と入力し、Enter キーを押します。

    !apc を示すカーネル ダンプ ファイルのコマンド ボックスのスクリーンショット。

    出力は次のスクリーンショットのようになります。

    !apc コマンドの出力のスクリーンショット。この例では、ProblemDriver.sysという名前のドライバーが LsaIso.exe の下に表示されます。

  7. LsaIso.exeの結果を検索します。 <ProblemDriver という名前のドライバーが>.sys (手順 6 の出力例のスクリーンショットに示されているように) LsaIso.exeの下に表示されている場合は、ベンダーに問い合わせ、Isolated User Mode (IUM) プロセストピックに記載されている推奨される軽減策を参照してください。

    Note

    Lsaiso.exeの下にドライバーが表示されない場合は、LSAISO プロセスにキューに登録された APCs がないことを意味します。

詳細

VSM では、仮想信頼レベル (VTL) と呼ばれる分離モードを使用して、IUM プロセス (トラストレットとも呼ばれます) を保護します。 LSAISO などの IUM プロセスは VTL1 で実行され、他のプロセスは VTL0 で実行されます。 VTL1 で実行されるプロセスのメモリ ページは、VTL0 で実行されている悪意のあるコードから保護されます。

Windows 10 および Windows Server 2016 より前では、ローカル セキュリティ機関サブシステム サービス (LSASS) プロセスは、ローカル システム ポリシー、ユーザー認証、監査の管理のみを担当していましたが、パスワード ハッシュや Kerberos キーなどの機密セキュリティ データも処理していました。

VSM のセキュリティ上の利点を使用するために、VTL1 で実行される LSAISO トラストレットは、VTL0 で実行されている LSAISO プロセスと RPC チャネルを介して通信します。 LSAISO シークレットは LSASS に送信される前に暗号化され、LSAISO のページは VTL0 で実行されている悪意のあるコードから保護されます。