vcc100-kernel32-fakes.cpp revision 01b927bd5e6f4ed282b59586dbadeb7739e5fa37
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* $Id$ */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** @file
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * IPRT - Tricks to make the Visual C++ 2010 CRT work on NT4, W2K and XP.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/*
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Copyright (C) 2012 Oracle Corporation
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync *
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * available from http://www.virtualbox.org. This file is free software;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * you can redistribute it and/or modify it under the terms of the GNU
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * General Public License (GPL) as published by the Free Software
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync *
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * The contents of this file may alternatively be used under the terms
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * of the Common Development and Distribution License Version 1.0
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * VirtualBox OSE distribution, in which case the provisions of the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * CDDL are applicable instead of those of the GPL.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync *
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * You may elect to license modified versions of this file under the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * terms and conditions of either the GPL or the CDDL or both.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/*******************************************************************************
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync* Header Files *
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync*******************************************************************************/
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#include <iprt/cdefs.h>
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#ifndef RT_ARCH_X86
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync# error "This code is X86 only"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#endif
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define DecodePointer Ignore_DecodePointer
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define EncodePointer Ignore_EncodePointer
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define InitializeCriticalSectionAndSpinCount Ignore_InitializeCriticalSectionAndSpinCount
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define HeapSetInformation Ignore_HeapSetInformation
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define HeapQueryInformation Ignore_HeapQueryInformation
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#include <Windows.h>
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#undef DecodePointer
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#undef EncodePointer
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#undef InitializeCriticalSectionAndSpinCount
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#undef HeapSetInformation
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#undef HeapQueryInformation
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#ifndef HEAP_STANDARD
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync# define HEAP_STANDARD 0
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#endif
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** @todo Try dynamically resolve the functions the first time one of them is
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * called. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern "C"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync__declspec(dllexport) PVOID WINAPI
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncDecodePointer(PVOID pvEncoded)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync{
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /*
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Fallback code.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync return pvEncoded;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync}
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern "C"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync__declspec(dllexport) PVOID WINAPI
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncEncodePointer(PVOID pvNative)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync{
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /*
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Fallback code.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync return pvNative;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync}
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern "C"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync__declspec(dllexport) BOOL WINAPI
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncInitializeCriticalSectionAndSpinCount(LPCRITICAL_SECTION pCritSect, DWORD cSpin)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync{
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /*
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Fallback code.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync InitializeCriticalSection(pCritSect);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync return TRUE;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync}
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern "C"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync__declspec(dllexport) BOOL WINAPI
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncHeapSetInformation(HANDLE hHeap, HEAP_INFORMATION_CLASS enmInfoClass, PVOID pvBuf, SIZE_T cbBuf)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync{
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /*
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Fallback code.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (enmInfoClass == HeapCompatibilityInformation)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if ( cbBuf != sizeof(ULONG)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync || !pvBuf
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync || *(PULONG)pvBuf == HEAP_STANDARD
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync )
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync SetLastError(ERROR_INVALID_PARAMETER);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync return FALSE;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync }
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync return TRUE;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync }
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync SetLastError(ERROR_INVALID_PARAMETER);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync return FALSE;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync}
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern "C"
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync__declspec(dllexport) BOOL WINAPI
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncHeapQueryInformation(HANDLE hHeap, HEAP_INFORMATION_CLASS enmInfoClass, PVOID pvBuf, SIZE_T cbBuf, PSIZE_T pcbRet)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync{
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync /*
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Fallback code.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (enmInfoClass == HeapCompatibilityInformation)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync *pcbRet = sizeof(ULONG);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (cbBuf < sizeof(ULONG) || !pvBuf)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync SetLastError(ERROR_INSUFFICIENT_BUFFER);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync return FALSE;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync }
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync *(PULONG)pvBuf = HEAP_STANDARD;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync return TRUE;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync }
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync SetLastError(ERROR_INVALID_PARAMETER);
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync return FALSE;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync}
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync