comparison VBoxFrontend/ProgramLoader.cs @ 0:e1ec7bf71313

Initial commit
author Ivo Smits
date Wed, 04 May 2011 00:59:43 +0200
parents
children b0033e69105a
comparison
equal deleted inserted replaced
-1:000000000000 0:e1ec7bf71313
1 using System;
2 using System.Reflection;
3 using System.Runtime.InteropServices;
4
5 namespace ConsoleApplication1 {
6 class ProgramLoader {
7 [DllImport("/usr/lib/virtualbox/VBoxXPCOMC.so")]
8 private static extern Int32 RTR3InitAndSUPLib();
9
10 static unsafe int Main(string[] args) {
11 if (Environment.OSVersion.Platform == PlatformID.Unix) {
12 Console.WriteLine("UNIX based OS detected, doing some magic...");
13 int init = RTR3InitAndSUPLib();
14 if (init != 0) throw new COMException("Failed to initialize VirtualBox driver", init);
15 Unix_setuid();
16 Assembly.LoadFile("Interop.VirtualBox.XPCOM.dll");
17 }
18 return Main2(args);
19 }
20
21 static int Main2(String[] args) {
22 ProgramRun p = new ProgramRun();
23 return p.Run(args);
24 }
25
26 private static void Unix_setuid() {
27 uint uid = Mono.Unix.Native.Syscall.getuid();
28 uint euid = Mono.Unix.Native.Syscall.geteuid();
29 Console.WriteLine("Running as user {0} effective {1}", uid, euid);
30 if (uid != euid) {
31 Console.WriteLine("Set user ID: {0}", uid);
32 Mono.Unix.Native.Syscall.setreuid(uid, uid);
33 }
34 }
35 }
36 }