Mercurial > hg > vboxdotnet
annotate 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 |
rev | line source |
---|---|
0 | 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(); | |
3
b0033e69105a
Set group ID during initialization, added a patch to mono to fix a double free 'bug'
Ivo Smits
parents:
0
diff
changeset
|
29 uint gid = Mono.Unix.Native.Syscall.getgid(); |
b0033e69105a
Set group ID during initialization, added a patch to mono to fix a double free 'bug'
Ivo Smits
parents:
0
diff
changeset
|
30 uint egid = Mono.Unix.Native.Syscall.getegid(); |
b0033e69105a
Set group ID during initialization, added a patch to mono to fix a double free 'bug'
Ivo Smits
parents:
0
diff
changeset
|
31 Console.WriteLine("Running as user {0} effective {1} group {2} effective {3}", uid, euid, gid, egid); |
b0033e69105a
Set group ID during initialization, added a patch to mono to fix a double free 'bug'
Ivo Smits
parents:
0
diff
changeset
|
32 if (gid != egid) { |
b0033e69105a
Set group ID during initialization, added a patch to mono to fix a double free 'bug'
Ivo Smits
parents:
0
diff
changeset
|
33 Console.WriteLine("Set group ID: {0}", gid); |
b0033e69105a
Set group ID during initialization, added a patch to mono to fix a double free 'bug'
Ivo Smits
parents:
0
diff
changeset
|
34 Mono.Unix.Native.Syscall.setregid(gid, gid); |
b0033e69105a
Set group ID during initialization, added a patch to mono to fix a double free 'bug'
Ivo Smits
parents:
0
diff
changeset
|
35 } |
0 | 36 if (uid != euid) { |
37 Console.WriteLine("Set user ID: {0}", uid); | |
38 Mono.Unix.Native.Syscall.setreuid(uid, uid); | |
39 } | |
40 } | |
41 } | |
42 } |