随感録 (最新)

2018-06-02 (Sat)

Windows 10 version 1803 で、ロック画面の「Windowsスポットライト」が選べない。

Web上の情報が、探した限り、全部的外れだった。[解決済み]

症状

設定 > 個人用設定 > 「ロック画面」タブ

背景を「Windowsスポットライト」にしても反映されない。選べるように見えるが、ほかのタブを選んで、またロック画面を表示すると、背景 = 「画像」になってしまう。背景=画像で,「ロック画面にトリビアやヒントなどの情報を表示する」もONにできない。(同じく、できるように見えるが、設定が反映されない)

誤った対策

この症状は、様々な解説がWeb上にある。次の二つに集約できる。別の原因のときは、もしかすると効果があるかもしれないが、的外れ。

この機能は ContentDeliveryManager というアプリが担っている。インストール先は, C:\Program Files\WindowsApps ではなく, C:\Windows\SystemApps.

1) 設定を消す

次のフォルダにある設定ファイル, ロックファイルを消してみては、という意見が多い。

C:\Users\ ユーザID \AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\Settings

cw5n1h2txyewy の部分は、端末ごとに異なる。

2) アプリを再登録する

PowerShell を管理者モードで開き、次のコマンドを叩く。

Get-AppxPackage -allusers *ContentDeliveryManager* | foreach {Add-AppxPackage "$($_.InstallLocat ion)\appxmanifest.xml" -DisableDevelopmentMode -register }

こちらは、アンインストールからの再インストールですらないので、効果ないだろう。

解決

Windows スポットライトは, 定期的に画像を自動ダウンロードしてくる機能。したがい,「バックグラウンドアプリ」が有効になっていないと動作しない。これが真の原因。

設定 > プライバシー > 「バックグラウンドアプリ」タブ

「アプリのバックグラウンド実行を許可する」をONにする。

個別のアプリの許可は、一切不要。つまり、この設定項目は、個々のアプリを一括で不許可にする機能「ではない」。えー。

そもそも, ロック画面で設定が反映されないときにエラー表示を出してくれれば、こんなに多くの人が彷徨うこともないのに。下手くそ。

ネットワークの状態が「パブリックネットワーク」になってしまう

Windows 10 version 1803 で「ホームグループ」が削除されたため、その設定画面にあった、接続中のネットワークをプライベートにするかパブリックにするか、の設定も、道連れでできなくなってしまった。

version 1709 から 1803 に上げたときにか何かの拍子に、自宅のがパブリックネットワークになってしまった。

Windows Defender ファイアウォールは、プライベートかパブリックかで、データを通す/通さないが変わるので、これはとても困る。ネットワークの「共有オプション」(共有の詳細設定), ネットワーク探索も、同様に、プライベートかパブリックかで設定が変わる。


自宅だが、パブリックになってしまっている。

誤り

ホームグループでの設定は、できない。機能が削除された。どうしてこうなった。

「範囲内の場合は自動的に接続する」のON / OFF で、ON = プライベート, OFF = パブリック、というような記事もあるが、誤り。反映されない。

解決

エクスプローラで,「ネットワーク」をクリックすると,「ファイル共有が無効です。・・・」という通知が出る。

その通知をクリックするとポップアップが出るので,「ネットワーク探索とファイル共有の有効化」をクリック

次のダイアログが出る。まさかこんな場所に!

別解

レジストリエディタを管理者モードで開き、次のキーを変更する。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\{ GUID }

インタフェイスごとにキー (フォルダ) が作られる。GUID はランダム。ここの Category の値が, 1でプライベート、0でパブリック。変更後はPCの再起動が必要。

2018-05-09 (Wed)

Windows 10 version 1803.

いろいろなアプリケーションを閉じたとき、すぐに勝手に、開きなおされる。これでは終了できない。Excel 2016, Visual Studio 2017, など。

