Delphi/C++Builderで作成したUWPなアプリをWindows 10 S相当の制限モードで実行できるかどうか試してみる

2017年5月に発表された Windows 10 S は教育機関向け、なおかつリリース当時は Surface Laptop にプレインストールでの提供であり、現物を試すのは少々しんどいものがあります。

せめて、MSDN で利用できればよいのでしょうけれど、現時点（2017/6/16) では MSDN でも公開されていない様子。でも、開発者としては一度試しておきたいものです。

>2018/7/12追記
Windows 10 S はリリース当初は Windows 10 Pro をベースにした機能制限版でしたが、その後、Windows 10 1803 からは任意のエディションに対する別モード（動作制限モード）として 1803 から設定できるようです。この手順については下記の
URLを参照してください。
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-10-s-enable-s-mode

# Windows 10 S 相当の制限モードは、Windows 10 Pro の設定変更でテストできる

さて、どうやったら Windows 10 S 相当の制限モードでの挙動をテストできるだろうかと思っていたのですが、そんな時に Twitter 経由で下記ページを知りました。

[Desktop Bridge と Windows 10 S について](https://blogs.msdn.microsoft.com/shozoa/2017/06/12/about-desktop-bridge-and-windows-10-s/)


上記のブログ記事は下記ページに基いて書かれていましたので、上記の記事を読みつつ、一次ソースとしては英語ページを見ておくのが良さげです。

[Test your Windows app for Windows 10 S](https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-test-windows-s)

# Windows 10 S 相当の制限モードは３種類試せる

本件に関するキモは「マイクロソフトが配布するポリシーファイルを適用すれば、Windows 10 Professional を Windows 10 S 相当の制限モードで動作させることができる」という点にあります。

この制限に用いるポリシーファイルは [Test your Windows app for Windows 10 S](https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-test-windows-s) にダウンロードリンクがありますので、そこからダウンロードできます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/149350/8c05e428-6c71-372f-c718-5b7bdcf95f39.png)


さて、このポリシーファイルは３種類が用意されており、それぞれ以下のような挙動となるそうです。

| Policy | Enforcement| Signing certificate | File name |
|:--|:--|:--|:--|
| Audit mode policy（ログには書くけどブロックしない？） | Logs issues / does not block | Store | SiPolicy_Audit.p7b |
| Production mode policy（Windows 10 S同等？） | Yes | Store | SiPolicy_Enforced.p7b |
| Product mode policy with self-signed apps（Windows 10 S + サイドローディングOK？） | Yes | AppX Test Cert | SiPolicy_DevMode_Enforced.p7b | 

これらのポリシーファイルから試験したいモードを選んで
C:\Windows\System32\CodeIntegrity\SiPolicy.p7b にコピーして、Windows を再起動すると制限が掛かります。

ここでは SiPolicy_Enforced.p7b を VMware 上で試してみることにします。

まず最初に気づいたことは、vmware tools の動作がブロックされることです。考えてみれば当たり前のことなのですが、今回適用したポリシーはUWP以外の実行が基本的に禁止されるので、vmware tools もブロックされてしまうわけですね。vmware tools をインストールできないのでゲストOSに対してクリップボード経由でのコピー＆ペーストができず、初っ端から不便さを痛感します。（ただし物理マシンにインストールした場合は、これはあまり問題にならないはずです）

では、他のプログラムはどうかと思ってコマンドプロンプトを起動してみました。すると、これも実行できませんでした。下記のスクリーンショットは cmd.exe を実行した際に表示されたものです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/149350/e8f611ba-258b-0841-800a-015535e90fd0.png)

「組織がDeviceGuardを使用してこのアプリをブロックしました」というメッセージはWindows 10 Sでもこのまま出るとは思えず、別のメッセージに差し替わっているだろうと思いますが、機能的にはこういう縛りが入っているわけですね。

Windows 10 S 相当の環境というのは本当に制約が多そうです。

# Windowsストアから配信中のアプリのうち、Delphi/C++Builderでビルドされたものをインストール、実行してみる

まず最初に、話の前提として、Delphi/C++BuilderでUWPを生成したり、それをWindowsストアに登録する話の記事を紹介しておきます。

[Delphi / C++Builder で Windows 10 ストアプリ制作！](http://qiita.com/kazaiso/items/2091f1a915f3fbd86f17)
[Desktop Bridgeアプリ を Windowsストアへ申請・登録して公開する手順](http://qiita.com/kazaiso/items/df012c9777585f1e880a)

さて、さきほどセットアップした環境に対して @kazaiso さんが Delphi/C++Builder で作成、ストアアプリとしてビルドしてWindowsストアから配信中のアプリをインストールしてみました。

そうすると、一応動作しているようです。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/Delphi?src=hash">#Delphi</a> 10.1 Berlin Update2 でビルドしたUWPアプリは Windows 10 S 相当の機能制限モードでもWindowsストアからインストールして実行できた。スクリーンショットは <a href="https://twitter.com/kazaiso">@kazaiso</a> が作成のアプリを実行してみたところ。 <a href="https://t.co/bSJPiar0Sa">pic.twitter.com/bSJPiar0Sa</a></p>&mdash; 井之上 和弘@エンバカデロ (@kaz_inoue) <a href="https://twitter.com/kaz_inoue/status/875617041863987201">2017年6月16日</a></blockquote>

ただし、この実験の結果は「Delphi/C++Builder で作成したアプリや、その他のツールで開発したアプリを Desktop Bridge でUWPに変換すれば Windows 10 Sですべて動く」ということを意味してはいません。開発したアプリが Windows 10 S で動作するかどうかは、どのような開発ツールを使うにせよ、個別の検証は当然必要です。