はじめに
先日 Debian Buster で Mingw-w64 v6.0.0 を試したとき、使いたかった GetCurrentProcessToken() が使えず、後日 Ubuntu Focal Fossa の v7.0.0 なら使えるのかなと試しました。
結果、使えました。めでたしめでたし。
なんですが、何となく、Mingw-w64 がバージョン別にサポートしている API レベルってどんな感じなんだろうと気になったので、軽く調べてみようと思い立ち、ホントに軽く調べた次第です。
結論
WINVER と _WIN32_WINNT を簡単に一覧してみた結果が下記です。
予想していたことではありますが、Mingw-w64 v6 だから Windows 7 相当、とか、そういうことではなかったです。Windows 順ではなく要望順に実装しているのでしょう。互換処理系ではリーズナブルだと思います。
Code | Windows Ver | v6.0.0 | v7.0.0 | v8.0.2 | v9.0.0 |
---|---|---|---|---|---|
0x0400 | NT 4.0 | o | o | o | o |
0x0500 | 2000 | o | o | o | o |
0x0501 | XP | o | o | o | o |
0x0502 | XP 64bit / Server 2003 | o | o | o | o |
0x0600 | Vista / Server 2008 | o | o | o | o |
0x0601 | 7 / Server 2008 R2 | o | o | o | o |
0x0602 | 8 / Server 2012 | o | o | o | o |
0x0603 | 8.1 / Server 2012 R2 | o | o | o | o |
0x0604 | 10 Technical Preview | x | x | o | o |
0x0605 | ??? | x | x | o | o |
0x0606 | ??? | x | x | o | o |
0x0A00 | 10 / Server 2016, 2019 | o | o | o | o |
不明な Windows バージョンについて
前記表中 Windows Ver の列が ??? の行が2つありますが、これらのコードに対応する Windows バージョンを見つけることができませんでした。
2020-06-19 付の一覧には出現していませんし、site:microsoft.com でググってもヒットしません。
winuser.h
で >= 0x0605
と >= 0x0606
の箇所を見ると、DPI 関連の関数が出てきます。GetThreadDpiHostingBehavior() など。同関数のシステム要件は Windows 10 1803 以降のようです。他方 .NET Framework 4.8 の新機能として WPF の高 DPI の強化があるそうです。
WPF デビューは Vista にプリインストールされている .NET Framework 3.0 でした。WPF は 0x0600 番台で管理されているのかもしれません。
ところで GetCurrentProcessToken() デビューは
Mingw-w64 に GetCurrentProcessToken() が実装されたのは、v6 から v7 の間の 2018-09-27 のコミットでした。
ちなみに GetCurrentProcessToken() が返す疑似ハンドルは固定値で -4
です。
おわりに
使いたい関数などが Mingw-w64 で利用できるかどうかは、つど個々のバージョンにて確認するしかなさそうです。
なので、出来るならば最新リリースを実行できるようにしておくと良さそうです。
そして、Snappy には Mingw-w64 は無いようです。残念。