Index: /trunk/src/VBox/Installer/win/VBoxMergeApp.wxi
===================================================================
--- /trunk/src/VBox/Installer/win/VBoxMergeApp.wxi	(revision 59417)
+++ /trunk/src/VBox/Installer/win/VBoxMergeApp.wxi	(revision 59418)
@@ -81,8 +81,6 @@
 
     <Component Id="cp_ProxyStub" Guid="CDD09BA4-8D87-4383-DCA6-1CCCF9D11091" Win64="$(var.Property_Win64)">
-    <?if $(env.BUILD_TARGET_ARCH) != "x86" ?>
-        <!-- AMD64: Only install this proxy stub DLL on Windows 7 and later (OLE32 imports). -->
+        <!-- Only install this proxy stub DLL on Windows 7 and later (OLE32.ObjectStublessClientXX imports). -->
         <Condition><![CDATA[(VersionNT >= 601)]]></Condition>
-    <?endif ?>
         <File Id="file_VBoxProxyStub" Name="VBoxProxyStub.dll" KeyPath="yes"
               Source="$(env.PATH_OUT)\bin\VBoxProxyStub.dll">
@@ -93,7 +91,6 @@
     </Component>
 
-    <?if $(env.BUILD_TARGET_ARCH) != "x86" ?>
     <Component Id="cp_ProxyStubLegacy" Guid="97F12055-5B6D-481C-E8CD-F41D8C733280" Win64="$(var.Property_Win64)">
-        <!-- AMD64: Only install this proxy stub DLL pre-Windows 7 (legacy NDR stuff). -->
+        <!-- Only install this proxy stub DLL pre-Windows 7 (AMD64: legacy NDR stuff; Both: No ObjectStublessClientXX). -->
         <Condition><![CDATA[(VersionNT < 601)]]></Condition>
         <File Id="file_VBoxProxyStubLegacy" Name="VBoxProxyStubLegacy.dll" KeyPath="yes"
@@ -104,5 +101,4 @@
         <?include $(env.PATH_TARGET)\VirtualBox_TypeLib.wxi ?>
     </Component>
-    <?endif ?>
 
 <?endif?>
Index: /trunk/src/VBox/Installer/win/VirtualBox.wxs
===================================================================
--- /trunk/src/VBox/Installer/win/VirtualBox.wxs	(revision 59417)
+++ /trunk/src/VBox/Installer/win/VirtualBox.wxs	(revision 59418)
@@ -401,7 +401,5 @@
     <?if $(env.VBOX_WITH_MIDL_PROXY_STUB) = "yes" ?>
         <ComponentRef Id="cp_ProxyStub" />
-        <?if $(env.BUILD_TARGET_ARCH) != "x86" ?>
         <ComponentRef Id="cp_ProxyStubLegacy" />
-        <?endif?>
     <?endif?>
         <ComponentRef Id="cp_MainBinaries" />
Index: /trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Main/Makefile.kmk	(revision 59417)
+++ /trunk/src/VBox/Main/Makefile.kmk	(revision 59418)
@@ -935,13 +935,11 @@
  	$(VBoxCOM_0_OUTDIR)/VirtualBox.h \
  	$(VBoxCOM_0_OUTDIR)/VirtualBox.tlb
- ifeq ($(KBUILD_TARGET_ARCH),amd64)
-  VBoxCOM_CLEAN        += \
- 	$(VBoxCOM_0_OUTDIR)/old64/VirtualBox_i.c \
- 	$(VBoxCOM_0_OUTDIR)/old64/VirtualBox_p.c \
- 	$(VBoxCOM_0_OUTDIR)/old64/dlldata.c \
- 	$(VBoxCOM_0_OUTDIR)/old64/VirtualBox.h \
- 	$(VBoxCOM_0_OUTDIR)/old64/VirtualBox.tlb
-  VBoxCOM_BLDDIRS      = $(VBoxCOM_0_OUTDIR)/old64/
- endif
+ VBoxCOM_CLEAN        += \
+	$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_i.c \
+	$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_p.c \
+	$(VBoxCOM_0_OUTDIR)/legacy/dlldata.c \
+	$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox.h \
+	$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox.tlb
+ VBoxCOM_BLDDIRS      = $(VBoxCOM_0_OUTDIR)/legacy/
 else # !win
  VBoxCOM_SOURCES       += \
