Testing Windows impl.
DLL location and hardening issues
This commit is contained in:
parent
123bce5027
commit
f933d417b7
3 changed files with 125 additions and 6 deletions
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using VirtualBox;
|
using VirtualBox;
|
||||||
|
@ -9,12 +10,50 @@ namespace VirtualComputerWindows
|
||||||
{
|
{
|
||||||
public static class Exports
|
public static class Exports
|
||||||
{
|
{
|
||||||
[DllExport]
|
[DllImport(@"C:\Program Files\Oracle\VirtualBox\VBoxRT.dll", CallingConvention = CallingConvention.StdCall)]
|
||||||
public static VirtualBoxClass Init()
|
private static extern void RTR3InitExe(int argc, string argv, int zeroflags);
|
||||||
|
/*[DllImport(@"C:\Program Files\Oracle\VirtualBox\VBoxVMM.dll", CallingConvention = CallingConvention.StdCall)]
|
||||||
|
private static extern int VMMDoHmTest(IntPtr vmstruct);*/
|
||||||
|
|
||||||
|
private static VirtualBoxClient vbc;
|
||||||
|
|
||||||
|
public static async Task<IVirtualBox> Init() => await Task.Run(() =>
|
||||||
{
|
{
|
||||||
var vbox = new VirtualBoxClass();
|
try
|
||||||
return vbox;
|
{
|
||||||
|
//Environment.SetEnvironmentVariable("VBOX_HOME", @"C:\Program Files\Oracle\VirtualBox\");
|
||||||
|
//TODO: Only finds the VBoxVMM.dll when placed in the VirtualBox dir (regardless of working dir)
|
||||||
|
//Even then there are hardening issues: VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_1
|
||||||
|
//https://www.virtualbox.org/svn/vbox/trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
|
||||||
|
vbc = new VirtualBoxClientClass();
|
||||||
|
var vbox = vbc.VirtualBox;
|
||||||
|
RTR3InitExe(0, "", 0);
|
||||||
|
var ses = vbc.Session;
|
||||||
var machine = vbox.Machines.GetValue(0) as IMachine;
|
var machine = vbox.Machines.GetValue(0) as IMachine;
|
||||||
|
ses.Name = "minecraft";
|
||||||
|
machine.LockMachine(ses, LockType.LockType_VM);
|
||||||
|
Console.WriteLine("Locking...");
|
||||||
|
while (ses.State != SessionState.SessionState_Locked) ;
|
||||||
|
Console.WriteLine("Locked");
|
||||||
|
machine = ses.Machine;
|
||||||
|
Console.WriteLine("Powering up...");
|
||||||
|
ses.Console.PowerUp().WaitForCompletion(10000);
|
||||||
|
Console.WriteLine("Framebuffer attach");
|
||||||
|
ses.Console.Display.AttachFramebuffer(0, new VBFB(ses.Console.Display));
|
||||||
|
return vbox;
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
Console.ReadLine();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
public static void Main()
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
Console.ReadLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
75
VirtualComputerWindows/VirtualComputerWindows/VBFB.cs
Normal file
75
VirtualComputerWindows/VirtualComputerWindows/VBFB.cs
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
using System;
|
||||||
|
using VirtualBox;
|
||||||
|
|
||||||
|
namespace VirtualComputerWindows
|
||||||
|
{
|
||||||
|
internal class VBFB : IFramebuffer
|
||||||
|
{
|
||||||
|
private IDisplay display;
|
||||||
|
|
||||||
|
public VBFB(IDisplay display)
|
||||||
|
{
|
||||||
|
this.display = display;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyUpdate(uint aX, uint aY, uint aWidth, uint aHeight)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Update: " + aX + " " + aY + " " + aWidth + " " + aHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyUpdateImage(uint aX, uint aY, uint aWidth, uint aHeight, Array aImage)
|
||||||
|
{
|
||||||
|
Console.WriteLine("UpdateImage: " + aX + " " + aY + " " + aWidth + " " + aHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyChange(uint aScreenId, uint aXOrigin, uint aYOrigin, uint aWidth, uint aHeight)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Change: " + aXOrigin + " " + aYOrigin + " " + aWidth + " " + aHeight);
|
||||||
|
display.QuerySourceBitmap(0, out var isd);
|
||||||
|
var addr = new IntPtr();
|
||||||
|
isd.QueryBitmapInfo(addr, out var w, out var h, out var bpp, out var bpl, out var bf);
|
||||||
|
Console.WriteLine("Bitmap info: " + addr + " " + w + " " + h + " " + bpp + " " + bpl + " " + bf);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int VideoModeSupported(uint aWidth, uint aHeight, uint aBpp)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public uint GetVisibleRegion(ref byte aRectangles, uint aCount)
|
||||||
|
{
|
||||||
|
return aCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetVisibleRegion(ref byte aRectangles, uint aCount)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ProcessVHWACommand(ref byte aCommand, int aEnmCmd, int aFromGuest)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Notify3DEvent(uint aType, Array aData)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public uint Width => 640;
|
||||||
|
|
||||||
|
public uint Height => 480;
|
||||||
|
|
||||||
|
public uint BitsPerPixel => 32;
|
||||||
|
|
||||||
|
public uint BytesPerLine => 640 * 4;
|
||||||
|
|
||||||
|
public BitmapFormat PixelFormat => BitmapFormat.BitmapFormat_BGRA;
|
||||||
|
|
||||||
|
public uint HeightReduction => 0;
|
||||||
|
|
||||||
|
public IFramebufferOverlay Overlay => null;
|
||||||
|
|
||||||
|
public long WinId => 0;
|
||||||
|
|
||||||
|
//public Array Capabilities => new[] { FramebufferCapabilities.FramebufferCapabilities_UpdateImage };
|
||||||
|
public Array Capabilities => new FramebufferCapabilities[] { };
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,7 +5,7 @@
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
<ProjectGuid>{5E734F17-FF74-4187-A6E4-B7E1DAB272F8}</ProjectGuid>
|
<ProjectGuid>{5E734F17-FF74-4187-A6E4-B7E1DAB272F8}</ProjectGuid>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>VirtualComputerWindows</RootNamespace>
|
<RootNamespace>VirtualComputerWindows</RootNamespace>
|
||||||
<AssemblyName>VirtualComputerWindows</AssemblyName>
|
<AssemblyName>VirtualComputerWindows</AssemblyName>
|
||||||
|
@ -44,6 +44,7 @@
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>bin\x64\Release\</OutputPath>
|
<OutputPath>bin\x64\Release\</OutputPath>
|
||||||
|
@ -72,6 +73,9 @@
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<StartupObject />
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="DllExport, Version=1.5.2.30304, Culture=neutral, PublicKeyToken=8337224c9ad9e356, processorArchitecture=MSIL">
|
<Reference Include="DllExport, Version=1.5.2.30304, Culture=neutral, PublicKeyToken=8337224c9ad9e356, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\DllExport.1.5.2\lib\net20\DllExport.dll</HintPath>
|
<HintPath>..\packages\DllExport.1.5.2\lib\net20\DllExport.dll</HintPath>
|
||||||
|
@ -93,6 +97,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Exports.cs" />
|
<Compile Include="Exports.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="VBFB.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="app.config" />
|
<None Include="app.config" />
|
||||||
|
|
Loading…
Reference in a new issue