タスクマネジャーから [タスクの終了] すると、ようやく、終了させることができる。

同様の症状を探してみたが、この件は見当たらなかった。Windowsのログイン時に、前回セッションのアプリが自動で起動する話は、大量にあった。それとは違う。

信頼性モニタ

状況を確認する.

  • コントロールパネル > セキュリティとメンテナンス > 信頼性モニタ

Windows 10 バージョン1803 に上げたときから、突然、アプリケーションエラーが多発している。古いネイティブアプリ, 新しいアプリ, UWPアプリ、どれも「動作が停止しました」になっている。

(2018.5.15 update)

これを踏まえて当たりを付けた。Windows Error Reporting Service が元凶。

どうやら、アプリを正常終了したつもりだったが, クラッシュしてしまい、Windows Error Reporting Service が気を利かせて再起動していたようだ。

これはヒドい。

状況を見る

「サービス」を管理者モードで開き、Windows Error Reporting Service のプロパティで、スタートアップの種類を"無効"にすればOK.

しかしその後, アプリを閉じたときに例外が発生する.「Fail Fast例外が発生しました。例外ハンドラーを呼び出さずに、処理を直ちに終了します。」

何だこりゃ?

A fail fast exception occurred. Exception handlers will not be invoked and the process will be terminated immediately.

ERROR_FAIL_FAST_EXCEPTION 1653 (0x675). RaiseFailFastException() が送出し, アプリケーションを終了し, Windows Error Reporting を起動する。

解決

(2018.5.15)

解決した。原因を追いかける手順だけ書いておく。

クラッシュするアプリの、クラッシュダンプを取得する. Windows Error Reporting Service のプロパティで, やっぱり, スタートアップの種類を「自動」にする。

初期状態では, クラッシュダンプは生成されない。レジストリエディタ (regedit) を管理者モードで開き, 次のキーを作る。このキーの下には、特に何も作らなくてもいい。(デフォルト値での挙動になる.)

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

オプションの説明はこちら; Collecting User-Mode Dumps (Windows)

この状態で何かがクラッシュすると, デフォルトで, %LOCALAPPDATA%\CrashDumps にダンプファイルが生成される。Windows 10 では, 具体的には, C:\Users\ユーザアカウント\AppData\Local\CrashDumps.

次に, これを分析するため, WinDbg をインストールする。

Visual Studio Installer には、それらしいアイテムが見えない。分かりにくいが, コントロールパネルから,「プログラムと機能」で, Windows Software Development Kit (SDK) の「変更」で、追加インストールできる。

後は、WinDbg でクラッシュダンプを開き、バックトレースを確認すれば、どこが引き起こしているのか、すぐに分かる。

2018-05-06 (Sun)

Windows 10 バージョン1803 に上げて, 早々難儀した。

Microsoft Store で,「ダウンロードと更新」が「予期しない問題が発生しました」で失敗。エラーコード: 0x80073CF9

「この問題を報告する」をクリックしても, フィードバックHub が起動しないので、どうしようもない。さらに加えて, Microsoft製のストアアプリが全滅。起動しない。 ほかの会社のは起動できる。

このエラーコードでググるといろいろ出てくるが、どれも, てんで解決にならない。

Windows を再インストールすることなく, 解決しました。解決方法は、これまでWeb上どこにも書かれていない方法だったので、ここに書いておきます。ログさえ見れば、思いつく方法です。

コンポーネントの修復

まずは、コンポーネントの修復から。

PowerShell (管理者モード)で, sfc コマンド, dismコマンドを実行して、コンポーネントを修復する。

> sfc /?

Microsoft (R) Windows (R) Resource Checker Version 6.0
Copyright (C) Microsoft Corporation. All rights reserved.

すべての保護されたシステム ファイルの整合性をスキャンして、間違ったバージョンを
正しい Microsoft バージョンに置換します。

