d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * VirtualBox Windows Guest Shared Folders - Windows 2000 Hacks.
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * Copyright (C) 2012 Oracle Corporation
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * available from http://www.virtualbox.org. This file is free software;
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * you can redistribute it and/or modify it under the terms of the GNU
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * General Public License (GPL) as published by the Free Software
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync/*******************************************************************************
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync* Header Files *
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync*******************************************************************************/
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync#define FsRtlTeardownPerStreamContexts FsRtlTeardownPerStreamContexts_AvoidIt
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync#define PsGetProcessImageFileName PsGetProcessImageFileName_AvoidIt
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * FsRtlTeardownPerStreamContexts.
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic VOID __stdcall Resolve_FsRtlTeardownPerStreamContexts(PFSRTL_ADVANCED_FCB_HEADER);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic volatile PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS g_pfnFsRtlTeardownPerStreamContexts = Resolve_FsRtlTeardownPerStreamContexts;
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic VOID __stdcall Fake_FsRtlTeardownPerStreamContexts(PFSRTL_ADVANCED_FCB_HEADER pAdvancedHeader)
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync PFSRTL_PER_STREAM_CONTEXT pCtx = CONTAINING_RECORD(pCur, FSRTL_PER_STREAM_CONTEXT, Links);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync Log(("Fake_FsRtlTeardownPerStreamContexts: %p\n", pCtx));
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync InitializeListHead(&pAdvancedHeader->FilterContexts);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic VOID __stdcall Resolve_FsRtlTeardownPerStreamContexts(PFSRTL_ADVANCED_FCB_HEADER pAdvancedHeader)
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync Log(("Resolve_FsRtlTeardownPerStreamContexts: %p\n", pAdvancedHeader));
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync RtlInitUnicodeString(&RoutineName, L"KeIpiGenericCall");
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync pfn = (PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS)MmGetSystemRoutineAddress(&RoutineName);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync ASMAtomicWritePtr(&g_pfnFsRtlTeardownPerStreamContexts, pfn);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncFsRtlTeardownPerStreamContexts(PFSRTL_ADVANCED_FCB_HEADER pAdvancedHeader)
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync Log(("FsRtlTeardownPerStreamContexts: %p\n", pAdvancedHeader));
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync g_pfnFsRtlTeardownPerStreamContexts(pAdvancedHeader);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync Log(("FsRtlTeardownPerStreamContexts: returns\n"));
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * RtlGetVersion
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsynctypedef NTSTATUS (__stdcall * PFNRTLGETVERSION)(PRTL_OSVERSIONINFOW);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic NTSTATUS __stdcall Resolve_RtlGetVersion(PRTL_OSVERSIONINFOW pVerInfo);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic volatile PFNRTLGETVERSION g_pfnRtlGetVersion = Resolve_RtlGetVersion;
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic NTSTATUS __stdcall Fake_RtlGetVersion(PRTL_OSVERSIONINFOW pVerInfo)
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync if (pVerInfo->dwOSVersionInfoSize < sizeof(*pVerInfo))
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync Log(("Fake_RtlGetVersion: -> STATUS_INVALID_PARAMETER (size = %#x)\n", pVerInfo->dwOSVersionInfoSize));
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync /* Report Windows 2000 w/o SP. */
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync if (pVerInfo->dwOSVersionInfoSize >= sizeof(RTL_OSVERSIONINFOEXW))
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync PRTL_OSVERSIONINFOEXW pVerInfoEx = (PRTL_OSVERSIONINFOEXW)pVerInfo;
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic NTSTATUS __stdcall Resolve_RtlGetVersion(PRTL_OSVERSIONINFOW pVerInfo)
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync RtlInitUnicodeString(&RoutineName, L"RtlGetVersion");
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync pfn = (PFNRTLGETVERSION)MmGetSystemRoutineAddress(&RoutineName);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync * PsGetProcessImageFileName
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsynctypedef LPSTR (__stdcall * PFNPSGETPROCESSIMAGEFILENAME)(PEPROCESS pProcess);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic LPSTR __stdcall Resolve_PsGetProcessImageFileName(PEPROCESS pProcess);
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic volatile PFNPSGETPROCESSIMAGEFILENAME g_pfnPsGetProcessImageFileName = Resolve_PsGetProcessImageFileName;
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic LPSTR __stdcall Fake_PsGetProcessImageFileName(PEPROCESS pProcess)
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync Log(("Fake_PsGetProcessImageFileName: %p\n", pProcess));
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync return "Fake_PsGetProcessImageFileName";
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsyncstatic LPSTR __stdcall Resolve_PsGetProcessImageFileName(PEPROCESS pProcess)
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync Log(("Resolve_PsGetProcessImageFileName: %p\n", pProcess));
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync RtlInitUnicodeString(&RoutineName, L"PsGetProcessImageFileName");
d86d6778ff0c57e2945a429ec47bf3b93cd9334evboxsync pfn = (PFNPSGETPROCESSIMAGEFILENAME)MmGetSystemRoutineAddress(&RoutineName);