Security-SPP エラー解消
に向けての遠回り
タスクスケジューラーの
エラー解決
管理共有の有効化など
(画像なし)

エラーのないWindowsを使いたいと思う常日頃。またもトラブルです。
何を契機に始まったのかわからないけれど、Security-SPP のエラーが発生していることがわかりました。
いつものように、自分用メモなので画像は撮っていません。
わかりづらくてすみません。
(※Windows 10 Pro x64)

イベント ビューアーを見たらエラーがたくさん記録されていた

イベント ビューアー > Windows ログ > Applocation
を開いてみたら、Security-SPPのエラーが大量に記録されていました。
記録が多過ぎからでしょうか?1ヶ月前からしか記録が残っていませんが、30秒ごとにエラーログが残ってました。

ソフトウェア保護サービスの 2120-02-16T02:42:06Z の再起動をスケジュールできませんでした。エラー コード: 0x80070002。

- System 
  - Provider 
     [ Name]  Microsoft-Windows-Security-SPP 
     [ Guid]  {E23B33B0-C8C9-472C-A5F9-F2BDFEA0F156} 
     [ EventSourceName]  Software Protection Platform Service 
  - EventID 16385 
     [ Qualifiers]  49152 
   Version 0 
   Level 2 
   Task 0 
   Opcode 0 
   Keywords 0x80000000000000 
  - TimeCreated 
   [ SystemTime]  2020-03-11T02:42:06.585814600Z 
   EventRecordID 431058 
   Correlation 
  - Execution 
     [ ProcessID]  0 
     [ ThreadID]  0 
   Channel Application 
   Computer (コンピューター名) 
   Security 
- EventData 
   0x80070002 
   2120-02-16T02:42:06Z 

何これ……。(時刻の部分は30秒ごとに異なっていました。)
とりあえずタスク スケジューラを開いてみることにしました。

タスク スケジューラを開いたらエラーダイアログが大量発生

タスク スケジューラを開いてSecurity-SPP関連が何か無いか確認しようと思ったら、Security-SPPのエラーとは別にタスク スケジューラのエラーがたくさん出て来ました。
実はそこそこ前からエラーが出ることは気付いていたのですが、面倒臭いので放置していましたが、これを機にエラーを解決することにしました。

現象としては「HRESULT からの例外:0x80041313」というエラーダイアログが次から次へと大量に出ていること。
このダイアログを数十回閉じたあとはタスク スケジューラを操れるようになります。

タスクの状態(履歴)の有効化

エラーの解決前に、タスクの状態欄が真っ白で何も出てこないので、履歴を記録するようにしました。

参考にしたサイト:
https://i-think-it.net/windows-taskschd-rireki-enable/

イベント ビューアー > アプリケーションとサービスログ > Microsoft > Windows > TaskScheduler
このフォルダーを開いて、「Operational」のプロパティを開いて「ログを有効にする」チェックボックスにチェック。

これでタスクの状態が空欄では無くなりました。

タスク スケジューラのエラー解決に向けてやったこと

タスク スケジューラ自体のエラー解決に向けて、以下のことを行いました。

① タスク スケジューラ上でエラーになっているタスクを片っ端から削除

システムっぽいのもをあるけど気にせず削除しました。

② タスク スケジューラ上で空フォルダーの削除

空フォルダーは削除出来るものもあれば、削除出来ないものもありました。

③ エクスプローラー上で物理フォルダー(?)の削除

「②」で削除出来なかったフォルダーがあるので、エクスプローラーから削除しました。
C:\Windows\System32\Tasks
を開くと中にタスクが入っています。

アクセス出来ないようなフォルダーはアクセス権を変更するなどして無理矢理にでもアクセスしましたが、アクセス権変更についてはここでは語りません。(他サイトを参照してください。)

④ レジストリ エディター上でレジストリキーを削除

「③」で削除してもタスク スケジューラ上から消えないことがあります。(消えないことがあるというより、消えないと言ったほうが良いかも。)
レジストリ エディターを開いて下記のパスにアクセスするとタスクの一覧が出て来ます。
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree

「③」のフォルダーに合わせる形でキーを削除しました。

Repair Tasksツールを実行