@@ -1047,27 +1045,27 @@
  VBoxProxyStub_DEFS.win.x86 = WIN32
  VBoxProxyStub_SDKS     = VBOX_NTDLL
+ VBoxProxyStub_DEFPATH  = $(VBoxCOM_0_OUTDIR)/# Hack to workaround drive letter in $(VBoxCOM_0_OUTDIR)/ for CFLAGS hack below.
  VBoxProxyStub_INCS     = $(VBoxCOM_0_OUTDIR)/
- VBoxProxyStub_SOURCES  = \
- 	$(VBoxCOM_0_OUTDIR)/VirtualBox_p.c \
- 	$(VBoxCOM_0_OUTDIR)/VirtualBox_i.c \
+ VBoxProxyStub_SOURCES := \
+ 	VirtualBox_p.c \
+ 	VirtualBox_i.c \
+ 	$(PATH_SUB_CURRENT)/src-all/win/VBoxProxyStub.def \
+ 	$(PATH_SUB_CURRENT)/src-all/win/VBoxProxyStub.rc \
+ 	$(PATH_SUB_CURRENT)/src-all/win/VBoxProxyStub.c
+ src-all/win/VBoxProxyStub.rc_DEPS = $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb
+ VBoxProxyStub_VirtualBox_p.c_CFLAGS.x86 = /Gz # Workaround for incorrect ObjectStublessClient* prototypes in SDK v7.1.
+
+ DLLS += VBoxProxyStubLegacy
+ VBoxProxyStubLegacy_TEMPLATE = VBOXMAINCOMP
+ VBoxProxyStubLegacy_EXTENDS  = VBoxProxyStub
+ VBoxProxyStubLegacy_DEFS     = $(VBoxProxyStub_DEFS) VBOX_IN_PROXY_STUB_LEGACY
+ VBoxProxyStubLegacy_INCS     = $(VBoxCOM_0_OUTDIR)/legacy/
+ VBoxProxyStubLegacy_SOURCES  = \
+ 	$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_p.c \
+ 	$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_i.c \
  	src-all/win/VBoxProxyStub.def \
- 	src-all/win/VBoxProxyStub.rc \
+ 	src-all/win/VBoxProxyStubLegacy.rc \
  	src-all/win/VBoxProxyStub.c
-  src-all/win/VBoxProxyStub.rc_DEPS = $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb
-
- ifeq ($(KBUILD_TARGET_ARCH),amd64)
-  DLLS += VBoxProxyStubLegacy
-  VBoxProxyStubLegacy_TEMPLATE = VBOXMAINCOMP
-  VBoxProxyStubLegacy_EXTENDS  = VBoxProxyStub
-  VBoxProxyStubLegacy_DEFS     = $(VBoxProxyStub_DEFS) VBOX_IN_PROXY_STUB_LEGACY
-  VBoxProxyStubLegacy_INCS     = $(VBoxCOM_0_OUTDIR)/old64/
-  VBoxProxyStubLegacy_SOURCES  = \
-  	$(VBoxCOM_0_OUTDIR)/old64/VirtualBox_p.c \
-  	$(VBoxCOM_0_OUTDIR)/old64/VirtualBox_i.c \
-  	src-all/win/VBoxProxyStub.def \
-  	src-all/win/VBoxProxyStubLegacy.rc \
-  	src-all/win/VBoxProxyStub.c
-  src-all/win/VBoxProxyStubLegacy.rc_DEPS = $(VBoxCOM_0_OUTDIR)/old64/VirtualBox.tlb
- endif
+ src-all/win/VBoxProxyStubLegacy.rc_DEPS = $(VBoxCOM_0_OUTDIR)/legacy/VirtualBox.tlb
 
  ifdef VBOX_WITH_32_ON_64_MAIN_API
