6eb6d0439d67fd4833f1d058b63bc9a56277b0b2vboxsync/* $Id$ */
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync/** @file
6eb6d0439d67fd4833f1d058b63bc9a56277b0b2vboxsync * VBoxCommon - Misc helper routines for install helper.
6eb6d0439d67fd4833f1d058b63bc9a56277b0b2vboxsync */
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync/*
b0e88382fa6cab5a202902e8e3fbbd8a7ce5e4edvboxsync * Copyright (C) 2008-2012 Oracle Corporation
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync *
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync * available from http://www.virtualbox.org. This file is free software;
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync * you can redistribute it and/or modify it under the terms of the GNU
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync * General Public License (GPL) as published by the Free Software
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync */
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync/*******************************************************************************
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync* Header Files *
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync*******************************************************************************/
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync#include <windows.h>
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync#include <tchar.h>
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync#include <stdio.h>
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync#include <msi.h>
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync#include <msiquery.h>
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync
667f741ffdced56a2059511ce99372ebdd62a115vboxsync
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync#if (_MSC_VER < 1400) /* Provide swprintf_s to VC < 8.0. */
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsyncint swprintf_s(WCHAR *buffer, size_t cbBuffer, const WCHAR *format, ...)
667f741ffdced56a2059511ce99372ebdd62a115vboxsync{
667f741ffdced56a2059511ce99372ebdd62a115vboxsync int ret;
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync va_list va;
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync va_start(va, format);
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync ret = _vsnwprintf(buffer, cbBuffer, format, va);
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync va_end(va);
667f741ffdced56a2059511ce99372ebdd62a115vboxsync return ret;
667f741ffdced56a2059511ce99372ebdd62a115vboxsync}
667f741ffdced56a2059511ce99372ebdd62a115vboxsync#endif
667f741ffdced56a2059511ce99372ebdd62a115vboxsync
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsyncUINT VBoxGetProperty(MSIHANDLE a_hModule, WCHAR *a_pwszName, WCHAR *a_pwszValue, DWORD a_dwSize)
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync{
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync DWORD dwBuffer = 0;
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync UINT uiRet = MsiGetPropertyW(a_hModule, a_pwszName, L"", &dwBuffer);
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync if (uiRet == ERROR_MORE_DATA)
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync {
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync ++dwBuffer; /* On output does not include terminating null, so add 1. */
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync if (dwBuffer > a_dwSize)
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync return ERROR_MORE_DATA;
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync ZeroMemory(a_pwszValue, a_dwSize);
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync uiRet = MsiGetPropertyW(a_hModule, a_pwszName, a_pwszValue, &dwBuffer);
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync }
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync return uiRet;
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync}
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsyncUINT VBoxSetProperty(MSIHANDLE a_hModule, WCHAR *a_pwszName, WCHAR *a_pwszValue)
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync{
10330aa61b0abd8a82e3dd9fb2ad064ec64ac900vboxsync return MsiSetPropertyW(a_hModule, a_pwszName, a_pwszValue);
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync}
18470279db8a9fdd714617adbe1aa8b63cc80aeevboxsync