|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 04/20] Remove win32stubagent
This is 1 large code deletion patch, the liteagent will be reimplemented
over the next set of patches
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/win32stubagent/WmiAccessor.cpp | 1331 ------------------------------------
src/win32stubagent/WmiAccessor.h | 88 ---
src/win32stubagent/XSAccessor.cpp | 230 -------
src/win32stubagent/XSAccessor.h | 126 ----
src/win32stubagent/XService.cpp | 1044 ----------------------------
src/win32stubagent/XService.h | 54 --
src/win32stubagent/errors.cpp | 102 ---
src/win32stubagent/messages.mc | 66 --
src/win32stubagent/stdafx.cpp | 39 --
src/win32stubagent/stdafx.h | 43 --
src/win32stubagent/w32xagent.rc | 60 --
src/win32stubagent/xen.ico | Bin 25214 -> 0 bytes
vs2012/liteagent/LiteAgent.vcxproj | 34 +-
vs2013/liteagent/LiteAgent.vcxproj | 31 -
14 files changed, 2 insertions(+), 3246 deletions(-)
delete mode 100644 src/win32stubagent/WmiAccessor.cpp
delete mode 100644 src/win32stubagent/WmiAccessor.h
delete mode 100644 src/win32stubagent/XSAccessor.cpp
delete mode 100644 src/win32stubagent/XSAccessor.h
delete mode 100644 src/win32stubagent/XService.cpp
delete mode 100644 src/win32stubagent/XService.h
delete mode 100644 src/win32stubagent/errors.cpp
delete mode 100644 src/win32stubagent/messages.mc
delete mode 100644 src/win32stubagent/stdafx.cpp
delete mode 100644 src/win32stubagent/stdafx.h
delete mode 100644 src/win32stubagent/w32xagent.rc
delete mode 100644 src/win32stubagent/xen.ico
diff --git a/src/win32stubagent/WmiAccessor.cpp
b/src/win32stubagent/WmiAccessor.cpp
deleted file mode 100644
index b85ff8e..0000000
--- a/src/win32stubagent/WmiAccessor.cpp
+++ /dev/null
@@ -1,1331 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include "stdafx.h"
-#define _WIN32_DCOM
-#include <windows.h>
-#include <iostream>
-#include <algorithm>
-#include <hash_map>
-#include <stdio.h>
-#include "winerror.h"
-#include "WMIAccessor.h"
-#include "XService.h"
-#include "comutil.h"
-
-//#include "xs_private.h"
-#include <wbemidl.h>
-
-#include <version.h>
-
-#define WIDEN2(x) L ## x
-#define WIDEN(x) WIDEN2(x)
-
-#define OBJECT_NAME_A(_Name) OBJECT_PREFIX_STR "XenStore" #_Name
-#define OBJECT_NAME_W(_Name) WIDEN(OBJECT_PREFIX_STR) L"XenStore" WIDEN(#_Name)
-
-#pragma comment(lib, "wbemuuid.lib")
-#pragma comment(lib, "uuid.lib")
-#pragma comment(lib, "comsuppw.lib")
-
-BSTR mkBstr(const char *string, size_t len) {
- BSTR res = NULL;
- size_t returned;
- wchar_t* wstring = new wchar_t[len+1];
- if (wstring == NULL) {
- goto malloc_wstring;
- }
- mbstowcs_s(&returned, wstring, len+1, string, len);
- res = SysAllocString(wstring);
- delete wstring;
-malloc_wstring:
- return res;
-}
-
-char * formatCharStrInt(const char *fmt, va_list l) {
- char *buf = NULL;
- int cnt = _vscprintf(fmt, l);
- buf = (char *)XsAlloc(cnt+1);
- if (buf == NULL) {
- goto malloc_buf;
- }
- _vsnprintf(buf, cnt+1, fmt, l);
-malloc_buf:
- return buf;
-}
-
-char * formatCharStr(const char *fmt, ... ) {
- char *buf =NULL;
- va_list l;
- va_start(l, fmt);
- buf = formatCharStrInt(fmt, l);
- va_end(l);
- return buf;
-}
-
-BSTR formatBstr(const char *fmt, ...)
-{
- char *buf;
- va_list l;
- BSTR res = NULL;
- va_start(l, fmt);
- buf = formatCharStrInt(fmt, l);
- va_end(l);
- res = mkBstr(buf, strlen(buf));
- XsFree(buf);
- return res;
-}
-
-int setVariantString(VARIANT* var, const char *data, size_t len) {
- int err=-1;
- VariantInit(var);
- var->vt=VT_BSTR;
- var->bstrVal = mkBstr(data, len);
- if (var->bstrVal == NULL) {
- goto sysalloc;
- }
- err=0;
-sysalloc:
- return err;
-}
-
-
-int setVariantString(VARIANT* var, const char *string) {
- return setVariantString(var, string, strlen(string));
-}
-
-
-class WatchSink : public IWbemObjectSink
-{
- LONG m_lRef;
- bool bDone;
- HANDLE triggerevent;
- HANDLE triggererror;
-public:
- char *path;
- WatchSink(HANDLE event, HANDLE errorevent, const char *path) {
- m_lRef = 1;
- triggerevent = event;
- triggererror = errorevent;
- this->path = NULL;
- if (path) {
- this->path=(char *)XsAlloc(strlen(path)+1);
- strcpy(this->path, path);
- }
- }
- ~WatchSink() { bDone = TRUE; }
-
- virtual ULONG STDMETHODCALLTYPE AddRef();
- virtual ULONG STDMETHODCALLTYPE Release();
- virtual HRESULT STDMETHODCALLTYPE
- QueryInterface(REFIID riid, void** ppv);
-
- virtual HRESULT STDMETHODCALLTYPE Indicate(
- /* [in] */
- LONG lObjectCount,
- /* [size_is][in] */
- IWbemClassObject __RPC_FAR *__RPC_FAR *apObjArray
- );
-
- virtual HRESULT STDMETHODCALLTYPE SetStatus(
- /* [in] */ LONG lFlags,
- /* [in] */ HRESULT hResult,
- /* [in] */ BSTR strParam,
- /* [in] */ IWbemClassObject __RPC_FAR *pObjParam
- );
-};
-
-
-ULONG WatchSink::AddRef()
-{
- return InterlockedIncrement(&m_lRef);
-}
-
-ULONG WatchSink::Release()
-{
- LONG lRef = InterlockedDecrement(&m_lRef);
- if(lRef == 0)
- delete this;
- return lRef;
-}
-
-HRESULT WatchSink::QueryInterface(REFIID riid, void** ppv)
-{
- if (riid == IID_IUnknown || riid == IID_IWbemObjectSink)
- {
- *ppv = (IWbemObjectSink *) this;
- AddRef();
- return WBEM_S_NO_ERROR;
- }
- else return E_NOINTERFACE;
-}
-
-
-HRESULT WatchSink::Indicate(long lObjCount, IWbemClassObject **pArray)
-{
- for (long i = 0; i < lObjCount; i++)
- {
- IWbemClassObject *pObj = pArray[i];
- SetEvent(this->triggerevent);
- // ... use the object.
-
- // AddRef() is only required if the object will be held after
- // the return to the caller.
- }
-
- return WBEM_S_NO_ERROR;
-}
-
-HRESULT WatchSink::SetStatus(
- /* [in] */ LONG lFlags,
- /* [in] */ HRESULT hResult,
- /* [in] */ BSTR strParam,
- /* [in] */ IWbemClassObject __RPC_FAR *pObjParam
- )
-{
- if (FAILED(hResult)) {
- XsLog("WMI Asyc watch failed %p\n", this);
- SetEvent(this->triggererror);
- }
- return WBEM_S_NO_ERROR;
-}
-
-
-
-struct WMIAccessor
-{
- IWbemServices *mpSvc;
- IWbemServices *mpXSSvc;
-
- HANDLE owning_thread;
-};
-
-struct WMIAccessor *wmi = NULL;
-
-static string wstring2string(const wstring& wstr)
-{
- int len;
-
- len = WideCharToMultiByte(CP_UTF8,
- 0,
- wstr.c_str(),
- -1,
- NULL,
- 0,
- NULL,
- NULL);
-
- string str(len, 0);
-
- len = WideCharToMultiByte(CP_UTF8,
- 0,
- wstr.c_str(),
- -1,
- &str[0],
- (int)str.length(),
- NULL,
- NULL);
-
- return str;
-}
-
-static string bstr2string(const BSTR& bstr)
-{
- wstring wstr(bstr);
-
- return wstring2string(wstr);
-}
-
-IWbemClassObject *getClass(WMIAccessor **wmi, BSTR path) {
- if (*wmi == NULL)
- return NULL;
-
- if ((*wmi)->mpXSSvc == NULL)
- return NULL;
-
- IWbemClassObject *returnedObject;
- HRESULT hres =
(*wmi)->mpXSSvc->GetObject(path,WBEM_FLAG_RETURN_WBEM_COMPLETE,
- NULL, &returnedObject, NULL);
- if (FAILED(hres)) {
- returnedObject =NULL;
- }
- return returnedObject;
-}
-
-IWbemClassObject *getObject(WMIAccessor **wmi, BSTR path) {
- IEnumWbemClassObject *returnedEnum;
- IWbemClassObject *returnedObject;
- if (*wmi == NULL)
- return NULL;
- ASSERT((*wmi)->mpXSSvc != NULL);
- HRESULT hres = (*wmi)->mpXSSvc->CreateInstanceEnum(path,
WBEM_FLAG_FORWARD_ONLY,
- NULL,
- &returnedEnum);
- if (FAILED(hres)) {
- OutputDebugString("GetEnum failed\n");
- returnedObject =NULL;
- return returnedObject;
- }
- ULONG objects;
-
- hres = returnedEnum->Next(WBEM_INFINITE, 1, &returnedObject, &objects);
-
-
- if (FAILED(hres) || objects < 1) {
- OutputDebugString("GetFromEnum failed\n");
- returnedObject =NULL;
- }
-
- return returnedObject;
-}
-
-HRESULT methodExec(WMIAccessor** wmi, IWbemClassObject* instance, const
wchar_t *methodname, IWbemClassObject *inMethodInst, IWbemClassObject
**outMethodInst)
-{
- HRESULT hres=E_FAIL ;
-
- IWbemClassObject *outstore=NULL;
- BSTR bpathname = SysAllocString(L"__PATH");
- if (bpathname == NULL){
- goto allocpathname;
- }
-
-
- VARIANT instancepath;
- VariantInit(&instancepath);
- hres = instance->Get(bpathname, 0, &instancepath, NULL, NULL);
- if (FAILED(hres)) {
- goto getclassname;
- }
-
-
- BSTR bmethodname = SysAllocString(methodname);
- if (bmethodname == NULL){
- goto allocmethodname;
- }
-
- hres = (*wmi)->mpXSSvc->ExecMethod(instancepath.bstrVal, bmethodname, 0,
NULL,inMethodInst, &outstore, NULL);
- if (outMethodInst != NULL) {
- *outMethodInst = NULL;
- if (!FAILED(hres)){
- *outMethodInst = outstore;
- }
- }
-
- SysFreeString(bmethodname);
-allocmethodname:
-
-getclassname:
- VariantClear(&instancepath);
- SysFreeString(bpathname);
-allocpathname:
- return hres;
-}
-static IEnumWbemClassObject* runXSQuery(WMIAccessor **wmi, BSTR query)
-{
- if (wmi == NULL)
- return NULL;
-
- ASSERT((*wmi)->mpXSSvc != NULL);
-
- // Use the IWbemServices pointer to make requests of WMI.
- // Make requests here:
- IEnumWbemClassObject* pEnumerator = NULL;
- HRESULT hres = (*wmi)->mpXSSvc->ExecQuery(L"WQL",
- query,
- WBEM_FLAG_FORWARD_ONLY |
WBEM_FLAG_RETURN_IMMEDIATELY,
- NULL,
- &pEnumerator);
- if (FAILED(hres))
- {
- DBGPRINT(("ExecQuery failed\n"));
- pEnumerator = NULL;
- }
- return pEnumerator;
-}
-static IEnumWbemClassObject* runQuery(WMIAccessor *wmi, BSTR query)
-{
- if (wmi == NULL)
- return NULL;
-
- ASSERT(wmi->mpSvc != NULL);
-
- // Use the IWbemServices pointer to make requests of WMI.
- // Make requests here:
- IEnumWbemClassObject* pEnumerator = NULL;
- HRESULT hres = wmi->mpSvc->ExecQuery(L"WQL",
- query,
- WBEM_FLAG_FORWARD_ONLY |
WBEM_FLAG_RETURN_IMMEDIATELY,
- NULL,
- &pEnumerator);
- if (FAILED(hres))
- {
- DBGPRINT(("ExecQuery failed\n"));
- pEnumerator = NULL;
- }
- return pEnumerator;
-}
-
-LONG wmicount = 0;
-static BOOLEAN com_initialized = false;
-static IWbemLocator *locator = 0;
-BOOL InitCom(void) {
- HRESULT hres;
- XsLog("Init COM");
- hres = CoInitializeEx(0, COINIT_MULTITHREADED);
- if (FAILED(hres)) {
- goto err_out;
- }
- com_initialized = TRUE;
- //wmi->owning_thread = GetCurrentThread();
- //XsLog("Wmi connect thread %p", GetCurrentThread());
- // Initialize COM security. Most of this is irrelevant to us.
- XsLog("Init security");
- hres = CoInitializeSecurity(
- NULL, /* Security descriptor. Only relevant to servers */
- -1, /* Nr. of auth services. Only relevant to servers */
- NULL, /* List of auth services. Only relevant to servers */
- NULL, /* Reserved */
- RPC_C_AUTHN_LEVEL_DEFAULT, /* Default authentication. The
- details don't really matter when
- you're localhost. */
- RPC_C_IMP_LEVEL_IMPERSONATE, /* WMI needs to be able to
- impersonate us. */
- NULL, /* Authentication info */
- EOAC_NONE, /* Additional capabilities */
- NULL /* Reserved */
- );
- if (FAILED(hres)) {
- goto err_out;
- }
- OutputDebugString("CreateInstance\n");
- hres = CoCreateInstance(
- CLSID_WbemLocator,
- 0,
- CLSCTX_INPROC_SERVER,
- IID_IWbemLocator,
- (LPVOID *) &locator);
- OutputDebugString("Check hres\n");
- if (FAILED(hres)) {
- goto err_out;
- }
- if (locator == NULL) {
- OutputDebugString("Null locator");
- goto err_out;
- }
- return true;
-err_out:
- return false;
-}
-
-BOOL ConnectToWMI(void)
-{
- InitCom();
- HRESULT hres;
- OutputDebugString("Connect to WMI");
- wmicount++;
-
- wmi = (struct WMIAccessor *)XsAlloc(sizeof(*wmi));
- if (wmi == NULL) {
- return false;
- }
- memset(wmi, 0, sizeof(*wmi));
-
-
- OutputDebugString("Connect Server\n");
- try {
- hres = locator->ConnectServer(
- L"root\\CIMV2", // WMI namespace
- NULL, // User name
- NULL, // User password
- NULL, // Locale
- 0, // Security flags
- NULL, // Authority
- NULL, // Context object
- &(wmi->mpSvc) // IWbemServices proxy
- );
- }
- catch(...) {
- OutputDebugString("Exception connecting to server\n");
- goto err_out;
- }
-
- OutputDebugString("Check result\n");
- if (FAILED(hres)) {
- goto err_out;
- }
- /* WMI needs to impersonate us, because it normally runs as an
- unprivileged user and needs our authority in order to access
- device files and so forth. Turn impersonation on. */
- OutputDebugString("Proxy blanket\n");
- hres = CoSetProxyBlanket(
- wmi->mpSvc, // the proxy to set
- RPC_C_AUTHN_WINNT, /* LAN manager authentication,
- although it doesn't really
- matter on localhost. */
- RPC_C_AUTHZ_NONE, // LANMAN can't do much authorization.
- NULL, // Server principal name
- RPC_C_AUTHN_LEVEL_CALL, // Do authentication on every call
- RPC_C_IMP_LEVEL_IMPERSONATE, // Allow full impersonation.
- NULL, // Use current client identity
- EOAC_NONE // No extended proxy capabilities
- );
- if (FAILED(hres)) {
- goto err_out;
- }
- OutputDebugString("WMI Server\n");
- hres = locator->ConnectServer(
- L"root\\WMI", // WMI namespace
- NULL, // User name
- NULL, // User password
- NULL, // Locale
- 0, // Security flags
- NULL, // Authority
- NULL, // Context object
- &wmi->mpXSSvc // IWbemServices proxy
- );
-
- if (FAILED(hres)) {
- goto err_out;
- }
- OutputDebugString("Impersonation\n");
- /* WMI needs to impersonate us, because it normally runs as an
- unprivileged user and needs our authority in order to access
- device files and so forth. Turn impersonation on. */
- hres = CoSetProxyBlanket(
- wmi->mpXSSvc, // the proxy to set
- RPC_C_AUTHN_WINNT, /* LAN manager authentication,
- although it doesn't really
- matter on localhost. */
- RPC_C_AUTHZ_NONE, // LANMAN can't do much authorization.
- NULL, // Server principal name
- RPC_C_AUTHN_LEVEL_CALL, // Do authentication on every call
- RPC_C_IMP_LEVEL_IMPERSONATE, // Allow full impersonation.
- NULL, // Use current client identity
- EOAC_NONE // No extended proxy capabilities
- );
- if (FAILED(hres)) {
- goto err_out;
- }
-
-
- OutputDebugString("Wmi connected\n");
- /* All done. */
- return true;
-
-err_out:
- OutputDebugString("WMI connection failed\n");
- ReleaseWMIAccessor(&wmi);
- return false;
-}
-
-
-void ReleaseCom(void) {
-
- if (com_initialized) {
- OutputDebugString("Release locator\n");
- locator->Release();
- //XsLog("Wmi disconnect thread %p", GetCurrentThread());
- //ASSERT((*wmi)->owning_thread == GetCurrentThread());
- com_initialized = 0;
- OutputDebugString("Uninitialize com\n");
- CoUninitialize();
-
- }
-}
-
-/* Careful: WMI accessors must be released on the same thread that
- allocated them. */
-void ReleaseWMIAccessor(struct WMIAccessor **wmi)
-{
- OutputDebugString("Should I release wmi?\n");
- if (*wmi == NULL)
- return;
- OutputDebugString("Get rid of WMI servers\n");
- if ((*wmi)->mpXSSvc != NULL)
- (*wmi)->mpXSSvc->Release();
- if ((*wmi)->mpSvc != NULL)
- (*wmi)->mpSvc->Release();
- OutputDebugString("Clear WmI\n");
- /* Poison wmi to make use-after-free()s a bit more obvious. */
- memset((*wmi), 0xab, sizeof(**wmi));
- XsFree(*wmi);
- *wmi = NULL;
- ReleaseCom();
- OutputDebugString("Released WMI\n");
-}
-
-/* The fact that something is documented as being a uint64_t field
- doesn't imply that it will be returned as a VT_UI8 field in a
- variant structure. Work around this with a handy conversion
- function. */
-static uint64_t
-GetVariantUint64(VARIANT *vtData)
-{
- switch (vtData->vt) {
- case VT_I2:
- return vtData->iVal;
- case VT_I4:
- return vtData->lVal;
- case VT_I8:
- return vtData->llVal;
- case VT_UI2:
- return vtData->uiVal;
- case VT_UI4:
- return vtData->ulVal;
- case VT_UI8:
- return vtData->ullVal;
- case VT_BSTR:
- /* Yes, I really do mean BSTR: XP returns 64 bit values as
- strings, and we then have to do atoill on it. */
- return _wtoi64(vtData->bstrVal);
- default:
- DBGPRINT(("Bad uint64_t variant %d.\n",vtData->vt));
- return -1;
- }
-}
-
-static HRESULT
-QueryVariant(WMIAccessor *wmi, PWCHAR field, PWCHAR table, VARIANT *vt)
-{
- IEnumWbemClassObject *pEnum;
- BSTR query;
- size_t query_len;
- IWbemClassObject *pclsObj;
- HRESULT hr;
- ULONG uReturn;
-
- query_len = strlen("SELECT FROM ") + wcslen(field) + wcslen(table) + 1;
- query = SysAllocStringLen(NULL, (UINT)query_len);
- if (query == NULL) {
- hr = E_OUTOFMEMORY;
- goto err;
- }
- swprintf_s(query, query_len, L"SELECT %s FROM %s", field, table);
- pEnum = runQuery(wmi, query);
- SysFreeString(query);
-
- if (pEnum == NULL) {
- hr = E_OUTOFMEMORY;
- goto err;
- }
-
- hr = pEnum->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
- pEnum->Release();
- if (FAILED(hr))
- goto err;
- if (uReturn == 0) {
- hr = E_FAIL;
- goto err;
- }
-
- hr = pclsObj->Get(field, 0, vt, NULL, NULL);
- pclsObj->Release();
-
- return hr;
-
-err:
- return hr;
-}
-
-static uint64_t
-QueryUint64(WMIAccessor *wmi, PWCHAR field, PWCHAR table)
-{
- HRESULT hr;
- uint64_t res;
- VARIANT vt;
-
- memset(&vt, 0, sizeof(vt));
-
- hr = QueryVariant(wmi, field, table, &vt);
- if (FAILED(hr))
- return 0;
-
- res = GetVariantUint64(&vt);
- VariantClear(&vt);
- return res;
-}
-
-static BSTR
-QueryBstr(WMIAccessor *wmi, PWCHAR field, PWCHAR table)
-{
- HRESULT hr;
- VARIANT vt;
-
- memset(&vt, 0, sizeof(vt));
-
- hr = QueryVariant(wmi, field, table, &vt);
- if (FAILED(hr))
- return NULL;
- if (vt.vt != VT_BSTR) {
- VariantClear(&vt);
- return NULL;
- }
- return vt.bstrVal;
-}
-
-
-
-/* hash comparator for strings which strips off trailing .exe
- * suffix */
-class string_eq_exe {
-private:
- static size_t len_without_suffix(const char *x)
- {
- size_t l;
- l = strlen(x);
- if (l > 4 && !strcmp(x + l - 4, ".exe"))
- l -= 4;
- return l;
- }
-
-public:
- enum {bucket_size = 4, min_buckets = 8};
- bool operator()(const string &a, const string &b) const
- {
- const char *a_c, *b_c;
- size_t a_l, b_l;
- a_c = a.c_str();
- b_c = b.c_str();
- a_l = len_without_suffix(a_c);
- b_l = len_without_suffix(b_c);
-
- if (a_l != b_l)
- return 1;
- if (memcmp(a_c, b_c, a_l))
- return 1;
- else
- return 0;
- }
-
- size_t operator()(const string &a) const
- {
- size_t acc = 0;
- const char *c_str = a.c_str();
- size_t len = len_without_suffix(c_str);
- unsigned x;
- for (x = 0; x < len; x++)
- acc = (acc * 17 + c_str[x]) % 257;
- return acc;
- }
-};
-
-
-IWbemClassObject *getBase(WMIAccessor** wmi)
-{
- IWbemClassObject* base = getObject(wmi, OBJECT_NAME_W(Base));
- if (base == NULL) {
- *wmi = NULL;
- return NULL;
- }
- return base;
-}
-
-IWbemClassObject *getBaseClass(WMIAccessor** wmi)
-{
- IWbemClassObject* baseclass = getClass(wmi, OBJECT_NAME_W(Base));
- if (baseclass == NULL) {
- *wmi = NULL;
- return NULL;
- }
- return baseclass;
-}
-
-ULONGLONG get64BitUnsigned(VARIANT *var) {
- ULONGLONG res = 0;
- switch (var->vt) {
- case VT_BSTR: {
- VARIANT outvar;
- VariantInit(&outvar);
- VariantChangeType(&outvar, var, 0, VT_UI8);
- res = outvar.ullVal;
- VariantClear(&outvar);
- }
- break;
- case VT_UI8: {
- res = var->ullVal;
- }
- break;
- }
- return res;
-}
-
-FILETIME WmiGetXenTime(WMIAccessor **wmi) {
- FILETIME out;
-
- IWbemClassObject *base = getBase(wmi);
- if (base == NULL) {
- DBGPRINT(("Unable to find base WMI session\n"));
- goto getbasefailed;
- }
-
- VARIANT timevar;
- BSTR timename = mkBstr("XenTime", 7);
- if (timename == NULL)
- goto buildtimenamefailed;
-
-
-
- if (FAILED(base->Get(timename, 0, &timevar, NULL, NULL)))
- goto gettimefailed;
-
- ULONGLONG time =get64BitUnsigned(&timevar);;
-
- out.dwLowDateTime = (DWORD)time;
- out.dwHighDateTime = (DWORD)(time>>32);
- return out;
-
-gettimefailed:
-buildtimenamefailed:
-getbasefailed:
- out.dwLowDateTime = 0;
- out.dwHighDateTime = 0;
- return out ;
-}
-
-IWbemClassObject *openSession(WMIAccessor** wmi, const char *sessionname)
-{
- HRESULT hres;
-
- BSTR query = formatBstr("SELECT * FROM " OBJECT_NAME_A(Session) " WHERE
Id=\"" OBJECT_PREFIX_STR " Xen Win32 Service : %s\"", sessionname);
- if (query == NULL)
- goto formatsessionbstrfailed;
-
- IEnumWbemClassObject * sessions = runXSQuery(wmi, query);
- SysFreeString(query);
-
- if (sessions) {
- IWbemClassObject *returnedObject;
- ULONG count;
- hres = sessions->Next(WBEM_INFINITE, 1, &returnedObject, &count);
- sessions->Release();
-
- if (count>0) {
- if (sessionname !=NULL ) {
- if (!WmiSessionEnd(wmi, returnedObject)) {
- return NULL;
- }
- }
- else {
- return returnedObject;
- }
- }
- }
-
- IWbemClassObject *base = getBase(wmi);
- if (base==NULL) {
- DBGPRINT(("Unable to find base WMI session\n"));
- goto getbasefailed;
- }
-
- IWbemClassObject *baseclass = getBaseClass(wmi);
-
- if (baseclass == NULL)
- goto getbaseclassfailed;
-
- IWbemClassObject *inMethod;
-
- IWbemClassObject *inMethodInst;
- IWbemClassObject *outMethodInst;
- if (FAILED(baseclass->GetMethod(L"AddSession",0,&inMethod, NULL)))
- goto getmethodaddsessionfailed;
-
- if (FAILED(inMethod->SpawnInstance(0, &inMethodInst)))
- goto inmethodspawnfailed;
-
- VARIANT var;
- var.vt = VT_BSTR;
- var.bstrVal=formatBstr(VENDOR_NAME_STR " " PRODUCT_NAME_STR " Win32
Service : %s", sessionname);
-
- if (var.bstrVal == NULL)
- goto formatnamebstrfailed;
-
- if (FAILED(inMethodInst->Put(L"Id", 0, &var, 0)))
- goto methodputfailed;
-
- if (FAILED(methodExec(wmi, base, L"AddSession", inMethodInst,
&outMethodInst)))
- goto methodexecaddsessionfailed;
-
- if (FAILED(outMethodInst->Get(L"SessionId", 0, &var, NULL, NULL)))
- goto outmethodgetfailed;
-
- size_t query_len;
- query_len = strlen("SELECT * FROM " OBJECT_NAME_A(Session) " WHERE
SessionId=")+10;
- query = SysAllocStringLen(NULL, (UINT)query_len);
-
- if (query == NULL)
- goto allocqueryfailed;
-
- swprintf_s(query,query_len, L"SELECT * FROM " OBJECT_NAME_W(Session) L"
WHERE SessionId=%d", var.uintVal);
-
- sessions = runXSQuery(wmi, query );
- SysFreeString(query);
-
- if (sessions) {
- IWbemClassObject *returnedObject;
- ULONG count;
- hres = sessions->Next(WBEM_INFINITE, 1, &returnedObject, &count);
- sessions->Release();
- if (count>0) {
- return returnedObject;
- }
-
- }
-
- outMethodInst->Release();
- VariantClear(&var);
- inMethodInst->Release();
- inMethod->Release();
- base->Release();
- baseclass->Release();
- return NULL;
-
-allocqueryfailed:
-outmethodgetfailed:
- outMethodInst->Release();
-
-methodexecaddsessionfailed:
-methodputfailed:
- VariantClear(&var);
-
-formatnamebstrfailed:
- inMethodInst->Release();
-inmethodspawnfailed:
- inMethod->Release();
-
-
-getmethodaddsessionfailed:
- baseclass->Release();
-
-getbaseclassfailed:
- base->Release();
-
-getbasefailed:
-
-
-formatsessionbstrfailed:
- return NULL;
-}
-
-IWbemClassObject* sessionMethodStart(WMIAccessor**wmi,
- const wchar_t *methodname)
-{
- IWbemClassObject *inMethod;
- IWbemClassObject *inMethodInst = NULL;
- IWbemClassObject *sessionClass;
- HRESULT hr;
-
- ASSERT(wmi != NULL);
-
- sessionClass = getClass(wmi, OBJECT_NAME_W(Session));
- if (sessionClass == NULL)
- goto getclassfailed;
-
- hr = sessionClass->GetMethod(methodname,0,&inMethod, NULL);
- if (FAILED(hr))
- goto getmethodfailed;
-
- hr = inMethod->SpawnInstance(0, &inMethodInst);
- if (FAILED(hr))
- goto spawninstancefailed;
-
- inMethod->Release();
-
- sessionClass->Release();
- return inMethodInst;
-
-
-spawninstancefailed:
- inMethod->Release();
-
-getmethodfailed:
- sessionClass->Release();
-
-getclassfailed:
- return NULL;
-}
-
-
-char * bstrToChar(BSTR bst, size_t *len) {
- *len = wcslen(bst);
- char *space = (char *)XsAlloc(*len+1);
- if (space)
- wcstombs_s(len, space, *len+1, bst, _TRUNCATE);
- return space;
-}
-
-void WmiSessionLog(WMIAccessor** wmi, void **sessionhandle,const char *fmt,
va_list args) {
- IWbemClassObject **session = (IWbemClassObject **)sessionhandle;
-
- char* message = formatCharStrInt(fmt,args);
-
- OutputDebugString(message);
- if (((*wmi)==NULL) || ((*sessionhandle)==NULL) ) {
- goto nowmi;
- }
- VARIANT vmessage;
- if (setVariantString(&vmessage, message))
- goto setvmessage;
-
- IWbemClassObject *inMethodInst = sessionMethodStart( wmi, L"Log");
- if (!inMethodInst)
- goto sessionstart;
-
- if (FAILED(inMethodInst->Put(L"Message",0,&vmessage,0)))
- goto methodputfailed;
-
- if (FAILED(methodExec(wmi,*session, L"Log", inMethodInst, NULL)))
- goto methodexecfailed;
-
-methodexecfailed:
-methodputfailed:
- inMethodInst->Release();
-
-sessionstart:
- VariantClear(&vmessage);
-
-setvmessage:
-nowmi:
- return;
-}
-
-char* WmiSessionGetEntry(WMIAccessor** wmi, void **sessionhandle,
- const char * path, size_t* len)
-{
- *len = 0;
- IWbemClassObject **session = (IWbemClassObject **)sessionhandle;
-
- VARIANT vpath;
- if (setVariantString(&vpath, path))
- goto setvpath;
-
- IWbemClassObject *outMethodInst = NULL;
-
- IWbemClassObject *inMethodInst = sessionMethodStart( wmi, L"GetValue");
- if (inMethodInst == NULL)
- goto sessionmethodstartfailed;
-
- if (FAILED(inMethodInst->Put(L"PathName",0,&vpath,0)))
- goto methodexecfailed;
-
- methodExec(wmi,*session, L"GetValue", inMethodInst, &outMethodInst);
- if (outMethodInst==NULL)
- goto sessionExec;
-
- VARIANT outval;
- VariantInit(&outval);
-
- if (FAILED(outMethodInst->Get(L"value", 0, &outval, NULL, NULL)))
- goto methodgetfailed;
-
- char *space = NULL;
-
- if (V_VT(&outval) == VT_BSTR)
- {
- space = bstrToChar(outval.bstrVal, len);
- }
-
- outMethodInst->Release();
- inMethodInst->Release();
- VariantClear(&vpath);
- VariantClear(&outval);
- return space;
-
-methodgetfailed:
- outMethodInst->Release();
-
-methodexecfailed:
-sessionExec:
- inMethodInst->Release();
-
-sessionmethodstartfailed:
- VariantClear(&vpath);
-
-setvpath:
- return NULL;
-}
-
-int WmiSessionSetEntry(WMIAccessor** wmi, void **sessionhandle,
- const char*path, const char * value, size_t len)
-{
- int err = -1;
- IWbemClassObject **session = (IWbemClassObject **)sessionhandle;
-
- VARIANT vpath;
- if (setVariantString(&vpath, path))
- goto setvpath;
-
- VARIANT vvalue;
- if (setVariantString(&vvalue, value))
- goto setvvalue;
-
- IWbemClassObject *outMethodInst;
-
- IWbemClassObject *inMethodInst = sessionMethodStart( wmi, L"SetValue");
- if (!inMethodInst)
- goto sessionstart;
-
- inMethodInst->Put(L"PathName",0,&vpath,0);
- inMethodInst->Put(L"value",0,&vvalue,0);
-
- if (FAILED(methodExec(wmi,*session, L"SetValue", inMethodInst,
&outMethodInst)))
- goto methodexecfailed;
-
- if (outMethodInst!=NULL)
- outMethodInst->Release();
-
- inMethodInst->Release();
- SysFreeString(vvalue.bstrVal);
- SysFreeString(vpath.bstrVal);
-
- return 0;
-
-methodexecfailed:
- XsLog("WmiSessionSetEntry:MethodExec Failed");
- inMethodInst->Release();
-
-sessionstart:
- XsLog("WmiSessionSetEntry:SessionStart Failed");
- SysFreeString(vvalue.bstrVal);
-
-setvvalue:
- XsLog("WmiSessionSetEntry:SetVValue Failed");
- SysFreeString(vpath.bstrVal);
-
-setvpath:
- XsLog("WmiSessionSetEntry:SetVPath Failed ");
- return err;
-}
-
-int WmiSessionSetEntry(WMIAccessor** wmi, void **sessionhandle,
- const char*path, const char * value) {
- return WmiSessionSetEntry(wmi, sessionhandle, path, value, strlen(value));
-}
-
-int WmiSessionRemoveEntry(WMIAccessor** wmi, void **sessionhandle,
- const char*path){
-
- int err = -1;
- IWbemClassObject **session = (IWbemClassObject **)sessionhandle;
-
- VARIANT vpath;
- if (setVariantString(&vpath, path))
- goto setvpath;
-
- IWbemClassObject *inMethodInst = sessionMethodStart( wmi, L"RemoveValue");
- if (!inMethodInst)
- goto sessionstart;
-
- if (FAILED(inMethodInst->Put(L"PathName",0,&vpath,0)))
- goto methodputfailed;
-
- IWbemClassObject* outMethodInst;
-
- if (FAILED(methodExec(wmi,*session, L"RemoveValue", inMethodInst,
&outMethodInst)))
- goto methodexecfailed;
-
- if (outMethodInst != NULL)
- outMethodInst->Release();
-
- err=0;
- inMethodInst->Release();
- VariantClear(&vpath);
- return err;
-methodexecfailed:
- OutputDebugString(__FUNCTION__ " MethodExecFailed");
-methodputfailed:
- OutputDebugString(__FUNCTION__ " MethodPutFailed");
- inMethodInst->Release();
-
-sessionstart:
- OutputDebugString(__FUNCTION__ " SessionStartFailed");
- VariantClear(&vpath);
-
- OutputDebugString(__FUNCTION__ " SessionExecFailed");
-setvpath:
- OutputDebugString(__FUNCTION__ " SetVpathFailed");
- return err;
-}
-
-
-BOOL WmiSessionUnwatch(WMIAccessor** wmi, void **sessionhandle,
- void *watchhandle) {
- IWbemClassObject **session = (IWbemClassObject **)sessionhandle;
- XsLog("Unwatch %p",watchhandle);
- WatchSink * sink = (WatchSink *)watchhandle;
-
- VARIANT vpath;
- if (setVariantString(&vpath, sink->path))
- goto setvpath;
-
- IWbemClassObject *outMethodInst;
- IWbemClassObject *inMethodInst = sessionMethodStart( wmi, L"RemoveWatch");
- if (!inMethodInst)
- goto sessionstart;
-
- inMethodInst->Put(L"PathName",0,&vpath,0);
- if FAILED(methodExec(wmi,*session, L"RemoveWatch", inMethodInst,
&outMethodInst))
- goto methodexecfailed;
- if (outMethodInst==NULL)
- goto sessionexecfailed;
-
- outMethodInst->Release();
-
-methodexecfailed:
-sessionexecfailed:
- inMethodInst->Release();
-
-sessionstart:
-setvpath:
- sink->Release();
- return true;
-}
-
-BOOL WmiSessionStart(WMIAccessor** wmi, void **sessionhandle, const char*
sessionname)
-{
- IWbemClassObject **session = (IWbemClassObject **)sessionhandle;
- if ((*session = openSession(wmi, sessionname)) == NULL) {
- return false;
- }
- return true;
-}
-
-
-BOOL WmiSessionEnd(WMIAccessor** wmi, void *sessionhandle)
-{
- HRESULT hr;
- ASSERT(*wmi != NULL);
-
- IWbemClassObject *session = (IWbemClassObject *)sessionhandle;
- if (session==NULL) {
- return false;
- }
- hr = methodExec(wmi, session, L"EndSession", NULL,NULL);
- if FAILED(hr)
- goto execmethodfailed;
- session->Release();
- return true;
-
-execmethodfailed:
- return false;
-
-}
-
-void *WmiSessionWatch(WMIAccessor** wmi, void **sessionhandle,
- const char *path, HANDLE event, HANDLE errorevent) {
-
- HRESULT hr;
-
- IWbemClassObject **session = (IWbemClassObject **)sessionhandle;
-
- ASSERT((*wmi) != NULL);
- ASSERT((*sessionhandle) != NULL);
-
- WatchSink * sink = new WatchSink(event, errorevent, path);
- BSTR query=formatBstr("SELECT * from " OBJECT_NAME_A(WatchEvent) " WHERE
EventId=\"%s\"", path);
- if (query == NULL) {
- goto formatstringfailed;
- }
-
- hr = (*wmi)->mpXSSvc->ExecNotificationQueryAsync(L"WQL", query,0,NULL,
sink);
- if (FAILED(hr)){
- *wmi = NULL;
- goto wmifailed;
- }
-
- VARIANT vpath;
- if (setVariantString(&vpath, path)){
- goto setvpath;
- }
-
-
- IWbemClassObject *inMethodInst = sessionMethodStart( wmi, L"SetWatch");
- if (!inMethodInst)
- goto sessionstart;
-
- hr = inMethodInst->Put(L"PathName",0,&vpath,0);
- if (FAILED(hr))
- goto methodputfailed;
-
- hr = methodExec(wmi,*session, L"SetWatch", inMethodInst, NULL);
- if (FAILED(hr))
- goto methodexecfailed;
-
- VariantClear(&vpath);
-
- SysFreeString(query);
-
- return sink;
-
-
-methodexecfailed:
- OutputDebugString(__FUNCTION__ " : methodexecfailed\n");
-methodputfailed:
- OutputDebugString(__FUNCTION__ " : methodputfailed\n");
- inMethodInst->Release();
-sessionstart:
- OutputDebugString(__FUNCTION__ " : sessionstart\n");
- VariantClear(&vpath);
-setvpath:
- OutputDebugString(__FUNCTION__ " : setvpath\n");
-wmifailed:
- SysFreeString(query);
-formatstringfailed:
- OutputDebugString(__FUNCTION__ " : formatstringfailed\n");
- delete sink;
- return NULL;
-}
-
-void *WmiUnsuspendedEventWatch(WMIAccessor **wmi, HANDLE event, HANDLE
errorevent)
-{
- HRESULT hr;
-
- ASSERT(*wmi != NULL);
-
- WatchSink * sink = new WatchSink(event, errorevent, NULL);
- BSTR query=formatBstr("SELECT * from " OBJECT_NAME_A(UnsuspendedEvent));
- if (query==NULL) {
- goto formatstringfailed;
- }
-
- hr = (*wmi)->mpXSSvc->ExecNotificationQueryAsync(L"WQL", query,0,NULL,
sink);
- if FAILED(hr)
- goto asyncqueryfailed;
-
- SysFreeString(query);
- return sink;
-
-asyncqueryfailed:
- SysFreeString(query);
-formatstringfailed:
- delete sink;
- return NULL;
-}
-
diff --git a/src/win32stubagent/WmiAccessor.h b/src/win32stubagent/WmiAccessor.h
deleted file mode 100644
index e37ef71..0000000
--- a/src/win32stubagent/WmiAccessor.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _WMIACCESSOR_H
-#define _WMIACCESSOR_H
-
-#include <Wbemidl.h>
-#include <list>
-#include <vector>
-#include <map>
-#include <string>
-
-#include "XSAccessor.h"
-
-using namespace std;
-
-typedef unsigned __int64 uint64_t;
-
-struct WMIAccessor;
-
-extern struct WMIAccessor *wmi;
-
-extern LONG wmicount;
-BOOL InitCom(void);
-void ReleaseCom(void);
-BOOL ConnectToWMI(void);
-void ReleaseWMIAccessor(struct WMIAccessor **);
-
-void UpdateProcessListInStore(WMIAccessor **wmi);
-
-int WmiSessionSetEntry(WMIAccessor** wmi, void **sessionhandle,
- const char*path, const char * value);
-
-int WmiSessionSetEntry(WMIAccessor** wmi, void **sessionhandle,
- const char*path, const char * value, size_t len);
-char* WmiSessionGetEntry(WMIAccessor** wmi, void **sessionhandle,
- const char * path, size_t* len) ;
-
-void *WmiSessionWatch(WMIAccessor** wmi, void **sessionhandle,
- const char *path, HANDLE event, HANDLE errorevent);
-BOOL WmiSessionUnwatch(WMIAccessor** wmi, void **sessionhandle,
- void *watchhandle);
-
-int WmiSessionRemoveEntry(WMIAccessor** wmi, void **sessionhandle,
- const char*path);
-
-char **WmiSessionGetChildren(WMIAccessor** wmi, void **sessionhandle,
- const char * path, unsigned *numentries);
-
-
-void *WmiUnsuspendedEventWatch(WMIAccessor **wmi, HANDLE event, HANDLE
errorevent);
-
-int WmiSessionTransactionAbort(WMIAccessor** wmi, void **sessionhandle);
-int WmiSessionTransactionCommit(WMIAccessor** wmi, void **sessionhandle);
-int WmiSessionTransactionStart(WMIAccessor** wmi, void **sessionhandle);
-BOOL WmiSessionStart(WMIAccessor** wmi, void **sessionhandle, const char
*sessionname);
-BOOL WmiSessionEnd(WMIAccessor** wmi, void *sessionhandle);
-FILETIME WmiGetXenTime(WMIAccessor **wmi);
-void WmiSessionLog(WMIAccessor** wmi, void **sessionhandle,const char *fmt,
va_list args);
-#endif
diff --git a/src/win32stubagent/XSAccessor.cpp
b/src/win32stubagent/XSAccessor.cpp
deleted file mode 100644
index c60fb8b..0000000
--- a/src/win32stubagent/XSAccessor.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <windows.h>
-#include "stdafx.h"
-#include "XSAccessor.h"
-#include "WMIAccessor.h"
-
-static __declspec(thread) void *WmiSessionHandle = NULL;
-
-static LONG volatile threadcount = 0;
-static __declspec(thread) LONG localthreadcount = 0;
-static __declspec(thread) LONG localwmicount = 0;
-
-static long update_cnt=0xF0000000;
-#define XENSTORE_MAGIC 0x7e6ec123
-
-void *XsAlloc(size_t size) {
- void *buf;
-
- buf = malloc(size + 8);
- if (!buf) {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- return NULL;
- }
- memset(buf, 0, size + 8);
- *(unsigned *)buf = XENSTORE_MAGIC;
- return (void *)((ULONG_PTR)buf + 8);
-}
-
-void XsFree(const void *buf) {
- void *orig_buf;
-
- if (!buf)
- return;
- orig_buf = (void *)((ULONG_PTR)buf - 8);
- if (*(unsigned *)orig_buf != XENSTORE_MAGIC) {
- OutputDebugString("XsFree() invoked on bad pointer\n");
- DebugBreak();
- }
- free(orig_buf);
-}
-
-void GetXenTime(FILETIME *now)
-{
- *now = WmiGetXenTime(&wmi);
-}
-
-
-int ListenSuspend(HANDLE event, HANDLE errorevent)
-{
- if (!WmiUnsuspendedEventWatch(&wmi, event, errorevent))
- return -1;
- else
- return 0;
-}
-
-BOOL InitXSAccessor()
-{
- OutputDebugString("XSAccessor\n");
- if (wmicount != localwmicount) {
-
- if (localthreadcount == 0) {
- localthreadcount = InterlockedIncrement(&threadcount);
- }
- char wminame[12];
- _snprintf(wminame, 12, "XS%x", localthreadcount);
- if (WmiSessionStart(&wmi, &WmiSessionHandle, wminame)) {
- localwmicount = wmicount;
- return true;
- }
- OutputDebugString("XSAccessor Failed\n");
- return false;
- }
- return true;
-}
-
-void XsLog(const char *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- WmiSessionLog(&wmi, &WmiSessionHandle, fmt, args);
- va_end(args);
-}
-
-
-BOOL ShutdownXSAccessor(void)
-{
- if (wmi == NULL) {
- return false;
- }
- if (WmiSessionHandle == NULL) {
- return false;
- }
- return WmiSessionEnd(&wmi, WmiSessionHandle);
-
-}
-
-int XenstorePrintf(const char *path, const char *fmt, ...)
-{
- va_list l;
- char buf[4096];
- int cnt;
-
- va_start(l, fmt);
- cnt = _vsnprintf(buf, sizeof(buf), fmt, l);
- va_end(l);
- if (cnt < 0) {
- DBGPRINT (("Cannot format data for XenstorePrintf!"));
- return -1;
- }
- OutputDebugString(buf);
- /* Now have the thing we're trying to write. */
- return WmiSessionSetEntry(&wmi, &WmiSessionHandle, path, buf);
-}
-
-BOOL XenstoreKickXapi()
-{
- /* New protocol */
- if (XenstorePrintf("data/update_cnt", "%I64d", update_cnt)){
- XsLog("New kick failed ");
- return false;
- }
- /* Old protocol */
- if (WmiSessionSetEntry(&wmi, &WmiSessionHandle, "data/updated", "1")){
- XsLog("Old kick failed");
- return false;
- }
- update_cnt++;
- return true;
-}
-
-
-int
-XenstoreRemove(const char *path)
-{
- if (wmi == NULL)
- return -1;
-
- if (WmiSessionHandle == NULL)
- return -1;
-
- if (WmiSessionRemoveEntry(&wmi, &WmiSessionHandle, path))
- return -1;
- else
- return 0;
-}
-
-ssize_t
-XenstoreRead(const char* path, char** value)
-{
- size_t len;
- *value =WmiSessionGetEntry(&wmi, &WmiSessionHandle, path, &len);
- if (*value)
- return (ssize_t)len;
- else
- return -1;
-}
-
-
-bool XenstoreReadDword(const char *path, DWORD *value) {
- char* buffer;
- ssize_t len;
- len = XenstoreRead(path, &buffer);
- if (len <= 0) {
- return false;
- }
- *value = atoi(buffer);
-
- XsFree(buffer);
-
- return true;
-}
-
-void *
-XenstoreWatch(const char *path, HANDLE event, HANDLE errorevent)
-{
-
- if (wmi == NULL) {
- OutputDebugString("WMI is null\n");
- return NULL;
- }
- if (WmiSessionHandle == NULL) {
- OutputDebugString("Session is null\n");
- return NULL;
- }
- return WmiSessionWatch(&wmi, &WmiSessionHandle, path, event, errorevent);
-}
-
-BOOL
-XenstoreUnwatch(void *watch)
-{
- return WmiSessionUnwatch(&wmi, &WmiSessionHandle, watch);
-}
-
-void
-XenstoreFree(void *tofree)
-{
- return XsFree(tofree);
-}
-
diff --git a/src/win32stubagent/XSAccessor.h b/src/win32stubagent/XSAccessor.h
deleted file mode 100644
index 2ed41b0..0000000
--- a/src/win32stubagent/XSAccessor.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-
-#ifndef _XSACCESSOR_H
-#define _XSACCESSOR_H
-
-#include <string>
-#include "windows.h"
-
-
-using namespace std;
-
-#define MAX_XENBUS_PATH 256
-
-#ifdef AMD64
-typedef long long ssize_t;
-#else
-typedef long ssize_t;
-#endif
-
-BOOL InitXSAccessor();
-BOOL ShutdownXSAccessor();
-ssize_t XenstoreRead(const char *path, char **value);
-int XenstoreRemove(const char *path);
-int XenstorePrintf(const char *path, const char *fmt, ...);
-int XenstoreWrite(const char *path, const void *data, size_t len);
-BOOL XenstoreKickXapi(void);
-void *XenstoreWatch(const char *path, HANDLE event, HANDLE errorevent);
-BOOL XenstoreUnwatch(void *watch);
-int ListenSuspend(HANDLE evt, HANDLE errorevent);
-void GetXenTime(FILETIME *res);
-void XsLog(const char *fmt, ...);
-void XenstoreFree(void *tofree);
-void *XsAlloc(size_t size);
-void XsFree(const void *buf);
-bool XenstoreReadDword(const char * path, DWORD *value);
-
-#if DBG
-
-#include <stdarg.h> // va_list
-#include <stdio.h> // vsprintf
-#include <malloc.h>
-
-#include <assert.h>
-#include <tchar.h>
-
-__inline void DebugPrint( IN LPCTSTR msg, IN ... )
-{
- TCHAR buffer[256];
- int res;
- va_list args;
-
- va_start( args, msg );
-#pragma prefast(suppress: 28719, "Yes, we all know _vsnprintf is banned in
drivers, this is user level");
- res = _vsntprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), msg, args);
- if (res >= 0)
- {
- OutputDebugString( buffer );
- }
- else
- {
- TCHAR *p;
- int count;
-
- count = 512;
- for (;;) {
- p = (TCHAR *)malloc(count * sizeof (TCHAR));
- if (!p) {
- OutputDebugString(_T("Out of memory for debug message!\n"));
- break;
- }
- res = _vsntprintf(p, count, msg, args);
- if (res >= 0)
- break;
-
- free(p);
- count += 256;
- }
- if (p) {
- OutputDebugString( p );
- free(p);
- }
- }
- va_end(args);
-}
-
-#define DBGPRINT(_x_) DebugPrint _x_
-#define ASSERT assert
-
-#else
-
-#define DBGPRINT(_x_)
-#define ASSERT
-
-#endif // DBG
-
-#endif
diff --git a/src/win32stubagent/XService.cpp b/src/win32stubagent/XService.cpp
deleted file mode 100644
index 1fbb138..0000000
--- a/src/win32stubagent/XService.cpp
+++ /dev/null
@@ -1,1044 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <windows.h>
-#include <shlobj.h>
-#include <process.h>
-#include "powrprof.h"
-#include <winuser.h>
-#include "stdafx.h"
-#include "XSAccessor.h"
-#include "WMIAccessor.h"
-#include "XService.h"
-
-#include "messages.h"
-
-#include <setupapi.h>
-#include <cfgmgr32.h>
-#include <initguid.h>
-#include <devguid.h>
-#include <wintrust.h>
-#include <shellapi.h>
-
-#ifdef _WIN64
-#define XENTOOLS_INSTALL_REG_KEY "SOFTWARE\\Wow6432Node\\Citrix\\XenTools"
-#define XENTOOLS_INSTALL_REG_KEY64 "SOFTWARE\\Citrix\\XenTools"
-#else
-#define XENTOOLS_INSTALL_REG_KEY "SOFTWARE\\Citrix\\XenTools"
-#endif
-
-SERVICE_STATUS ServiceStatus;
-SERVICE_STATUS_HANDLE hStatus;
-
-static HANDLE hServiceExitEvent;
-static ULONG WindowsVersion;
-static BOOL LegacyHal = FALSE;
-static HINSTANCE local_hinstance;
-
-HANDLE eventLog;
-#define SIZECHARS(x) (sizeof((x))/sizeof(TCHAR))
-
-// Internal routines
-static DWORD WINAPI ServiceControlHandler(DWORD request, DWORD evtType,
- LPVOID, LPVOID);
-static void ServiceControlManagerUpdate(DWORD dwExitCode, DWORD dwState);
-static void WINAPI ServiceMain(int argc, char** argv);
-static void GetWindowsVersion();
-
-void PrintError(const char *func, DWORD err)
-{
- LPVOID lpMsgBuf;
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- err,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR) &lpMsgBuf,
- 0,
- NULL);
- OutputDebugString((LPTSTR)lpMsgBuf);
- XsLog("%s failed: %s (%x)", func, lpMsgBuf, err);
- XenstorePrintf("control/error", "%s failed: %s (%x)", func, lpMsgBuf, err);
- LocalFree(lpMsgBuf);
-}
-
-void PrintError(const char *func)
-{
- PrintError(func, GetLastError());
-}
-
-void PrintUsage()
-{
- printf("Usage: xenservice [-u]\n");
-
- printf("\t -u: uninstall service\n");
-}
-
-
-
-struct watch_event {
- HANDLE event;
- void *watch;
-};
-
-static void
-ReleaseWatch(struct watch_event *we)
-{
- if (we == NULL)
- return;
- if (we->event != INVALID_HANDLE_VALUE)
- CloseHandle(we->event);
- if (we->watch)
- XenstoreUnwatch(we->watch);
- free(we);
-}
-
-static char * InitString(const char * inputstring)
-{
- char *outputstring = (char *)calloc((strlen(inputstring)+1),sizeof(char));
- if (outputstring == NULL)
- goto failalloc;
- strcpy(outputstring, inputstring);
- return outputstring;
-
-failalloc:
- XsLog(__FUNCTION__ " : Fail malloc");
- return NULL;
-}
-
-static void FreeString(const char *string)
-{
- free((void *)string);
-}
-
-static char* PrintfString(const char *fmt, ...){
- va_list l;
- va_start(l, fmt);
- int numchars = _vscprintf(fmt, l);
- char *outputstring = (char *)calloc(numchars + 1, sizeof(char));
-
- if (outputstring == NULL)
- return NULL;
-
- _vsnprintf(outputstring, numchars, fmt, l);
- return outputstring;
-}
-
-static struct watch_event *
-EstablishWatch(const char *path, HANDLE errorevent)
-{
- struct watch_event *we;
- DWORD err;
- XsLog("Establish watch %s",path);
- we = (struct watch_event *)malloc(sizeof(*we));
- if (!we) {
- SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- return NULL;
- }
- memset(we, 0, sizeof(*we));
- we->watch = NULL;
- we->event = CreateEvent(NULL, FALSE, FALSE, NULL);
- if (we->event != INVALID_HANDLE_VALUE)
- we->watch = XenstoreWatch(path, we->event, errorevent);
- if (we->watch == NULL) {
- OutputDebugString("Watch is null\n");
- err = GetLastError();
- ReleaseWatch(we);
- SetLastError(err);
- return NULL;
- }
- return we;
-}
-
-struct watch_feature {
- struct watch_event *watch;
- const char *feature_flag;
- const char *name;
- BOOL (*handler)(void *);
- void *ctx;
-};
-
-#define MAX_FEATURES 10
-struct watch_feature_set {
- struct watch_feature features[MAX_FEATURES];
- unsigned nr_features;
-};
-
-static BOOL
-AddFeature(struct watch_feature_set *wfs, const char *path,
- const char *flag, const char *name,
- BOOL (*handler)(void *), void *ctx, HANDLE errorevent)
-{
- unsigned n;
- if (wfs->nr_features == MAX_FEATURES)
- goto failfeatures;
-
- n = wfs->nr_features;
-
- wfs->features[n].watch = EstablishWatch(path, errorevent);
- if (wfs->features[n].watch == NULL)
- goto failwatch;
-
- wfs->features[n].feature_flag = flag;
- wfs->features[n].handler = handler;
- wfs->features[n].ctx = ctx;
- wfs->features[n].name = InitString(name);
- if (wfs->features[n].name == NULL)
- goto failname;
- wfs->nr_features++;
- return true;
-
-failname:
- PrintError("Failed to allocate string");
-failwatch:
- PrintError("EstablishWatch() for AddFeature()");
-failfeatures:
- XsLog("Too many features");
- PrintError("Too many features!", ERROR_INVALID_FUNCTION);
- return false;
-}
-
-static void RemoveFeatures(struct watch_feature_set *wfs) {
- unsigned x;
- for (x = 0; x < wfs->nr_features; x++) {
- ReleaseWatch(wfs->features[x].watch);
- wfs->features[x].watch = NULL;
- FreeString(wfs->features[x].name);
- XenstoreRemove(wfs->features[x].feature_flag);
- }
- wfs->nr_features = 0;
-}
-
-static BOOL
-AdvertiseFeatures(struct watch_feature_set *wfs)
-{
- unsigned x;
- for (x = 0; x < wfs->nr_features; x++) {
- if (wfs->features[x].feature_flag != NULL)
- if (XenstorePrintf(wfs->features[x].feature_flag, "1")){
- XsLog("Failed to advertise %s",wfs->features[x].name);
- }
- }
- return true;
-}
-
-
-void ServiceUninstall()
-{
- SC_HANDLE hSvc;
- SC_HANDLE hMgr;
-
- hMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
-
- if ( hMgr )
- {
- hSvc = OpenService(hMgr, SVC_NAME, SERVICE_ALL_ACCESS);
-
- if (hSvc)
- {
- // try to stop the service
- if ( ControlService( hSvc, SERVICE_CONTROL_STOP, &ServiceStatus )
)
- {
- printf("Stopping %s.", SVC_DISPLAYNAME);
- Sleep( 1000 );
-
- while ( QueryServiceStatus( hSvc, &ServiceStatus ) )
- {
- if ( ServiceStatus.dwCurrentState == SERVICE_STOP_PENDING )
- {
- printf(".");
- Sleep( 1000 );
- }
- else
- break;
- }
-
- if ( ServiceStatus.dwCurrentState == SERVICE_STOPPED )
- printf("\n%s stopped.\n", SVC_DISPLAYNAME );
- else
- printf("\n%s failed to stop.\n", SVC_DISPLAYNAME );
- }
-
- // now remove the service
- if ( DeleteService(hSvc) )
- printf("%s uninstalled.\n", SVC_DISPLAYNAME );
- else
- printf("Unable to uninstall - %d\n", GetLastError());
-
- CloseServiceHandle(hSvc);
-
- }
- else
- printf("Unable to open service - %d\n", GetLastError());
-
- CloseServiceHandle(hMgr);
- }
- else
- printf("Unable to open scm - %d\n", GetLastError());
-
-}
-
-
-int __stdcall
-WinMain(HINSTANCE hInstance, HINSTANCE ignore,
- LPSTR lpCmdLine, int nCmdShow)
-{
- local_hinstance = hInstance;
-
- if (strlen(lpCmdLine) == 0) {
- SERVICE_TABLE_ENTRY ServiceTable[2];
- ServiceTable[0].lpServiceName = SVC_NAME;
- ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
-
- ServiceTable[1].lpServiceName = NULL;
- ServiceTable[1].lpServiceProc = NULL;
-
- DBGPRINT(("XenSvc: starting ctrl dispatcher "));
-
- // Start the control dispatcher thread for our service
- if (!StartServiceCtrlDispatcher(ServiceTable))
- {
- int err = GetLastError();
- if (GetLastError() == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
- {
- DBGPRINT(("XenSvc: unable to start ctrl dispatcher - %d",
GetLastError()));
- }
- }
- else
- {
- // We get here when the service is shut down.
- }
- } else if (!strcmp(lpCmdLine, "-u") || !strcmp(lpCmdLine, "\"-u\"")) {
- ServiceUninstall();
- } else {
- PrintUsage();
- }
-
- return 0;
-}
-
-void AcquireSystemPrivilege(LPCTSTR name)
-{
- HANDLE token;
- TOKEN_PRIVILEGES tkp;
- DWORD err;
-
- LookupPrivilegeValue(NULL, name, &tkp.Privileges[0].Luid);
- tkp.PrivilegeCount = 1;
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- if (!OpenProcessToken(GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
- &token)) {
- DBGPRINT(("Failed to open local token.\n"));
- } else {
- AdjustTokenPrivileges(token, FALSE, &tkp,
- NULL, 0, NULL);
- err = GetLastError();
- if (err != ERROR_SUCCESS) {
- PrintError("AdjustTokenPrivileges", err);
- }
- }
-}
-
-static void AcquireSystemShutdownPrivilege(void)
-{
- AcquireSystemPrivilege(SE_SHUTDOWN_NAME);
-}
-
-enum XShutdownType {
- XShutdownPoweroff,
- XShutdownReboot,
- XShutdownSuspend,
- XShutdownS3
-};
-
-static BOOL maybeReboot(void *ctx)
-{
- char *shutdown_type;
- BOOL res;
- enum XShutdownType type;
- int cntr = 0;
-
- XsLog("Check if we need to shutdown");
-
- if (XenstoreRead("control/shutdown", &shutdown_type) < 0) {
- XsLog("No need to shutdown");
- return true;
- }
- XsLog("Shutdown type %s\n", shutdown_type);
- if (strcmp(shutdown_type, "poweroff") == 0 ||
- strcmp(shutdown_type, "halt") == 0) {
- type = XShutdownPoweroff;
- } else if (strcmp(shutdown_type, "reboot") == 0) {
- type = XShutdownReboot;
- } else if (strcmp(shutdown_type, "hibernate") == 0) {
- type = XShutdownSuspend;
- } else if (strcmp(shutdown_type, "s3") == 0) {
- type = XShutdownS3;
- } else {
- DBGPRINT(("Bad shutdown type %s\n", shutdown_type));
- goto out;
- }
-
- XsLog("Report Shutdown Event");
- /* We try to shutdown even if this fails, since it might work
- and it can't do any harm. */
- AcquireSystemShutdownPrivilege();
-
- if (eventLog) {
- DWORD eventId;
-
- switch (type) {
- case XShutdownPoweroff:
- eventId = EVENT_XENUSER_POWEROFF;
- break;
- case XShutdownReboot:
- eventId = EVENT_XENUSER_REBOOT;
- break;
- case XShutdownSuspend:
- eventId = EVENT_XENUSER_HIBERNATE;
- break;
- case XShutdownS3:
- eventId = EVENT_XENUSER_S3;
- break;
- }
- }
-
- XsLog("Do the shutdown");
-
- /* do the shutdown */
- switch (type) {
- case XShutdownPoweroff:
- case XShutdownReboot:
- if (WindowsVersion >= 0x500 && WindowsVersion < 0x600)
- {
- /* Windows 2000 InitiateSystemShutdownEx is funny in
- various ways (e.g. sometimes fails to power off after
- shutdown, especially if the local terminal is locked,
- not doing anything if there's nobody logged on, etc.).
- ExitWindowsEx seems to be more reliable, so use it
- instead. */
- /* XXX I don't really understand why
- InitiateSystemShutdownEx behaves so badly. */
- /* If this is a legacy hal then use EWX_SHUTDOWN when shutting
- down instead of EWX_POWEROFF. */
- /* Similar problem on XP. Shutdown/Reboot will hang until the Welcome
- screen screensaver is dismissed by the guest */
-#pragma warning (disable : 28159)
- res = ExitWindowsEx((type == XShutdownReboot ?
- EWX_REBOOT :
- (LegacyHal ?
- EWX_SHUTDOWN :
- EWX_POWEROFF))|
- EWX_FORCE,
- SHTDN_REASON_MAJOR_OTHER|
- SHTDN_REASON_MINOR_ENVIRONMENT |
- SHTDN_REASON_FLAG_PLANNED);
-#pragma warning (default: 28159)
- if (!res) {
- PrintError("ExitWindowsEx");
- return false;
- }
- else
- {
- if (XenstoreRemove("control/shutdown"))
- return false;
- }
- } else {
-#pragma warning (disable : 28159)
- res = InitiateSystemShutdownEx(
- NULL,
- NULL,
- 0,
- TRUE,
- type == XShutdownReboot,
- SHTDN_REASON_MAJOR_OTHER |
- SHTDN_REASON_MINOR_ENVIRONMENT |
- SHTDN_REASON_FLAG_PLANNED);
-#pragma warning (default: 28159)
- if (!res) {
- PrintError("InitiateSystemShutdownEx");
- return false;
- } else {
- if (XenstoreRemove("control/shutdown"))
- return false;
- }
- }
- break;
- case XShutdownSuspend:
- if (XenstorePrintf ("control/hibernation-state", "started"))
- return false;
- /* Even if we think hibernation is disabled, try it anyway.
- It's not like it can do any harm. */
- res = SetSystemPowerState(FALSE, FALSE);
- if (XenstoreRemove ("control/shutdown"))
- {
- return false;
- }
- if (!res) {
- /* Tell the tools that we've failed. */
- PrintError("SetSystemPowerState");
- if (XenstorePrintf ("control/hibernation-state", "failed"))
- return false;
- }
- break;
- case XShutdownS3:
- if (XenstorePrintf ("control/s3-state", "started"))
- return false;
- res = SetSuspendState(FALSE, TRUE, FALSE);
- XenstoreRemove ("control/shutdown");
- if (!res) {
- PrintError("SetSuspendState");
- if (XenstorePrintf ("control/s3-state", "failed"))
- return false;
- }
- break;
- }
-
-out:
- XenstoreFree(shutdown_type);
- return true;
-}
-
-static bool registryMatchString(HKEY hKey,
- LPCTSTR lpValueName,
- LPCTSTR comparestring,
- bool matchcase)
-{
- bool result = false;
- LONG buffersize = sizeof(TCHAR)*256;
- TCHAR *outstring = NULL;
- DWORD outstringsize;
- LONG status;
- do {
- outstringsize = buffersize;
- outstring = (TCHAR *)realloc(outstring, outstringsize);
-
- status = RegQueryValueEx(hKey,
- lpValueName,
- NULL,
- NULL,
- (LPBYTE) outstring,
- &outstringsize);
- buffersize *= 2;
- } while (status == ERROR_MORE_DATA);
-
- if (status == ERROR_FILE_NOT_FOUND)
- goto done;
-
- if (matchcase) {
- if (_tcsncmp(comparestring, outstring, outstringsize))
- goto done;
- }
- else {
- if (_tcsnicoll(comparestring, outstring, outstringsize))
- goto done;
- }
-
- result = true;
-
-done:
- free(outstring);
-
- return result;
-}
-
-static bool
-adjustXenTimeToUTC(FILETIME *now)
-{
- DWORD dwtimeoffset;
- long timeoffset;
- char *vm;
- char *rtckey;
- LARGE_INTEGER longoffset;
- ULARGE_INTEGER longnow;
- size_t vmlen;
-
- // XenTime is assumed to be in UTC, so we need to remove any
- // offsets that are applied to it
-
- __try {
- vmlen = XenstoreRead("vm", &vm);
- if (vmlen <= 0)
- goto fail_readvm;
- }
- __except(EXCEPTION_EXECUTE_HANDLER)
- {
- goto fail_readvm;
- }
-
- rtckey = PrintfString("%s/rtc/timeoffset", vm);
- if (rtckey == NULL)
- goto fail_rtckey;
-
- _try {
- BOOL rtcreadworked;
- __try {
- rtcreadworked = XenstoreReadDword(rtckey, &dwtimeoffset);
- }
- __except(EXCEPTION_EXECUTE_HANDLER) {
- rtcreadworked = false;
- }
- if (!rtcreadworked) {
- if (!XenstoreReadDword("platform/timeoffset", &dwtimeoffset))
- goto fail_platformtimeoffset;
- }
- }
- __except(EXCEPTION_EXECUTE_HANDLER)
- {
- goto fail_platformtimeoffset;
- }
- timeoffset = (long)dwtimeoffset;
-
- //Convert offset from seconds to nanoseconds
- longoffset.QuadPart = (LONGLONG)timeoffset;
- longoffset.QuadPart = longoffset.QuadPart * 10000000;
-
- // Subtract nanosecond timeoffset from now
- longnow.LowPart = now->dwLowDateTime;
- longnow.HighPart = now->dwHighDateTime;
- longnow.QuadPart -= longoffset.QuadPart;
- now->dwLowDateTime = longnow.LowPart;
- now->dwHighDateTime = longnow.HighPart;
-
- FreeString(rtckey);
- XsFree(vm);
- return true;
-
-fail_platformtimeoffset:
- XsLog("%s: Read platform time offset", __FUNCTION__);
- FreeString(rtckey);
-
-fail_rtckey:
- XsLog("%s: Read RTC Key", __FUNCTION__);
- XsFree(vm);
-
-fail_readvm:
- XsLog("%s: Read VM Key", __FUNCTION__);
- return false;
-}
-
-static bool hosttimeIsUTC()
-{
- HKEY InstallRegKey;
- bool utc = false;
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- XENTOOLS_INSTALL_REG_KEY,
- 0,
- KEY_ALL_ACCESS,
- &InstallRegKey) != ERROR_SUCCESS)
- goto fail_registrykey;
-
-#ifdef _WIN64
-
- if (registryMatchString(InstallRegKey, "HostTime", "UTC", false))
- {
- utc = true;
- goto done;
- }
-
- RegCloseKey(InstallRegKey);
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- XENTOOLS_INSTALL_REG_KEY64,
- 0,
- KEY_ALL_ACCESS,
- &InstallRegKey) != ERROR_SUCCESS)
- goto fail_registrykey;
-
-#endif
-
- if (registryMatchString(InstallRegKey, "HostTime", "UTC", false))
- {
- utc=true;
- }
-
-#ifdef _WIN64
-done:
-#endif
- RegCloseKey(InstallRegKey);
- return utc;
-
-fail_registrykey:
- XsLog("%s: Open Registry Key", __FUNCTION__);
-
- return false;
-}
-
-static void
-setTimeToXenTime(void)
-{
- FILETIME now = {0};
- SYSTEMTIME sys_time;
- SYSTEMTIME current_time;
- bool utc=false;
- XsLog("Set time to XenTime");
-
- GetXenTime(&now);
- if ((now.dwLowDateTime == 0) && (now.dwHighDateTime == 0)) {
- XsLog("Cannot set system time to xentime, unable to contact WMI");
- goto fail_readtime;
- }
-
- utc = hosttimeIsUTC();
-
- if (utc) {
- XsLog("Try UTC");
- if (!adjustXenTimeToUTC(&now))
- goto fail_adjusttime;
- }
-
- if (!FileTimeToSystemTime(&now, &sys_time)) {
- XsLog("Gould not convert file time to system time");
- PrintError("FileTimeToSystemTime()");
- DBGPRINT(("FileTimeToSystemTime(%x.%x)\n",
- now.dwLowDateTime, now.dwHighDateTime));
- } else {
- GetLocalTime(¤t_time);
- XsLog("Time is now %d.%d.%d %d:%d:%d.%d",
- current_time.wYear, current_time.wMonth, current_time.wDay,
- current_time.wHour, current_time.wMinute, current_time.wSecond,
- current_time.wMilliseconds);
- XsLog("Set time to %d.%d.%d %d:%d:%d.%d",
- sys_time.wYear, sys_time.wMonth, sys_time.wDay,
- sys_time.wHour, sys_time.wMinute, sys_time.wSecond,
- sys_time.wMilliseconds);
- if (utc) {
- if (!SetSystemTime(&sys_time))
- PrintError("SetSystemTime()");
- }
- else {
- if (!SetLocalTime(&sys_time))
- PrintError("SetLocalTime()");
- }
- }
-
- return;
-
-fail_adjusttime:
- XsLog("%s: Adjust time", __FUNCTION__);
-
-fail_readtime:
- XsLog("%s: ReadTime", __FUNCTION__);
-}
-
-/* We need to resync the clock when we recover from suspend/resume. */
-static void
-finishSuspend(void)
-{
- DBGPRINT(("Coming back from suspend.\n"));
- setTimeToXenTime();
-}
-
-
-
-//
-// Main loop
-//
-BOOL Run()
-{
- bool exit=false;
- PCHAR pPVAddonsInstalled = NULL;
-
- HANDLE suspendEvent;
-
- int cntr = 0;
- struct watch_feature_set features;
- BOOL snap = FALSE;
-
- OutputDebugString("Trying to connect to WMI\n");
- while (!ConnectToWMI()) {
- OutputDebugString("Unable to connect to WMI, sleeping\n");
- if (WaitForSingleObject(hServiceExitEvent, 1000*10) == WAIT_OBJECT_0) {
- exit = true;
- return exit;
- }
- }
- while (InitXSAccessor()==false) {
- OutputDebugString("Unable to initialise WMI session, sleeping\n");
- if (WaitForSingleObject(hServiceExitEvent, 1000*10) == WAIT_OBJECT_0) {
- exit = true;
- return exit;
- }
- }
- XsLog("Guest agent lite main loop starting");
-
- if (eventLog == NULL)
- XsLog("Event log was not initialised");
-
- setTimeToXenTime();
-
- memset(&features, 0, sizeof(features));
-
- HANDLE wmierrorEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
- if (!wmierrorEvent) {
- PrintError("CreateEvent() wmierrorEvent");
- return exit;
- }
-
-
- XsLog("About to add feature shutdown");
- if (!AddFeature(&features, "control/shutdown", "control/feature-shutdown",
- "shutdown", maybeReboot, NULL, wmierrorEvent)) {
- return exit;
- }
-
- suspendEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
- if (!suspendEvent) {
- PrintError("CreateEvent() suspendEvent");
- return exit;
- }
-
- if (ListenSuspend(suspendEvent, wmierrorEvent) < 0) {
- PrintError("ListenSuspend()");
- CloseHandle(suspendEvent);
- suspendEvent = NULL;
- return exit;
- }
-
-
- XsLog("About to advertise features");
- AdvertiseFeatures(&features);
-
- XsLog("About to kick xapi ");
- XenstoreKickXapi();
-
- while (1)
- {
- DWORD status;
- int nr_handles = 1;
- HANDLE handles[3 + MAX_FEATURES];
- unsigned x;
-
- handles[0] = hServiceExitEvent;
- if (wmierrorEvent)
- handles[nr_handles++] = wmierrorEvent;
- if (suspendEvent)
- handles[nr_handles++] = suspendEvent;
- for (x = 0; x < features.nr_features; x++)
- handles[nr_handles++] = features.features[x].watch->event;
-
- XsLog("win agent going to sleep");
- status = WaitForMultipleObjects(nr_handles, handles, FALSE, INFINITE);
- XsLog("win agent woke up for %d", status);
-
- /* WAIT_OBJECT_0 happens to be 0, so the compiler gets shirty
- about status >= WAIT_OBJECT_0 (since status is unsigned).
- This is more obviously correct than the compiler-friendly
- version, though, so just disable the warning. */
-
-#pragma warning (disable: 4296)
- if (status >= WAIT_OBJECT_0 &&
- status < WAIT_OBJECT_0 + nr_handles)
-#pragma warning (default: 4296)
- {
- HANDLE event = handles[status - WAIT_OBJECT_0];
- if (event == hServiceExitEvent)
- {
- XsLog("service exit event");
- exit = true;
- break;
- }
- else if (event == suspendEvent)
- {
- if (!ReportEvent(eventLog, EVENTLOG_SUCCESS, 0,
EVENT_XENUSER_UNSUSPENDED, NULL, 0, 0,
- NULL, NULL)) {
- XsLog("Cannot send to event log %x",GetLastError());
- }
- XsLog("Suspend event");
- finishSuspend();
- AdvertiseFeatures(&features);
- XenstoreKickXapi();
- XsLog("Handled suspend event");
- }
- else if (event == wmierrorEvent)
- {
- ReportEvent(eventLog, EVENTLOG_SUCCESS, 0, EVENT_XENUSER_WMI,
NULL, 0, 0,
- NULL, NULL);
- break;
- }
- else
- {
- BOOL fail = false;
- for (x = 0; x < features.nr_features; x++) {
- if (features.features[x].watch->event == event) {
- XsLog("Fire %p",features.features[x].name);
- XsLog("fire feature %s", features.features[x].name);
- OutputDebugString("Event triggered\n");
- if
(!(features.features[x].handler(features.features[x].ctx)))
- {
- XsLog("Firing feature failed");
- PrintError("Feature failed");
- fail = true;
- }
- XsLog("fired feature %s",
- features.features[x].name);
- }
- }
- if (fail) {
- XsLog("Resetting");
- ReportEvent(eventLog, EVENTLOG_SUCCESS, 0,
EVENT_XENUSER_UNEXPECTED, NULL, 0, 0,
- NULL, NULL);
- break;
- }
- }
- }
- else
- {
- PrintError("WaitForMultipleObjects()");
- break;
- }
- }
- OutputDebugString("WMI Watch loop terminated\n");
- RemoveFeatures(&features);
- XenstoreKickXapi();
-
- XsLog("Guest agent lite loop finishing");
- ReleaseWMIAccessor(&wmi);
-
-
-
-
- XsLog("Guest agent lite loop finished %d", exit);
- return exit;
-}
-
-
-// Service initialization
-bool ServiceInit()
-{
- ServiceStatus.dwServiceType = SERVICE_WIN32;
- ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
- ServiceStatus.dwControlsAccepted =
- SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN |
- SERVICE_ACCEPT_SESSIONCHANGE;
- ServiceStatus.dwWin32ExitCode = 0;
- ServiceStatus.dwServiceSpecificExitCode = 0;
- ServiceStatus.dwCheckPoint = 0;
- ServiceStatus.dwWaitHint = 0;
-
- hStatus = RegisterServiceCtrlHandlerEx(
- "XenService",
- ServiceControlHandler,
- NULL);
- if (hStatus == (SERVICE_STATUS_HANDLE)0)
- {
- // Registering Control Handler failed
- DBGPRINT(("XenSvc: Registering service control handler failed - %d\n",
GetLastError()));
- return false;
- }
-
- ServiceStatus.dwCurrentState = SERVICE_RUNNING;
- SetServiceStatus (hStatus, &ServiceStatus);
-
- return true;
-}
-
-void WINAPI ServiceMain(int argc, char** argv)
-{
- // Perform common initialization
- eventLog = RegisterEventSource(NULL, "xensvc");
- hServiceExitEvent = CreateEvent(NULL, false, false, NULL);
- if (hServiceExitEvent == NULL)
- {
- DBGPRINT(("XenSvc: Unable to create the event obj - %d\n",
GetLastError()));
- return;
- }
-
- if (!ServiceInit())
- {
- DBGPRINT(("XenSvc: Unable to init xenservice\n"));
- return;
- }
- BOOL stopping;
-
- do {
-
- __try
- {
- stopping = Run();
-
- }
- __except(EXCEPTION_EXECUTE_HANDLER)
- {
- __try {
- XsLog("Exception hit %x", GetExceptionCode());
- }
- __except(EXCEPTION_EXECUTE_HANDLER)
- {
- }
- stopping = false;
- }
- } while (!stopping);
-
- XsLog("Guest agent service stopped");
- ShutdownXSAccessor();
- DeregisterEventSource(eventLog);
- ServiceControlManagerUpdate(0, SERVICE_STOPPED);
- return;
-}
-
-void ServiceControlManagerUpdate(DWORD dwExitCode, DWORD dwState)
-{
- ServiceStatus.dwWin32ExitCode = dwExitCode;
- ServiceStatus.dwCurrentState = dwState;
- SetServiceStatus (hStatus, &ServiceStatus);
-}
-
-// Service control handler function
-static DWORD WINAPI ServiceControlHandler(DWORD request, DWORD evtType,
- LPVOID eventData, LPVOID ctxt)
-{
- UNREFERENCED_PARAMETER(ctxt);
- UNREFERENCED_PARAMETER(eventData);
-
- switch(request)
- {
- case SERVICE_CONTROL_STOP:
- DBGPRINT(("XenSvc: xenservice stopped.\n"));
- ServiceControlManagerUpdate(0, SERVICE_STOP_PENDING);
- SetEvent(hServiceExitEvent);
- return NO_ERROR;
-
- case SERVICE_CONTROL_SHUTDOWN:
- DBGPRINT(("XenSvc: xenservice shutdown.\n"));
- ServiceControlManagerUpdate(0, SERVICE_STOP_PENDING);
- SetEvent(hServiceExitEvent);
- return NO_ERROR;
-
- default:
- DBGPRINT(("XenSvc: unknown request."));
- break;
- }
-
- ServiceControlManagerUpdate(0, SERVICE_RUNNING);
- return ERROR_CALL_NOT_IMPLEMENTED;
-}
diff --git a/src/win32stubagent/XService.h b/src/win32stubagent/XService.h
deleted file mode 100644
index 32ee163..0000000
--- a/src/win32stubagent/XService.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _XSERVICE_H
-#define _XSERVICE_H
-
-#include <version.h>
-
-#define SVC_NAME "xensvc"
-#define SVC_DISPLAYNAME PRODUCT_NAME_STR ## "Interface Service"
-#define SVC_DESC "Monitors and provides various metrics to XenStore"
-
-void PrintError(const char *func);
-void PrintError(const char *func, DWORD err);
-void StartClipboardSync(void);
-void FinishClipboardSync(void);
-void ClipboardConsoleChanged(void);
-
-void XsDumpLogThisThread(void);
-void XsInitPerThreadLogging(void);
-void XsLogMsg(const char *fmt, ...);
-void DoVolumeDump(void);
-
-void AcquireSystemPrivilege(LPCTSTR name);
-
-#endif
diff --git a/src/win32stubagent/errors.cpp b/src/win32stubagent/errors.cpp
deleted file mode 100644
index caf47cc..0000000
--- a/src/win32stubagent/errors.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/* Black-box data recorder. This records stuff which is happening
- while the agent runs, and tries to push it out to dom0 syslog if we
- crash. */
-#include "stdafx.h"
-#include <windows.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "XService.h"
-#include "XSAccessor.h"
-
-
-#define RING_SIZE 8192
-
-struct message_ring {
- HANDLE handle;
- unsigned prod_idx;
- unsigned cons_idx;
- unsigned char payload[RING_SIZE];
-};
-
-static __declspec(thread) struct message_ring message_ring;
-
-static char *
-Xsvasprintf(const char *fmt, va_list args)
-{
- char *work;
- int work_size;
- int r;
-
- work_size = 32;
- while (1) {
- work = (char *)malloc(work_size);
- if (!work)
- return work;
- r = _vsnprintf(work, work_size, fmt, args);
- if (r == 0) {
- free(work);
- return NULL;
- }
- if (r != -1 && r < work_size) {
- return work;
- }
- free(work);
- work_size *= 2;
- }
-}
-
-static char *
-Xsasprintf(const char *fmt, ...)
-{
- va_list args;
- char *res;
-
- va_start(args, fmt);
- res = Xsvasprintf(fmt, args);
- va_end(args);
- return res;
-}
-
-void
-XsLogMsg(const char *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- XsLog(fmt, args);
- va_end(args);
-}
-
-
diff --git a/src/win32stubagent/messages.mc b/src/win32stubagent/messages.mc
deleted file mode 100644
index 0289c44..0000000
--- a/src/win32stubagent/messages.mc
+++ /dev/null
@@ -1,66 +0,0 @@
-SeverityNames=(Informational=0x1)
-FacilityNames=(XenUser=0xd60)
-
-MessageId=0x0001
-Facility=XenUser
-Severity=Informational
-SymbolicName=EVENT_XENUSER_POWEROFF
-Language=English
-The tools requested that the local VM shut itself down.
-.
-
-MessageId=0x0002
-Facility=XenUser
-Severity=Informational
-SymbolicName=EVENT_XENUSER_REBOOT
-Language=English
-The tools requested that the local VM reboot.
-.
-
-MessageId=0x0003
-Facility=XenUser
-Severity=Informational
-SymbolicName=EVENT_XENUSER_HIBERNATE
-Language=English
-The tools requested that the local VM hibernate itself.
-.
-
-MessageId=0x0004
-Facility=XenUser
-Severity=Informational
-SymbolicName=EVENT_XENUSER_S3
-Language=English
-The tools requested that the local VM enter power state S3.
-.
-
-MessageId=0x0005
-Facility=XenUser
-Severity=Informational
-SymbolicName=EVENT_XENUSER_WMI
-Language=English
-The tools noticed that WMI became non-functional.
-.
-
-MessageId=0x0006
-Facility=XenUser
-Severity=Informational
-SymbolicName=EVENT_XENUSER_STARTED
-Language=English
-The tools initiated.
-.
-
-MessageId=0x0007
-Facility=XenUser
-Severity=Informational
-SymbolicName=EVENT_XENUSER_UNSUSPENDED
-Language=English
-The tools returned from suspend.
-.
-
-MessageId=0x0008
-Facility=XenUser
-Severity=Informational
-SymbolicName=EVENT_XENUSER_UNEXPECTED
-Language=English
-The tools experienced an unexpected error.
-.
diff --git a/src/win32stubagent/stdafx.cpp b/src/win32stubagent/stdafx.cpp
deleted file mode 100644
index 72ced79..0000000
--- a/src/win32stubagent/stdafx.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-// stdafx.cpp : source file that includes just the standard includes
-// XenService.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "stdafx.h"
-
-// TODO: reference any additional headers you need in STDAFX.H
-// and not in this file
diff --git a/src/win32stubagent/stdafx.h b/src/win32stubagent/stdafx.h
deleted file mode 100644
index 391a848..0000000
--- a/src/win32stubagent/stdafx.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#pragma once
-
-
-#include <iostream>
-#include <tchar.h>
-
-// TODO: reference additional headers your program requires here
diff --git a/src/win32stubagent/w32xagent.rc b/src/win32stubagent/w32xagent.rc
deleted file mode 100644
index 78e5cc7..0000000
--- a/src/win32stubagent/w32xagent.rc
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-
-#include <windows.h>
-#include <ntverp.h>
-
-#undef VER_COMPANYNAME_STR
-#undef VER_PRODUCTNAME_STR
-#undef VER_PRODUCTVERSION
-#undef VER_PRODUCTVERSION_STR
-
-#include <version.h>
-
-#define VER_COMPANYNAME_STR VENDOR_NAME_STR
-#define VER_LEGALCOPYRIGHT_STR "Copyright (c) Citrix Systems Inc."
-
-#define VER_PRODUCTNAME_STR "XENIFACE"
-#define VER_PRODUCTVERSION
MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
-#define VER_PRODUCTVERSION_STR MAJOR_VERSION_STR "." MINOR_VERSION_STR
"." MICRO_VERSION_STR "." BUILD_NUMBER_STR
-
-#define VER_INTERNALNAME_STR "w32xagent.exe"
-#define VER_FILEVERSION_STR "1.0"
-#define VER_FILEDESCRIPTION_STR "w32agent"
-#define VER_ORIGINALFILENAME_STR "w32xagent.exe"
-#define VER_FILETYPE VFT_APP
-#define VER_FILESUBTYPE 0
-
-xen_icon ICON "xen.ico"
-
-#include "common.ver"
-#include "messages.rc"
\ No newline at end of file
diff --git a/src/win32stubagent/xen.ico b/src/win32stubagent/xen.ico
deleted file mode 100644
index
844c993ba290e5055a8900ca8786ea0e031138a6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 25214
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
CuCXov
diff --git a/vs2012/liteagent/LiteAgent.vcxproj
b/vs2012/liteagent/LiteAgent.vcxproj
index e67918a..b133576 100644
--- a/vs2012/liteagent/LiteAgent.vcxproj
+++ b/vs2012/liteagent/LiteAgent.vcxproj
@@ -137,7 +137,7 @@
<ItemDefinitionGroup
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
- <PrecompiledHeader>Create</PrecompiledHeader>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
@@ -166,7 +166,7 @@
<ItemDefinitionGroup
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
- <PrecompiledHeader>Create</PrecompiledHeader>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
@@ -193,38 +193,8 @@
</CustomBuildStep>
</ItemDefinitionGroup>
<ItemGroup>
- <ClCompile Include="..\..\src\win32stubagent\errors.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- </ClCompile>
- <ClCompile Include="..\..\src\win32stubagent\stdafx.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- </ClCompile>
- <ClCompile Include="..\..\src\win32stubagent\WmiAccessor.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- </ClCompile>
- <ClCompile Include="..\..\src\win32stubagent\XSAccessor.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- </ClCompile>
- <ClCompile Include="..\..\src\win32stubagent\XService.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- </ClCompile>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\win32stubagent\stdafx.h" />
- <ClInclude Include="..\..\src\win32stubagent\WmiAccessor.h" />
- <ClInclude Include="..\..\src\win32stubagent\XSAccessor.h" />
- <ClInclude Include="..\..\src\win32stubagent\XService.h" />
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\src\win32stubagent\messages.mc">
diff --git a/vs2013/liteagent/LiteAgent.vcxproj
b/vs2013/liteagent/LiteAgent.vcxproj
index 50dbe43..a8f59a3 100644
--- a/vs2013/liteagent/LiteAgent.vcxproj
+++ b/vs2013/liteagent/LiteAgent.vcxproj
@@ -197,39 +197,8 @@
</CustomBuildStep>
</ItemDefinitionGroup>
<ItemGroup>
- <ClCompile Include="..\..\src\win32stubagent\errors.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- </ClCompile>
- <ClCompile Include="..\..\src\win32stubagent\stdafx.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- </ClCompile>
- <ClCompile Include="..\..\src\win32stubagent\WmiAccessor.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- </ClCompile>
- <ClCompile Include="..\..\src\win32stubagent\XSAccessor.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- </ClCompile>
- <ClCompile Include="..\..\src\win32stubagent\XService.cpp">
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
- <PrecompiledHeader
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
- <PreprocessToFile
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</PreprocessToFile>
- </ClCompile>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\win32stubagent\stdafx.h" />
- <ClInclude Include="..\..\src\win32stubagent\WmiAccessor.h" />
- <ClInclude Include="..\..\src\win32stubagent\XSAccessor.h" />
- <ClInclude Include="..\..\src\win32stubagent\XService.h" />
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\src\win32stubagent\messages.mc">
--
1.9.4.msysgit.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |