VBoxGuest_Internal.h revision 4cda784a835ae7004b8f6c7f08f1d9d7b5d78a59
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * VBoxGuest -- VirtualBox Win32 guest support driver
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * available from http://www.virtualbox.org. This file is free software;
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * you can redistribute it and/or modify it under the terms of the GNU
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * General Public License (GPL) as published by the Free Software
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * additional information or have any questions.
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync/*******************************************************************************
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync* Header Files *
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync*******************************************************************************/
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync/** @todo Use the-nt-kernel.h and keep the messy stuff all in one place? */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync# if (_MSC_VER >= 1400) && !defined(VBOX_WITH_PATCHED_DDK)
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync# define _InterlockedExchange _InterlockedExchange_StupidDDKVsCompilerCrap
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync# define _InterlockedExchangeAdd _InterlockedExchangeAdd_StupidDDKVsCompilerCrap
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync# define _InterlockedCompareExchange _InterlockedCompareExchange_StupidDDKVsCompilerCrap
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync# define _InterlockedAddLargeStatistic _InterlockedAddLargeStatistic_StupidDDKVsCompilerCrap
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync/*******************************************************************************
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync* Defined Constants And Macros *
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync*******************************************************************************/
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync/* debug printf */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync/* dprintf */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync#if (defined(DEBUG) && !defined(NO_LOGGING)) || defined(LOG_ENABLED)
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync# define dprintf(a) do {} while (0)
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync/* dprintf2 - extended logging. */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync# define dprintf2(a) do { } while (0)
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync// the maximum scatter/gather transfer length
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * Error codes.
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync/*******************************************************************************
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync* Structures and Typedefs *
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync*******************************************************************************/
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync// possible device states for our state machine
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync// undocumented API to set the system time
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsyncNTSYSAPI NTSTATUS NTAPI ZwSetSystemTime(IN PLARGE_INTEGER NewTime, OUT PLARGE_INTEGER OldTime OPTIONAL);
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsynctypedef struct _BASE_ADDRESS {
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync PHYSICAL_ADDRESS RangeStart; // Original device physical address
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync ULONG RangeLength; // Length of I/O or memory range
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync BOOLEAN RangeInMemory; // Flag: unmapped range is I/O or memory range
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync PVOID MappedRangeStart; // Mapped I/O or memory range
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync BOOLEAN MappedRangeInMemory; // Flag: mapped range is I/O or memory range
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync BOOLEAN ResourceMapped; // Flag: resource is mapped (i.e. MmMapIoSpace called)
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * Device extension.
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync//// legacy stuff
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // bus number where the device is located
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // slot number where the device is located
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // device interrupt level
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // device interrupt vector
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // affinity mask
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // LevelSensitive or Latched
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // PCI base address information
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // adapter object pointer, returned by HalGetAdapter
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // interrupt object pointer
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // the driver name
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // our functional driver object
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // the top of the stack
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // currently active Irp
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // device state
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // start port address
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // start of hypervisor mapping
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync // size in bytes of the hypervisor mapping
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /* Patch memory object. */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /* Physical address and length of VMMDev memory */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /* Virtual address of VMMDev memory */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /* Pending event flags signalled by host */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /* Notification semaphore */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /* Old Windows session id */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /* VRDP hook state */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /* Preallocated VMMDevEvents for IRQ handler */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /** Spinlock various items in the VBOXGUESTSESSION. */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /* Preallocated generic request for shutdown. */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /** Is the bugcheck callback registered? */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /** The bugcheck registration record. */
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync// Windows version identifier
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsynctypedef enum
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * The VBoxGuest per session data.
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * @remark Just to store hgcm ID's, perhaps could combine with one from common/VBoxGuest/vboxguestinternal.h?
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync /** Array containing HGCM client IDs associated with this session.
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * This will be automatically disconnected when the session is closed.
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync * Note that array size also affects/is maximum number of supported opengl threads per guest process.
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsyncVOID VBoxGuestDpcHandler(PKDPC dpc, PDEVICE_OBJECT pDevObj,
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsyncBOOLEAN VBoxGuestIsrHandler(PKINTERRUPT interrupt, PVOID serviceContext);
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsyncVOID unreserveHypervisorMemory(PVBOXGUESTDEVEXT pDevExt);
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsyncvoid VBoxCleanupMemBalloon(PVBOXGUESTDEVEXT pDevExt);
e1fd337d575f2a4c053c6fe7a811e2fd1a31e874vboxsync#endif // __H_VBOXGUESTINTERNAL