SFC [/SCANNOW] [/VERIFYONLY] [/SCANFILE=<ファイル>] [/VERIFYFILE=<ファイル>]
    [/OFFWINDIR=<オフライン Windows ディレクトリ> /OFFBOOTDIR=<オフライン起動ディレクトリ> [/OFFLOGFILE=<ログ ファイルのパス>]]

/SCANNOW        すべての保護されたシステム ファイルの整合性をスキャンして、
                可能な場合には問題のあるファイルを修復します。
/VERIFYONLY     すべての保護されたシステム ファイルの整合性をスキャンします。
                修復操作は実行されません。
/SCANFILE       参照されたファイルの整合性をスキャンして、問題が識別された
                場合はファイルを修復します。完全パス <ファイル> を指定します
/VERIFYFILE     <ファイル> で指定された完全パスを持つファイルの整合性を確認
                します。修復操作は実行されません。
/OFFBOOTDIR     オフライン修復の場合は、オフライン起動ディレクトリの場所を指定します。
/OFFWINDIR      オフライン修復の場合は、オフライン Windows ディレクトリの場所を指定します。
/OFFLOGFILE     オフライン修復の場合は、オプションでログ ファイルのパスを指定してログを有効にします。

/scannow オプションを付けて実行。

> sfc /scannow

しばらく時間が掛かります。

私の環境では、修復すべき箇所があって、自動修復されました。

次, dism コマンド.

> dism /online /cleanup-image /?

展開イメージのサービスと管理ツール
バージョン: 10.0.17134.1

イメージのバージョン: 10.0.17134.1

/Cleanup-Image /RevertPendingActions

  警告! /RevertPendingActions オプションを使用できるのは、ブート
  しなかった Windows イメージに対してシステム回復操作を実行する
  場合のみです。

    例:
      DISM.exe /Image:C:\test\offline /Cleanup-Image /RevertPendingActions

/Cleanup-Image /spsuperseded [/hidesp]
  /SPSuperseded: Service Pack のインストール中に作成されたバックアップ ファイルを削除します。
  /HideSP: オペレーティング システムの [インストールされた更新プログラム]
  の一覧に Service Pack が表示されないようにします。

  警告! /SPSuperseded 操作が完了した後は Service Pack をアンインストール
  できません。

    例:
      DISM.exe /Image:C:\test\offline /Cleanup-Image /spsuperseded /hidesp

/Cleanup-Image {/CheckHealth | /ScanHealth | /RestoreHealth}
  /CheckHealth: 失敗したプロセスが原因でイメージが破損しているかどうか、
  またその破損を修復できるかどうかをチェックします。
  /ScanHealth: イメージをスキャンしてコンポーネント ストアの破損の有無を確認します。
  /RestoreHealth: イメージをスキャンしてコンポーネント ストアの破損の有無を確認し、
  修復操作を自動的に実行します。
  /Source と /RestoreHealth: 正常であることがわかっているファイルを使用
  して修復する場合に、それらのファイルの場所を指定します。
  修復ソースの場所の指定について詳しくは、
  https://go.microsoft.com/fwlink/?LinkId=243077 を参照してください。
  /LimitAccess: DISM が WU/WSUS にアクセスできないようにします。

いきなり /RestoreHealth オプションで大丈夫。

> dism /online /cleanup-image /restorehealth

これも、しばらく時間が掛かります。

特に問題は発見されませんでした。

ここまでで、PCを再起動して, 再発するか確認します。私のケースでは治らなかった。

ログを確認する

根本原因を探すため、ログを見てみます (本当は最初にすべき).

C:\Windows\SoftwareDistribution フォルダにある, ReportingEvents.log ファイル。関連するのはこの辺か。

