VBoxTray.h revision 92717ff0762d9966fec99b209450611e42af2ca1
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/* $Id$ */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/** @file
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync * VBoxTray - Guest Additions Tray, Internal Header.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/*
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * Copyright (C) 2006-2007 Oracle Corporation
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync *
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * available from http://www.virtualbox.org. This file is free software;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * you can redistribute it and/or modify it under the terms of the GNU
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * General Public License (GPL) as published by the Free Software
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#ifndef ___VBOXTRAY_H
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#define ___VBOXTRAY_H
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# define _InterlockedExchange _InterlockedExchange_StupidDDKVsCompilerCrap
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# define _InterlockedExchangeAdd _InterlockedExchangeAdd_StupidDDKVsCompilerCrap
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# define _InterlockedCompareExchange _InterlockedCompareExchange_StupidDDKVsCompilerCrap
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# define _InterlockedAddLargeStatistic _InterlockedAddLargeStatistic_StupidDDKVsCompilerCrap
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# define _interlockedbittestandset _interlockedbittestandset_StupidDDKVsCompilerCrap
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# define _interlockedbittestandreset _interlockedbittestandreset_StupidDDKVsCompilerCrap
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# define _interlockedbittestandset64 _interlockedbittestandset64_StupidDDKVsCompilerCrap
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# define _interlockedbittestandreset64 _interlockedbittestandreset64_StupidDDKVsCompilerCrap
b8908d384db2324f04a2f68a13e67ea32ebf609avboxsync# pragma warning(disable : 4163)
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync#include <windows.h>
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# pragma warning(default : 4163)
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# undef _InterlockedExchange
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync# undef _InterlockedExchangeAdd
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync# undef _InterlockedCompareExchange
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync# undef _InterlockedAddLargeStatistic
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# undef _interlockedbittestandset
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# undef _interlockedbittestandreset
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# undef _interlockedbittestandset64
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync# undef _interlockedbittestandreset64
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync#include <tchar.h>
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync#include <stdio.h>
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include <stdarg.h>
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync#include <process.h>
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include <iprt/initterm.h>
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include <iprt/string.h>
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync#include <VBox/version.h>
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include <VBox/Log.h>
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include <VBox/VBoxGuest.h> /** @todo use the VbglR3 interface! */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include <VBox/VBoxGuestLib.h>
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include <VBoxDisplay.h>
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#include "VBoxDispIf.h"
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/*
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync * Windows messsages.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync/**
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * General VBoxTray messages.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync */
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync#define WM_VBOXTRAY_TRAY_ICON WM_APP + 40
1a06df6ab1717878d43165be3ce300284abf9742vboxsync/**
1a06df6ab1717878d43165be3ce300284abf9742vboxsync * VM/VMMDev related messsages.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync */
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync#define WM_VBOXTRAY_VM_RESTORED WM_APP + 100
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/**
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync * VRDP messages.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#define WM_VBOXTRAY_VRDP_CHECK WM_APP + 301
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/* The tray icon's ID. */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#define ID_TRAYICON 2000
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/*
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync * Timer IDs.
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#define TIMERID_VBOXTRAY_CHECK_HOSTVERSION 1000
b8908d384db2324f04a2f68a13e67ea32ebf609avboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/* The environment information for services. */
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsynctypedef struct _VBOXSERVICEENV
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync{
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HINSTANCE hInstance;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HANDLE hDriver;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HANDLE hStopEvent;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync /* display driver interface, XPDM - WDDM abstraction see VBOXDISPIF** definitions above */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync VBOXDISPIF dispIf;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync} VBOXSERVICEENV;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/* The service initialization info and runtime variables. */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsynctypedef struct _VBOXSERVICEINFO
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync{
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync char *pszName;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync int (* pfnInit) (const VBOXSERVICEENV *pEnv, void **ppInstance, bool *pfStartThread);
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync unsigned (__stdcall * pfnThread) (void *pInstance);
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync void (* pfnDestroy) (const VBOXSERVICEENV *pEnv, void *pInstance);
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync /* Variables. */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync HANDLE hThread;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync void *pInstance;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync bool fStarted;
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync} VBOXSERVICEINFO;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync/* Globally unique (system wide) message registration. */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsynctypedef struct _VBOXGLOBALMESSAGE
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync{
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync /** Message name. */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync char *pszName;
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync /** Function pointer for handling the message. */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync int (* pfnHandler) (WPARAM wParam, LPARAM lParam);
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync /* Variables. */
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync /** Message ID;
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync * to be filled in when registering the actual message. */
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync UINT uMsgID;
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync} VBOXGLOBALMESSAGE, *PVBOXGLOBALMESSAGE;
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsyncextern HWND ghwndToolWindow;
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsyncextern HINSTANCE ghInstance;
45c94fd5bc3ee64a3577f858c7eca5a566601c6fvboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync#endif /* !___VBOXTRAY_H */
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync
9c0076729ec8138e89ce8a6af9a772b68f1f8dc7vboxsync