ここまでやっても解決しませんでした。
相変わらずタスク スケジューラにはエラーダイアログが出て来ます。
そこで、Repair Tasksを実行しました。

参考にしたサイト:
http://blog.livedoor.jp/firepeng/archives/5063546.html

現在はGithubで配布されているようなので、下記のURLにアクセスして「RepairTasks.zip」をダウンロード。
https://github.com/Dijji/RepairTasks/releases

ダウンロード後は解凍し、exeを管理者実行し、「Scan」ボタン→「Repair」ボタンの順で押下しました。
※今回バックアップは取りませんでしたが、心配な場合はSaveしておくと良いと思います。

途中でアクセス出来ないようなエラーが出て来ました、結果的にはこれでタスク スケジューラでエラーダイアログが出ることは無くなりました!(解決)

Security-SPPのエラー解消は別の正常なマシンから

Security-SPPのエラー解消ですが、まずは下記のサイトを参考にしました。
https://answers.microsoft.com/ja-jp/windows/forum/all/security-sppのエラー/50cbe7dd-b03d-476f-b1a9-d5fa9d2f6bdc
すると、2つのページを参考にしろとリンクが貼ってありました。

1つ目のページではタスクのフォルダーのパスが書かれていますが……、うちのWindowsにはこんなパスが存在しない!
https://support.microsoft.com/en-us/help/3033200/failed-to-schedule-software-protection-service-for-restart-error-in-wi
C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform

2つ目のページでは正常なマシンから「SoftwareProtectionPlatform」フォルダーと中身を持ってこいと書かれています。
https://shocksolution.com/2016/10/08/failed-to-schedule-software-protection-service-for-re-start-error-code-0x80041316/
これを実践することにしました。

リモート デスクトップ経由では……無理だった

正常稼働しているWindows10マシンが別にあるので、そこから「SoftwareProtectionPlatform」を持ってこようとしたのですが……ダメでした。
フォルダーは作成出来たものの、肝心なタスクファイルが持ってこられませんでした。

共有機能で持ってこうよしたら管理共有が有効になっていなかった

リモート デスクトップではコピーできなかったので、フォルダーの共有機能でコピーすることにしました。
\\192.168.xxx.xxx\c$\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform
と指定して開こうとすると、開かない……。
アカウント名やパスワードは間違っていないのに、他のフォルダーや他のドライブにもアクセスできない。
Windows10では管理共有がデフォルトでは無効化されていることが原因でした。

管理共有の有効化

管理共有を有効にする方法は下記のサイトを参考にしました。

レジストリ エディターで下記にアクセスします。(リモート デスクトップ経由でOK)
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

DWORD(32ビット)で「LocalAccountTokenFilterPolicy」を追加し、値を「1」にします。

パソコンを再起動します。(再起動しないとダメでした。)

すると管理共有が有効になり、無事に「SoftwareProtectionPlatform」フォルダーの中身もコピーすることが出来ました。

レジストリのインポート……が出来ない

「SoftwareProtectionPlatform」フォルダーの中身をコピーして終わりではありません。
先程のタスク スケジューラのエラー解決時に記載した通り、ファイルだけでなくレジストリも必要になってきます。

正常動作しているマシンからレジストリーをエクスポートします。
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform
キーを右クリックしてエクスポート。

このエクスポートしたレジストリファイルを持ってきて、実行……しても追加されない。(あれっ?)
レジストリ エディターを開いて、ファイルを選択してインポート……も出来ない。

出来ない理由はアクセス権にありました。
コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache
これ以下にはアクセス権が無いことが原因でした。

アクセス権の許可

Administratorsにフルコントロール権限を与えれば解決すると思ったのですが、権限を与えることが出来ませんでした。
本当はあまり大きくいじりたくは無かったのですが……。

参考にしたサイト:
https://www.billionwallet.com/goods/windows10/win10_registry-permission.html

やはり所有者を変更しないとダメなようでした。
SYSTEMからAdministratorsに所有者を変更し、フルコントロール権限を与え、子オブジェクトにも継承させました。

すると、インポートすることが出来ました。

再起動して解消を確認

ここまでやってやっとSecurity-SPPのエラーは解消しました。
再起動して確認したところ、それまで30秒ごとに記録されていたエラーは出なくなっていました。
長い道のりでした。