{6678EAD1-7FF0-40FB-BD29-0EA08DD60C00} 2018-05-04 20:51:54:473+0900 1 167 [AGENT_DOWNLOAD_STARTED] 101 {38029067-CDA8-488B-A39E-D76CB0CD496F} 1 0 Update;Microsoft.WindowsStore_8wekyb3d8bbwe Success Content Download Download started. fd6v2jMzEkyZabl3.25.7.9.6.1.0.0.3.0
{235696BF-DB8C-495F-AB20-741A56021A5A} 2018-05-04 20:52:00:375+0900 1 161 [AGENT_DOWNLOAD_FAILED] 105 {62731700-85DB-4295-A9CB-99E7B0E4CD1F} 1 80073cf9 Update;Microsoft.WindowsStore_8wekyb3d8bbwe Failure Content Download Error: Download failed. fd6v2jMzEkyZabl3.25.7.6.6.1.0.0.105.0
{0A301985-E436-402A-A25F-7F4156C7235A} 2018-05-04 20:52:00:936+0900 1 161 [AGENT_DOWNLOAD_FAILED] 105 {9DC5DFF0-B1EE-4908-A500-7E2DE9669724} 1 80073cf9 Update;Microsoft.WindowsStore_8wekyb3d8bbwe Failure Content Download Error: Download failed. fd6v2jMzEkyZabl3.25.7.7.6.1.0.0.90.0
{3B008EB1-ACEC-4A69-9C68-4E024C81838D} 2018-05-04 20:52:01:914+0900 1 161 [AGENT_DOWNLOAD_FAILED] 105 {38029067-CDA8-488B-A39E-D76CB0CD496F} 1 80073cf9 Update;Microsoft.WindowsStore_8wekyb3d8bbwe Failure Content Download Error: Download failed. fd6v2jMzEkyZabl3.25.7.9.6.1.0.0.94.0

AGENT_DOWNLOAD_FAILED ということで、ネットワーク周りか? しかし, どこでどのようにエラーになったか出してくれないと、まったく役に立たない。

次,「イベントビューア」を開いて, カスタムビュー > 管理イベント. 似たようなエラーが並んでいる。

hori3 の 'Microsoft.BingFinance_8wekyb3d8bbwe' install が失敗しました。エラー: 'インストールに失敗しました。ソフトウェアの製造元に問い合わせてください。' (2.5617052 秒)
ログの名前: Microsoft-Windows-AppReadiness/Admin
ソース: AppReadiness
ユーザー 'hori3' に対する 'Microsoft.BingFinance_4.23.10923.0_neutral_~_8wekyb3d8bbwe' での Appx 操作 'RegisterPackageAsync' は失敗しました - エラー 0x80070003: パッケージ Microsoft.BingFinance_4.23.10923.0_neutral_split.language-ja_8wekyb3d8bbwe の展開が AppLocker によってブロックされました。。(エラー: インストールに失敗しました。ソフトウェアの製造元に問い合わせてください。)
ログの名前: Microsoft-Windows-AppReadiness/Admin
ソース: AppReadiness

いろいろやってみる

  1. 自動トラブルシューティングを走らせる。

    Windows 10 version 1803 では,「設定」> 更新とセキュリティ > トラブルシューティング

    次を順番に実行する;

    • Windows Update
    • インターネット接続
    • Windows ストアアプリ
    • ネットワークアダプタ
  2. ダメ!絶対! 「Microsoft Store」の再インストールを勧めるサイトがあるが、絶対に行ってはならない。詰む。
  3. c:\windows 直下に AppReadiness フォルダを作る。自動的に作られるが、もしなければ、作ってやる。
  4. ×意味ない. c:\windows 直下に AUInstallAgent フォルダを作る。これを勧めるサイトがチラホラあるが、これはまったく意味ない。正常に動いている端末でも存在しない。何だろう、昔の名残り?
  5. c:\windows\SoftwareDistribution の作り直し。

    セーフモードで起動して, SoftwareDistribution を削除して、再起動。自動的に新しく作り直される。

  6. Store のリセット

    管理者モードで, wsreset コマンドを実行。

    > wsreset
    

