Desktop Bridge と Windows 10 S について

2017年5月2日に Windows 10 SSurface Laptop が発表されました。 当初は日本語の FAQ のストア アプリの説明に「Desktop Bridge 対応のアプリも含む」と記載されていました。この記述は、英語版の FAQ に記載がなっかたことが理由かどうかは知りませんが、現在は「Windows ストア アプリ」とだけ記載されています。また、Build 2017 では、現在の Linux SubSystem を使った SUSE や Fedora なども Windows ストアから配信されると発表がありました。Winodws 10 S でコマンドラインの扱いがどうなるかについては、コマンドライン チームが Windows 10 S では動作しないと明言しています。具体的には、以下のようなものは動作しないことが確認できています。

  • コマンド ライン(cmd.exe)
  • PowerShell (powershell.exe)
  • レジストリ エディタ(regedit.exe)
  • etc

つまり、OS に影響を与える可能性のあるプログラムが動作しないようにロック ダウンされているのが、Windows 10 S という OS になります。Windows ストア から配信される Desktop Bridge 対応のアプリで考えると、インストールはできるけど動作に制限を受けることが考えられます。なぜなら、UWP アプリと違って完全信頼(fullTrust) で配布されているので、システムへ影響を与える動作が可能なためです。これらの状況を考えると、Desktop Bridge 対応のアプリで Windows 10 S をサポートしようとすると、事前のテストが不可欠になります。事前のテストをしようにも、 Windows 10 S はサイド ローディングを許可していないので、ストアで公開するまで Windows 10 S を搭載した実機でのテストをすることができません。このような場合を想定した テスト方法 が、Windows デベロッパー センターで公開されています。

公開されているテスト方法は、ダウンロード センターから Device Guard Policy をダウンロードして、目的に応じたポリシーをインストールした Windows 10 Pro 環境(仮想マシンが望ましい)を用意して、Windows 10 S のアプリ実行環境と同様な環境でテストします。Device Guard Policy には、次の 3 種類があります。

  • SiPolicy_Audit.p7b
    製品モードと同じで、イベント ログの CodeIntegrityに詳細なログを記録します。
    追記:動作を制限するのではなく、ログに動作が記録されます。ログを使って、改善の検討をします。
  • SiPolicy_Enforced.p7b
    製品モードで、Windows ストアから配信されるアプリのみをインストールできます。
  • SiPolicy_DevMode_Enforced.p7b
    製品モードに加えて、同梱している証明書に対してだけ サイド ローディングを許可します。
    AppxTestRootAgency.pfx の発行者は、「CN=Appx Test Root Agency」になっています。

Device Guard Policy のインストールには、目的とするポリシー ファイルを「C:\Windows\System32\CodeIntegrity」フォルダへコピーして、コピーしたファイル名を「SiPolicy.p7b」にリネームして、OS を再起動します。OS を再起動後に動作を確認すれば、アプリ自体は Windows 10 S と同様の制約環境で確認することができるようになります。
Device Guard Policy を解除するには、コピーしたポリシー ファイルを削除してから OS を再起動します。このようにすることで、Windows 10 S と同様のテスト環境を作成することができます。この環境は、色々と制限が多い環境のため仮想マシンなどに作成することをお勧めします。

Windows 10 S について私がよく聞かれる質問としては、FAQ にもありますが、「ドライバーはどうなりますか?」というものがあります。この質問の答えとしては、「Windows Update 経由でインストールできるものだけです」というものです。併せて、「USB や CD/DVD-ROM からの Autorunがどうなりますか?」という質問も受けますが、これは「制限されたプログラムに該当するので実行することができません」という答えになります。