TL;DR
- Windows 10 on ARMで動いているプロセスがi386なのか、ARM32なのか、ARM64なのか気になって夜も眠れないのでツールを書きました。
- GitHubにあります。
夜も眠れない
Windows 10 on ARMは、i386、ARM32、ARM64のPEが実行できる、とても愉快なOSだそうです。確かに、バイナリを眺めているとARM32とかi386の実行ファイルが紛れ込んでいるのが確認できます。
でも、タスクマネージャからはそのプロセスがターゲットにしてるCPUアーキテクチャが確認できません。確認できるのは32bit or 64bitのみ。
僕が知りたいのはビット数じゃなくて、CPUアーキテクチャなんです。気になって夜も眠れなくなってきました。
確認方法
IsWow64Process2
という今欲しかったものが得られるAPIがあります。呼びましょう。
BOOL IsWow64Process2( HANDLE hProcess, USHORT *pProcessMachine, USHORT *pNativeMachine );
これはプロセスのハンドル*1を渡すと、pProcessMachineにプロセスが何のCPU向けのバイナリなのかを返してくれます。このとき、実行環境のネイティブバイナリの場合は IMAGE_FILE_MACHINE_UNKNOWN
が入っているので、WOW64で動いているのかそうでないのかがわかります。
ソースとバイナリ
これを全プロセスに対してチェックして、リストにするような感じに仕立てておきました。
ソースとバイナリはGitHubにあります。
*1:OpenProcessの引数に"PROCESS_QUERY_INFORMATION"か"PROCESS_QUERY_LIMITED_INFORMATION"が必要です