新しいユーザアカウント

新しいユーザアカウントを作って、そちらでログインしなおして、状況を見る。

今回のケースでは, アプリを起動しようとするとそのアプリが消えていった。より不味い。

ユーザアカウント周り

余計なユーザが存在すると悪さする, という意見もあった。

> wmic
wmic:root\cli>useraccount get name,sid
Name                SID
Administrator       ...
DefaultAccount      ...
Guest               ...
ユーザが続く...

HomeGroupUser$ が気になったが、特に問題なさそう。ホームグループは, Windows 10 v1803で削除された。

なお, MMC (管理コンソール) の「ローカルユーザとグループ」スナップインは、弾かれる; マジか。

このコンピュータのユーザアカウントを管理するには、コントロールパネルのユーザアカウントツールを使用してください。

結果

結論としては, 私のケースでは, C:\Windows\System32\AppLocker フォルダを作ってやったら、回復しました。このフォルダは空ですが、消してはいけません。自動的に復元 (作成) されません。

エラーは AGENT_DOWNLOAD_FAILED ですが,「展開が AppLocker によってブロック」というところがポイントです。これは想像ですが、ファイルをダウンロードした後で、内容の正当性を検証しようとして、失敗していたのでしょう。

一通り起動するか試して、全部順調です。が、フィードバックHub だけが起動しない症状が続いています。まぁ、意味のないアプリなので、気にしない。

2017-09-23 (Sat)

ウィルス!

CCleaner v5.33.6162 をきれいに踏み抜いてしまった。アナウンスはこちら;

アナウンスでは32bit CCleaner だったが、Windows Defender は、64bit版もバックドアとして検出した。

一応, HKLM\SOFTWARE\Piriform\Agomo が存在していないということは確認していたが、ダメだったようだ。

Backdoor:Win32/Floxif

警告レベル:
重大
区分:
バックドア
詳細情報:
Backdoor:Win32/Floxif threat description - Windows Defender Security Intelligence
影響を受けた項目:
  • taskscheduler: C:\Windows\System32\Tasks\CCleanerSkipUAC
  • file: C:\Program Files\CCleaner\CCleaner.exe
  • file: C:\Windows\System32\Tasks\CCleanerSkipUAC
  • regkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{8BE7651E-AB4C-4680-BD24-60D90B5B4D24}
  • regkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\CCleanerSkipUAC

2017-08-11 (Fri)

シングルサインオン (SSO) のために, OpenID Connect について調べた。

OpenID Connect は, OAuth 2.0仕様の上に構築された認証 (authentication) 手順。認可 (authorization) とは異なる。

ただの OAuth 2.0 を「認証」に使おうとすると、セキュリティ上よくない。例えば, 単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる | @_Nat Zone

各社が OAuth 2.0 の上に独自に認証の仕組みを作っていたのを標準化したものが OpenID Connect. 'OpenID 2.0' (OpenID Authentication 2.0) からの技術的な連続性はない。名前だけ。紛らわしい。

OpenID Connect に対応した認証サービス (OpenID Provider; OP) は、例えば、次がある;

組織 サービス
Google Google Federated Identity
Microsoft ADFS on Windows Server 2016
Microsoft Azure Active Directory
PayPal Login with PayPal ※下コメント参照.
Salesforce Summer 2015 Release
Yahoo! Japan Yahoo! ID Federation v2

リストはこちら; OpenID Certification. Facebook がないのがつらい。引き続き独自の方法で対応が必要。

(2017.9.23) このほか, gitlab.com も OpenID Provider のつもりだが、jwks_uri で得られるRSA公開鍵が不味く, 適合していない。

omniauth-openid-connect

Ruby on Rails での Googleへの対応では, omniauth-google-oauth2 を使っていたところ。今回, これを omniauth-openid-connect gem を使い、Google Identity Platform に OpenID Connect でログインできるようになった。まだ、プロフィールの更新は実現できていない。

