Thanks. So, i'm looking for a way to change value in VM struct from
VBoxManage. I'm not expert, but thank you for the hint.
Post by Frank MehnertJohannes,
Post by Johannes DeWittThanks 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.
Post by Johannes DeWittFor example, i need to execute a part code ONLY when i want, so my idea
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
Post by Johannes DeWitt2014-06-11 13:51 GMT+02:00 Klaus Espenlaub <klaus.espenlaub at oracle.com
Post by Johannes DeWittI tried to use this function in VMM/VMMAll/TMAll.cpp, but when i
compile, i receive this: ?CFGMR3GetRoot? was not declared in this
scope
Post by Johannes DeWittI 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
Post by Johannes DeWittit's impossible to deal with CFGM settings. Everything must be
already
Post by Johannes DeWittstored 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
Post by Johannes DeWittalready uses CFGM), your needs probably can be covered by adding a
few
Post by Johannes DeWittsuch settings.
Note that all extradata keys (see documentation of VBoxManage
extradata)
Post by Johannes DeWittstarting with VBoxInternal/ are stored in CFGM automatically, i.e.
you
Post by Johannes DeWittneed to set VBoxInternal/TM/foo to some value in order to have it
available in VMMR3/TM.cpp.
Post by Johannes DeWittAny ideas? I tried also to include <stdio.h> for others
achievements,
Post by Johannes DeWittPost by Johannes DeWittbut 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
Post by Johannes DeWittsubset of the Runtime functionality is available, and I don't think
you
Post by Johannes DeWittneed anything which isn't already used by VMMAll/*.cpp.
Klaus
Post by Johannes DeWitt2014-06-06 14:51 GMT+02:00 Frank Mehnert
<frank.mehnert at oracle.com <mailto:frank.mehnert at oracle.com>
Post by Johannes DeWitt<mailto:frank.mehnert at oracle.com <mailto:frank.mehnert at oracle.com
Johannes,
Post by Johannes DeWittI, i need to use come IMachine methods in source code. For
example, if a
Post by Johannes DeWittwant to use the GetSettingsFilePath() function (used in
tstVBoxAPIXPCOM.cpp) in a cpp file of the source code, for
example in a cpp
Post by Johannes DeWittfile 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
Post by Johannes DeWittare strictly separated, and in particular the IMachine code
you are
Post by Johannes DeWitttalking about lives in VBoxSVC while the VMM code lives in
the VBoxSVC
Post by Johannes DeWittclient (either the VirtualBox process or the VBoxHeadless
process).
Post by Johannes DeWittInside VMM you should always have a pRoot handle,
pRoot = CFGMR3GetRoot(pVM);
Using this pRoot handle you can access the CFGM tree for that
particular
_______________________________________________
vbox-dev mailing list
vbox-dev at virtualbox.org
https://www.virtualbox.org/mailman/listinfo/vbox-dev
An HTML attachment was scrubbed...
URL: http://www.virtualbox.org/pipermail/vbox-dev/attachments/20140617/87d77236/attachment.html