@@ -1140,7 +1138,7 @@
 + $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb: $(VBOX_IDL_FILE.MSCOM) | $$(dir $$@)
 	$(VBOX_WIN_MIDL) /nologo \
-		$(if-expr "$(KBUILD_TARGET_ARCH)" == "amd64" && "$(KBUILD_HOST)" == "win" \
+		$(if-expr "$(KBUILD_TARGET_ARCH)" == "amd64" \
 		,/env amd64 /robust /protocol all /target NT61\
-		,/env win32 /robust /protocol all /target NT51) \
+		,/env win32 /robust /protocol all /target NT61) \
 		/out $(call VBOX_FN_MAKE_WIN_PATH,$(VBoxCOM_0_OUTDIR)) \
 		/cpp_cmd $(subst $(EXEC_X86_WIN32),,$(call VBOX_FN_MAKE_WIN_PATH,$(TOOL_$(VBOX_VCC_TOOL)_CC))) \
@@ -1149,15 +1147,18 @@
 		$(call VBOX_FN_MAKE_WIN_PATH,$<)
 
-if defined(VBOX_WITH_MIDL_PROXY_STUB) && "$(KBUILD_TARGET_ARCH)" == "amd64"
+if defined(VBOX_WITH_MIDL_PROXY_STUB)
 # -Windows Server 2003 AMD64 SP1 does not like the result when using '/protocol all' and '/target NT51'.
 # -Vista AMD64 SP1 and Windows Server 2008 AMD64 seems to have some objections as well, but it seemed
 #  that using an older MIDL compiler (v7.00.0499 instead of v7.00.0555) helps. But the W2K3 fix also works.
-$(VBoxCOM_0_OUTDIR)/old64/VirtualBox_i.c \
-+ $(VBoxCOM_0_OUTDIR)/old64/VirtualBox_p.c\
-+ $(VBoxCOM_0_OUTDIR)/old64/dlldata.c \
-+ $(VBoxCOM_0_OUTDIR)/old64/VirtualBox.h \
-+ $(VBoxCOM_0_OUTDIR)/old64/VirtualBox.tlb: $(VBOX_IDL_FILE.MSCOM) | $$(dir $$@)
+# To avoid 32-bit vs. 64-bit differences, we do the same for 32-bit windows versions.
+$(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_i.c \
++ $(VBoxCOM_0_OUTDIR)/legacy/VirtualBox_p.c\
++ $(VBoxCOM_0_OUTDIR)/legacy/dlldata.c \
++ $(VBoxCOM_0_OUTDIR)/legacy/VirtualBox.h \
++ $(VBoxCOM_0_OUTDIR)/legacy/VirtualBox.tlb: $(VBOX_IDL_FILE.MSCOM) | $$(dir $$@)
 	$(VBOX_WIN_MIDL) /nologo \
-		/env win64 /x64 /robust /target NT50 \
+		$(if-expr "$(KBUILD_TARGET_ARCH)" == "amd64" \
+		,/env amd64 /x64 /target NT50 /robust \
+		,/env win32      /target NT51 /robust /protocol all ) \
 		/out $(call VBOX_FN_MAKE_WIN_PATH,$(dir $@)) \
 		/cpp_cmd $(subst $(EXEC_X86_WIN32),,$(call VBOX_FN_MAKE_WIN_PATH,$(TOOL_$(VBOX_VCC_TOOL)_CC))) \
@@ -1167,10 +1168,12 @@
 endif
 
+# The XP targetted 32-bit proxy stub works with all versions of windows (the
+# issues leading to the VBoxProxyStubLegacy.dll are only on 64-bit windows).
 $(VBoxCOM-x86_0_OUTDIR)/VirtualBox_i.c \
 + $(VBoxCOM-x86_0_OUTDIR)/VirtualBox.h \
 $(if $(VBOX_WITH_MIDL_PROXY_STUB),+ $(VBoxCOM-x86_0_OUTDIR)/VirtualBox_p.c + $(VBoxCOM-x86_0_OUTDIR)/dlldata.c,) \
 + $(VBoxCOM-x86_0_OUTDIR)/VirtualBox-x86.tlb: $(VBOX_IDL_FILE.MSCOM) | $$(dir $$@)
-	$(VBOX_WIN_MIDL) /nologo /env win32 /target NT51 \
-		/robust /protocol all \
+	$(VBOX_WIN_MIDL) /nologo \
+		/env win32 /target NT51 /robust /protocol all  \
 		/out $(call VBOX_FN_MAKE_WIN_PATH,$(VBoxCOM-x86_0_OUTDIR)) \
 		/tlb $(call VBOX_FN_MAKE_WIN_PATH,$(VBoxCOM-x86_0_OUTDIR)/VirtualBox-x86.tlb) \
Index: /trunk/src/VBox/Main/glue/initterm.cpp
===================================================================
--- /trunk/src/VBox/Main/glue/initterm.cpp	(revision 59417)
+++ /trunk/src/VBox/Main/glue/initterm.cpp	(revision 59418)
@@ -258,13 +258,8 @@
 #  ifndef VBOX_IN_32_ON_64_MAIN_API
             rc = RTPathAppend(szPath, sizeof(szPath),
-#   if ARCH_BITS == 64
                                  RT_MAKE_U64(((PKUSER_SHARED_DATA)MM_SHARED_USER_DATA_VA)->NtMinorVersion,
                                              ((PKUSER_SHARED_DATA)MM_SHARED_USER_DATA_VA)->NtMajorVersion)
                               >= RT_MAKE_U64(1/*Lo*/,6/*Hi*/)
-                              ? "VBoxProxyStub.dll" : "VBoxProxyStubLegacy.dll"
-#   else
-                              "VBoxProxyStub.dll"
-#   endif
-                              );
+                              ? "VBoxProxyStub.dll" : "VBoxProxyStubLegacy.dll");
 #  else
             rc = RTPathAppend(szPath, sizeof(szPath), "x86\\VBoxProxyStub-x86.dll");