'omniauth-openid-connect' gemパッケージは, 正直, あまり完成度が高くない。開発も2015年12月のが最新バージョンで, 最近の openid_connect パッケージに付いて行ってない。forkされまくりで, はて, 誰のforkがまともなのか? かなり困る。

(2017.9.23) 各所に散らばったパッチや修正を取り込んで、統合したバージョンを作りました。omniauth-openid-connect again

設定例

一応, gemパッケージを使うとすると, オプションが特定の値でなければならないところが多い。罠か。

次のような設定ファイルで、何とかなる。

# -*- coding:utf-8; mode:ruby -*-

# omniauth を使う.
# See https://github.com/omniauth/omniauth

Rails.application.configure do |config|
  config.middleware.use OmniAuth::Builder do
    if !Rails.env.production?
      provider :developer 

      provider :openid_connect, {
        # /auth/<name> が認証開始のURLになる.       
        name: :nov_op_sample,

        # これがないと, エラー
        # 末尾の '/' は付けてはいけない.
        # <issuer>/.well-known/openid-configuration
        issuer: 'http://localhost:4000',
        
        # 'openid' で OpenID Connect
        scope: ["openid","profile","email","address","phone"],
        
        # 'code' is Basic flow. 'token id_token' is Implicit flow.
        response_type: :code,

        # 有効にしないと, public_key() 内で config.jwks が使われない.
        # 必ず true にすること。(デフォルトはfalse)
        discovery: true, 

        # rack-oauth2 パッケージ, Rack::OAuth2::Client.new() に渡される.
        # 初期値は, omniauth-openid-connect パッケージ内,
        # omniauth/strategies/openid_connect.rb
        client_options: {
          # omniauth-openid-connect パッケージ内,
          # omniauth/strategies/openid_connect.rb:issuer() 内で,
          # 上の issuer オプションは使わず, 次の3要素から issuer を作っている.
          scheme: "http",
          host: "localhost",
          port: 4000,  # 80番でも省略できない.

          # OP側と厳密に合わせる
          identifier: クライアントID,
          secret:     クライアントsecret,
          redirect_uri: "http://localhost:3000/auth/nov_op_sample/callback",
        },
      }
    end # !Rails.env.production?
    
    # google OpenID Connect
    provider :openid_connect, {
        name: :google_oauth2,
        issuer: 'https://accounts.google.com',
        scope: [:openid, :email, :profile],
        response_type: :code,
        discovery: true, 
        client_options: {
          scheme: "https",
          host: "accounts.google.com",
          port: 443,  # 省略不可.

          identifier: クライアントID,
          secret:     クライアントsecret,
          redirect_uri: "http://localhost:3000/auth/google_oauth2/callback",
        },
    }
  end 
end

# See http://qiita.com/nekogeruge_987/items/8bd307f9ae31f27c248a
#     http://stackoverflow.com/questions/10963286/callback-denied-with-omniauth
OmniAuth.config.on_failure = Proc.new do |env|
  OmniAuth::FailureEndpoint.new(env).redirect_to_failure
end

コメントに書いているが, discovery オプションは必ず true でなければならない。issuer と, client_options の (scheme, host, port) は必ず同じもの。

openid_connect_sample

テストのために, nov/openid_connect_sample を Ruby on Rails 4.2対応にしたものを用意した。horiq / openid_connect_sample · GitLab

'openid_connect' パッケージのバグ修正を含む。

PayPal

(2017.8.20 追記)

上のリストで PayPal も OpenID Connect に対応していることになっているが、実装を確認する限り、OpenID Connect には適合していない。

amazon web services - Using Login with Paypal and using OpenID with AWS Cognito - Stack Overflow

oauth 2.0 - PayPal id_token verification - Stack Overflow

いろいろ試してみたが、access_token と別に id_token を取得することができなかった。