Mercurial > hg > vboxdotnet
view VBoxFrontend/ProgramLoader.cs @ 4:64226294e26b
Added some information on using the interop interface generator
author | Ivo Smits |
---|---|
date | Wed, 04 May 2011 21:15:22 +0200 |
parents | b0033e69105a |
children |
line wrap: on
line source
???using System; using System.Reflection; using System.Runtime.InteropServices; namespace ConsoleApplication1 { class ProgramLoader { [DllImport("/usr/lib/virtualbox/VBoxXPCOMC.so")] private static extern Int32 RTR3InitAndSUPLib(); static unsafe int Main(string[] args) { if (Environment.OSVersion.Platform == PlatformID.Unix) { Console.WriteLine("UNIX based OS detected, doing some magic..."); int init = RTR3InitAndSUPLib(); if (init != 0) throw new COMException("Failed to initialize VirtualBox driver", init); Unix_setuid(); Assembly.LoadFile("Interop.VirtualBox.XPCOM.dll"); } return Main2(args); } static int Main2(String[] args) { ProgramRun p = new ProgramRun(); return p.Run(args); } private static void Unix_setuid() { uint uid = Mono.Unix.Native.Syscall.getuid(); uint euid = Mono.Unix.Native.Syscall.geteuid(); uint gid = Mono.Unix.Native.Syscall.getgid(); uint egid = Mono.Unix.Native.Syscall.getegid(); Console.WriteLine("Running as user {0} effective {1} group {2} effective {3}", uid, euid, gid, egid); if (gid != egid) { Console.WriteLine("Set group ID: {0}", gid); Mono.Unix.Native.Syscall.setregid(gid, gid); } if (uid != euid) { Console.WriteLine("Set user ID: {0}", uid); Mono.Unix.Native.Syscall.setreuid(uid, uid); } } } }