Index: /trunk/src/VBox/Main/src-all/win/VBoxProxyStub.c
===================================================================
--- /trunk/src/VBox/Main/src-all/win/VBoxProxyStub.c	(revision 59417)
+++ /trunk/src/VBox/Main/src-all/win/VBoxProxyStub.c	(revision 59418)
@@ -79,11 +79,12 @@
 #if ARCH_BITS == 64 || defined(VBOX_IN_32_ON_64_MAIN_API)
 # define VBPS_PROXY_STUB_FILE(a_fIs32On64) \
-    ( (a_fIs32On64) ? "x86\\VBoxProxyStub-x86.dll" \
-      : RT_MAKE_U64(((PKUSER_SHARED_DATA)MM_SHARED_USER_DATA_VA)->NtMinorVersion, \
-                    ((PKUSER_SHARED_DATA)MM_SHARED_USER_DATA_VA)->NtMajorVersion) >= RT_MAKE_U64(1/*Lo*/,6/*Hi*/) \
-        ? "VBoxProxyStub.dll" : "VBoxProxyStubLegacy.dll" )
+    ( (a_fIs32On64) ? "x86\\VBoxProxyStub-x86.dll" : VBPS_PROXY_STUB_FILE_SUB() )
 #else
 # define VBPS_PROXY_STUB_FILE(a_fIs32On64) "VBoxProxyStub.dll"
 #endif
+#define VBPS_PROXY_STUB_FILE_SUB() \
+    ( RT_MAKE_U64(((PKUSER_SHARED_DATA)MM_SHARED_USER_DATA_VA)->NtMinorVersion, \
+                  ((PKUSER_SHARED_DATA)MM_SHARED_USER_DATA_VA)->NtMajorVersion) >= RT_MAKE_U64(1/*Lo*/,6/*Hi*/) \
+      ? "VBoxProxyStub.dll" : "VBoxProxyStubLegacy.dll" )
 
 
