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 <[email protected]>: > 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 <[email protected] > > <mailto:[email protected]>>: > > > > 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 > > <[email protected] <mailto:[email protected]> > > > <mailto:[email protected] <mailto:[email protected] > >>>: > > > > > > 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 > [email protected] > https://www.virtualbox.org/mailman/listinfo/vbox-dev >
_______________________________________________ vbox-dev mailing list [email protected] https://www.virtualbox.org/mailman/listinfo/vbox-dev
