[vbox-dev] IMachine methods in source code?

Johannes DeWitt johannesynt at gmail.com
Thu Jun 19 11:27:11 GMT 2014


Ok, thanks about the hint: modify VBoxManage to write a way for change VM
struct fields...but i can't find a way. I understand that every change is
made by COMSETTER, but what about this function? There's no documentation
about this, i tried to search a similar situation in VBoxManage, but i
can't.



2014-06-13 19:44 GMT+02:00 Klaus Espenlaub <klaus.espenlaub at oracle.com>:

> Johannes,
>
> On 11.06.2014 14:38, Johannes DeWitt wrote:
> > Thanks you for your perfect explanation.
> > I wanted to use stdio.h because i was looking for a way to read some
> > values from outside, while a virtual machine is in runtime; so my idea
> > was to use the fopen function to read values from a normal file (txt or
> > something).
> > But now i understand why i can't use stdio.h (kernel mode etc).
> >
> > So, in VMMAll/ is it IMPOSSIBILE to read a value from another file? I
> > read your answer, i understand that a possibile way is from tm struct,
> > but if i need to use a value that can change in rumtime? My achievement
> > is to read (in VMMAll/ ) value from an external file, and read this
> > value more times, and this value can change during the execution.
>
> I'm not following... you talked about modifying VMMAll/TMAll.cpp, which
> is about timekeeping for the VM - and if you think you can read a file
> (kernel or not) in such a context without seriously messing up the time
> behavior then the understatement I can find is "optimist" :)
>
> In any case, accessing a file from kernel mode is not portable in any
> way, and thus I don't even want to think about it.
>
> > For example, i need to execute a part code ONLY when i want, so my idea
> > was to write ( in a VMMALL/ .cpp file) code like this:
> >
> > x= get value from external file MYVALUE (xml or somehting) (in this
> > file, the value is 0)
> > if (x) { do something;}
> >
> > every time virtualbox execute this code, nothing happend.
> >
> > after a while, from extern i change the value in the file MYVALUE (from
> > 0 to 1)
> > Now, when virtualbox execute the code above, it enters in the {do
> > something;}
> >
> > I hope you can understand my example.
>
> I think I do... it's super abstract and I can't be sure.
>
> The proposal in my previous mail still applies: put variable x in the
> VM/... structure, and add a way to tweak it from userland, e.g. with
> "VBoxManage debugvm" (something inspired by "VBoxManage debugvm
> injectnmi" maybe, or by hacking the handling of "VBoxManage debugvm
> info", as that'd have already parameters, and you can register such
> internal info handlers with DBGFR3InfoRegisterInternal - see
> VMMR3/TM.cpp - which of course isn't meant to change anything
> significant related to the VM etc. structures, but I can't see any
> police :) ). The machine debugger is where I would add such hacks, as
> the rest of the code has more clearly defined interfaces which
> intentionally aren't as easily abusable.
>
> I know this is more than 2 minutes of work, and I humbly ask for
> apologies that we don't have the "do what I want" feature implemented
> (yet).
>
> Klaus
>
> > 2014-06-11 13:51 GMT+02:00 Klaus Espenlaub <klaus.espenlaub at oracle.com
> > <mailto:klaus.espenlaub at oracle.com>>:
> >
> >     On 09.06.2014 12:51, Johannes DeWitt wrote:
> >      > I tried to use this function in VMM/VMMAll/TMAll.cpp, but when i
> >      > compile, i receive this: ‘CFGMR3GetRoot’ was not declared in this
> >     scope
> >      > I added #include <VBox/vmm/cfgm.h, but atill have this error.
> >
> >     TMAll.cpp is code which is compiled several times, once for the
> >     userland, once for kernel mode etc etc., which shares data. In this
> code
> >     it's impossible to deal with CFGM settings. Everything must be
> already
> >     stored in the VM or VMCPU structure or somewhere reachable from there
> >     while in userland. See VMMR3/TM.cpp how the TM settings are handled
> (it
> >     already uses CFGM), your needs probably can be covered by adding a
> few
> >     such settings.
> >
> >     Note that all extradata keys (see documentation of VBoxManage
> extradata)
> >     starting with VBoxInternal/ are stored in CFGM automatically, i.e.
> you
> >     need to set VBoxInternal/TM/foo to some value in order to have it
> >     available in VMMR3/TM.cpp.
> >
> >      > Any ideas? I tried also to include <stdio.h> for others
> achievements,
> >      > but i recieve an error too (however in others .cpp files i can use
> >      > stdio.h without any problems): i don't understand why
> >
> >     See above. One can't use the normal stdio.h functionality from
> kernel. A
> >     subset of the Runtime functionality is available, and I don't think
> you
> >     need anything which isn't already used by VMMAll/*.cpp.
> >
> >     Klaus
> >
> >      > 2014-06-06 14:51 GMT+02:00 Frank Mehnert
> >     <frank.mehnert at oracle.com <mailto:frank.mehnert at oracle.com>
> >      > <mailto:frank.mehnert at oracle.com <mailto:frank.mehnert at oracle.com
> >>>:
> >      >
> >      >     Johannes,
> >      >
> >      >     On Friday 06 June 2014 14:46:46 Johannes DeWitt wrote:
> >      >      > I, i need to use come IMachine methods in source code. For
> >      >     example, if a
> >      >      > want to use the GetSettingsFilePath() function (used in
> >      >      > tstVBoxAPIXPCOM.cpp) in a cpp file of the source code, for
> >      >     example in a cpp
> >      >      > file in /src/VBox/VMM/VMMAll/, how can i do it?
> >      >      > And which headers files i need to include?
> >      >
> >      >     that's actually not the intended way to use !VirtualBox. VMM
> >     and Main
> >      >     are strictly separated, and in particular the IMachine code
> >     you are
> >      >     talking about lives in VBoxSVC while the VMM code lives in
> >     the VBoxSVC
> >      >     client (either the VirtualBox process or the VBoxHeadless
> >     process).
> >      >
> >      >     Inside VMM you should always have a pRoot handle,
> >      >
> >      >        pRoot = CFGMR3GetRoot(pVM);
> >      >
> >      >     Using this pRoot handle you can access the CFGM tree for that
> >     particular
> >      >     VM.
> >      >
> >      >     Kind regards,
> >      >
> >      >     Frank
>
> _______________________________________________
> vbox-dev mailing list
> vbox-dev at virtualbox.org
> https://www.virtualbox.org/mailman/listinfo/vbox-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.virtualbox.org/pipermail/vbox-dev/attachments/20140619/4c65111d/attachment.html>


More information about the vbox-dev mailing list