WPF で作る!! 仮想化支援技術確認ツール CLR/H ひよひよ Crystal Dew World http://crystalmark.info/
Virtual Windows XP とは? Windows XP SP3 + 仮想PC環境 実機 仮想PC 同じアプリでも得られる 情報に違いが…… 仮想PCにインストールしたアプリを直接起動可能!! 実機 仮想PC
Virtual Windows XP が動かない!? あっ、あれ?
AMD-V™ または Intel® VT (BIOS で有効に設定) が搭載された、ハードウェア仮想化に対応したプロセッサーが必要です。 Virtual Windows XP の動作には… AMD-V™ または Intel® VT (BIOS で有効に設定) が搭載された、ハードウェア仮想化に対応したプロセッサーが必要です。
VirtualChecker の出番ですよ!! 仮想化支援機能の状態確認 OpenLibSys.org http://openlibsys.org/index-ja.html
Panasonic CF-Y8 (Yシリーズ最終モデル) 『無効』⇒『有効』 BIOSセットアップ画面から 仮想化支援機能を有効にします。 ※設定変更後は一度電源を切りましょう。 Panasonic CF-Y8 (Yシリーズ最終モデル)
作ってみたいと思いませんか? 自分でも作ってみたいと思いませんか? WPFで!!
必要な機能は3つだけ!! Intel VT/AMD-V に対応しているか判定 Intel VT/AMD-V が有効か判定 結果を表示 CPUID命令を使用して判定 でもどうやって? RDMSR命令を使用して判定 でもどうやって? WPFで表示
WinRing0 汎用ハードウェアアクセスライブラリ http://openlibsys.org/ 修正 BSD ライセンス 主な機能 I/O ポートの読み書き PCI コンフィギュレーション空間の読み書き RDMSR/WRMSR などの特権命令発行 RDTSC や CPUID などの一般命令発行 ⇒ .NET Framework では実現できない CPUID命令やRDMSR命令の発行を代行
WinRing0.dll (WinRing0x64.dll) VirtualChecker WPF の構成 WinRing0.dll (WinRing0x64.dll) ユーザーモード:Ring3 カーネルモード:Ring0 WinRing0.sys WinRing0x64.sys
1. Intel VT/AMD-V 対応? Intel VT の場合 private bool IsIntelVtSupported() { // Feature Flag ECX の bit5 が 1 なら Intel VT 対応 uint eax = 0, ebx = 0, ecx = 0, edx = 0; if (ols.CpuidPx(0x1, ref eax, ref ebx, ref ecx, ref edx, (UIntPtr)1) != 0 && (ecx & (1 << 5)) != 0) { return true; } else return false; AMD-V の場合 省略
2. Intel VT/AMD-V 有効? Intel VT の場合 private bool IsIntelVtEnabled() { // Feature Control MSR EAX の bit1/bit2 が 1 なら Intel VT 有効 uint eax = 0, edx = 0; if (ols.RdmsrPx(0x3A, ref eax, ref edx, (UIntPtr)1) != 0 && ((eax & (1 << 1)) != 0 || (eax & (1 << 2)) != 0)) { return true; } else return false; AMD-V の場合 省略
完成!? 3. 結果の表示 if (IsIntelVtSupported()) { if (IsIntelVtEnabled()) str = "Intel VT 有効"; } else str = "Intel VT 無効"; else if (IsAmdvSupported()) { if (IsAmdvEnabled()) str = "AMD-V 有効"; } else str = "AMD-V 無効"; str = "Intel VT/AMD-V 未対応"; label1.Content = str; 完成!?
まとめ XP Mode が使えるかどうかわからない!! というお悩みもこれで解決です。 XAML <Window x:Class="VirtualCheckerWpf.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="VirtualChecker WPF" Height="110" Width="600" ResizeMode="NoResize"> <Grid FlowDirection="LeftToRight"> <Label Name="label1" FontSize="48" Height="70" Width="578" HorizontalContentAlignment="Center" /> </Grid> </Window> XP Mode が使えるかどうかわからない!! というお悩みもこれで解決です。