0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync/* $Id$ */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync/** @file
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * VBoxWatchdog - VirtualBox Watchdog Service.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync/*
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * Copyright (C) 2011-2012 Oracle Corporation
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync *
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * available from http://www.virtualbox.org. This file is free software;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * you can redistribute it and/or modify it under the terms of the GNU
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * General Public License (GPL) as published by the Free Software
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync#ifndef ___H_VBOXWATCHDOG
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync#define ___H_VBOXWATCHDOG
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync#ifndef VBOX_ONLY_DOCS
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync# include <iprt/getopt.h>
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync# include <iprt/time.h>
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync# include <VBox/err.h>
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync# include <VBox/com/com.h>
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync# include <VBox/com/string.h>
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync# include <VBox/com/Guid.h>
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync# include <VBox/com/array.h>
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync# include <VBox/com/ErrorInfo.h>
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync# include <VBox/com/VirtualBox.h>
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync#endif /* !VBOX_ONLY_DOCS */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync#include <algorithm>
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync#include <map>
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync#include <sstream>
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync#include <string>
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync#include <vector>
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsyncusing namespace com;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync////////////////////////////////////////////////////////////////////////////////
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync//
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync// definitions
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync//
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync////////////////////////////////////////////////////////////////////////////////
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync/** Command handler argument. */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsyncstruct HandlerArg
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync{
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync int argc;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync char **argv;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync};
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync/**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * A module's payload for a machine entry.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * The payload data is not (yet) thread safe -- so only
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * use this in one module at a time only!
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef struct VBOXWATCHDOG_MODULE_PAYLOAD
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync{
c04329c1821d23bc561f56aee79d64af1b6aaf59vboxsync /** Pointer to allocated payload. Can be NULL if
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * a module doesn't have an own payload. */
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsync void *pvData;
c04329c1821d23bc561f56aee79d64af1b6aaf59vboxsync /** Size of payload (in bytes). */
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsync size_t cbData;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /** @todo Add mutex for locking + getPayloadLocked(). */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync} VBOXWATCHDOG_MODULE_PAYLOAD, *PVBOXWATCHDOG_MODULE_PAYLOAD;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync/**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * Map containing a module's individual payload -- the module itself
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * is responsible for allocating/handling/destroying this payload.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * Primary key is the module name.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef std::map<const char*, VBOXWATCHDOG_MODULE_PAYLOAD> mapPayload;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef std::map<const char*, VBOXWATCHDOG_MODULE_PAYLOAD>::iterator mapPayloadIter;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef std::map<const char*, VBOXWATCHDOG_MODULE_PAYLOAD>::const_iterator mapPayloadIterConst;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync/** Group list (plus additional per-group flags, not used yet) for one VM.
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync * Primary key is the group name, secondary specify flags (if any). */
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsynctypedef std::map<Utf8Str, uint32_t> mapGroups;
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsynctypedef std::map<Utf8Str, uint32_t>::iterator mapGroupsIter;
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsynctypedef std::map<Utf8Str, uint32_t>::const_iterator mapGroupsIterConst;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync/** A machine's internal entry.
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync * Primary key is the machine's UUID. */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef struct VBOXWATCHDOG_MACHINE
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync{
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync ComPtr<IMachine> machine;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync#ifndef VBOX_WATCHDOG_GLOBAL_PERFCOL
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync ComPtr<IPerformanceCollector> collector;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync#endif
e83ee7cc9435a283e124399e410366174ae96a8avboxsync /** The group(s) this machine belongs to. */
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync mapGroups groups;
e83ee7cc9435a283e124399e410366174ae96a8avboxsync /** Map containing the individual module payloads. */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync mapPayload payload;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync} VBOXWATCHDOG_MACHINE, *PVBOXWATCHDOG_MACHINE;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef std::map<Bstr, VBOXWATCHDOG_MACHINE> mapVM;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef std::map<Bstr, VBOXWATCHDOG_MACHINE>::iterator mapVMIter;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef std::map<Bstr, VBOXWATCHDOG_MACHINE>::const_iterator mapVMIterConst;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync/** Members of a VM group; currently only represented by the machine's UUID.
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync * Primary key is the machine's UUID. */
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsynctypedef std::vector<Bstr> vecGroupMembers;
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsynctypedef std::vector<Bstr>::iterator vecGroupMembersIter;
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsynctypedef std::vector<Bstr>::const_iterator vecGroupMembersIterConst;
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsync
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync/** A VM group. Can contain none, one or more group members.
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync * Primary key is the group's name. */
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsynctypedef std::map<Utf8Str, vecGroupMembers> mapGroup;
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsynctypedef std::map<Utf8Str, vecGroupMembers>::iterator mapGroupIter;
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsynctypedef std::map<Utf8Str, vecGroupMembers>::const_iterator mapGroupIterConst;
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync/**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * A module descriptor.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef struct
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync{
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /** The short module name. */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync const char *pszName;
67be63ee622575061bd19d462a747767ddca9900vboxsync /** The longer module name. */
67be63ee622575061bd19d462a747767ddca9900vboxsync const char *pszDescription;
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync /** A comma-separated list of modules this module
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync * depends on. Might be NULL if no dependencies. */
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync const char *pszDepends;
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync /** Priority (lower is higher, 0 is invalid) of
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync * module execution. */
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync uint32_t uPriority;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /** The usage options stuff for the --help screen. */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync const char *pszUsage;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /** The option descriptions for the --help screen. */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync const char *pszOptions;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * Called before parsing arguments.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * @returns VBox status code.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync DECLCALLBACKMEMBER(int, pfnPreInit)(void);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /**
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync * Tries to parse the given command line options.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync *
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * @returns 0 if we parsed, -1 if it didn't and anything else means exit.
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync * @param argc Argument count.
b0857f8608931dbbc92393a6cb8f478e65e7c2f1vboxsync * @param argv Arguments.
b51fbf07e2ccdacc2e6363b3b3b35447c71b649bvboxsync * @param piConsumed How many parameters this callback consumed from the
b51fbf07e2ccdacc2e6363b3b3b35447c71b649bvboxsync * remaining arguments passed in.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
b51fbf07e2ccdacc2e6363b3b3b35447c71b649bvboxsync DECLCALLBACKMEMBER(int, pfnOption)(int argc, char *argv[], int *piConsumed);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * Called before parsing arguments.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * @returns VBox status code.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync DECLCALLBACKMEMBER(int, pfnInit)(void);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /** Called from the watchdog's main function. Non-blocking.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync *
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * @returns VBox status code.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync DECLCALLBACKMEMBER(int, pfnMain)(void);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * Stop the module.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync DECLCALLBACKMEMBER(int, pfnStop)(void);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * Does termination cleanups.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync *
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * @remarks This may be called even if pfnInit hasn't been called!
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync DECLCALLBACKMEMBER(void, pfnTerm)(void);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
c04329c1821d23bc561f56aee79d64af1b6aaf59vboxsync /** @name Callbacks.
c04329c1821d23bc561f56aee79d64af1b6aaf59vboxsync * @{
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync *
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * @returns VBox status code.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync DECLCALLBACKMEMBER(int, pfnOnMachineRegistered)(const Bstr &strUuid);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync *
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * @returns VBox status code.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync DECLCALLBACKMEMBER(int, pfnOnMachineUnregistered)(const Bstr &strUuid);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync *
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * @returns VBox status code.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync DECLCALLBACKMEMBER(int, pfnOnMachineStateChanged)(const Bstr &strUuid, MachineState_T enmState);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync /**
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync *
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync * @returns VBox status code.
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync DECLCALLBACKMEMBER(int, pfnOnServiceStateChanged)(bool fAvailable);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
c04329c1821d23bc561f56aee79d64af1b6aaf59vboxsync /** @} */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync} VBOXMODULE;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync/** Pointer to a VBOXMODULE. */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef VBOXMODULE *PVBOXMODULE;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync/** Pointer to a const VBOXMODULE. */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsynctypedef VBOXMODULE const *PCVBOXMODULE;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsyncRT_C_DECLS_BEGIN
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsyncextern bool g_fDryrun;
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsyncextern bool g_fVerbose;
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsyncextern ComPtr<IVirtualBox> g_pVirtualBox;
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsyncextern ComPtr<ISession> g_pSession;
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsyncextern mapVM g_mapVM;
a29514824e39ac5a1f61fb4edc54365db9e769ffvboxsyncextern mapGroup g_mapGroup;
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsync# ifdef VBOX_WATCHDOG_GLOBAL_PERFCOL
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsyncextern ComPtr<IPerformanceCollector> g_pPerfCollector;
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsync# endif
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsyncextern VBOXMODULE g_ModBallooning;
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsyncextern VBOXMODULE g_ModAPIMonitor;
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsyncextern void serviceLog(const char *pszFormat, ...);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync#define serviceLogVerbose(a) if (g_fVerbose) { serviceLog a; }
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsyncint groupAdd(mapGroups &groups, const char *pszGroupsToAdd, uint32_t fFlags);
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsyncextern int getMetric(PVBOXWATCHDOG_MACHINE pMachine, const Bstr& strName, LONG *pulData);
020e605b23c3a12ea9f74c85456da2b83338b7dfvboxsyncvoid* payloadFrom(PVBOXWATCHDOG_MACHINE pMachine, const char *pszModule);
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsyncint payloadAlloc(PVBOXWATCHDOG_MACHINE pMachine, const char *pszModule, size_t cbSize, void **ppszPayload);
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsyncvoid payloadFree(PVBOXWATCHDOG_MACHINE pMachine, const char *pszModule);
998f9a06af7dba98c7d2368b4a554b5f323937f6vboxsync
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsyncPVBOXWATCHDOG_MACHINE getMachine(const Bstr& strUuid);
bb424850773b1cf1ae7a69650e7841f0cda3b350vboxsyncMachineState_T getMachineState(const PVBOXWATCHDOG_MACHINE pMachine);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
998f9a06af7dba98c7d2368b4a554b5f323937f6vboxsyncint cfgGetValueStr(const ComPtr<IVirtualBox> &rptrVBox, const ComPtr<IMachine> &rptrMachine,
998f9a06af7dba98c7d2368b4a554b5f323937f6vboxsync const char *pszGlobal, const char *pszVM, Utf8Str &strValue, Utf8Str strDefault);
998f9a06af7dba98c7d2368b4a554b5f323937f6vboxsyncint cfgGetValueULong(const ComPtr<IVirtualBox> &rptrVBox, const ComPtr<IMachine> &rptrMachine,
998f9a06af7dba98c7d2368b4a554b5f323937f6vboxsync const char *pszGlobal, const char *pszVM, unsigned long *pulValue, unsigned long ulDefault);
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsyncRT_C_DECLS_END
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync#endif /* !___H_VBOXWATCHDOG */
0c1a49387cf675cfb205c773eae123c59ffea2c4vboxsync