Index: /trunk/Config.kmk
===================================================================
--- /trunk/Config.kmk	(revision 30227)
+++ /trunk/Config.kmk	(revision 30228)
@@ -1143,15 +1143,25 @@
 ifndef VBOX_VCC_TOOL
  ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
-  VBOX_USE_VCC80 ?= 1 # Enforce VCC80 when targetting AMD64.
- endif
- ifdef VBOX_USE_VCC80
-  ifeq ($(KBUILD_TARGET_ARCH),x86)
-   VBOX_VCC_TOOL := VCC80X86
-  else
-   VBOX_VCC_TOOL := VCC80AMD64
+  ifndef VBOX_USE_VCC100
+   VBOX_USE_VCC80 ?= 1 # the default for win.amd64
   endif
+ endif
+ ifdef VBOX_USE_VCC100
+  VBOX_VCC_TOOL_STEM = VCC100
+ else ifdef VBOX_USE_VCC80
+  VBOX_VCC_TOOL_STEM = VCC80
  else
   VBOX_VCC_TOOL := VCC70
- endif
+  VBOX_VCC_TOOL_STEM := VCC70
+ endif
+ ifndef VBOX_VCC_TOOL
+  VBOX_VCC_TOOL := $(VBOX_VCC_TOOL_STEM)$(toupper $(KBUILD_TARGET_ARCH))
+ endif
+else ifndef VBOX_VCC_TOOL_STEM
+$(error VBOX_VCC_TOOL_STEM is not defined)
+endif
+# VCC70 is hopefully the most special case here...
+if !defined(VBOX_USE_VCC100) && !defined(VBOX_USE_VCC90) && !defined(VBOX_USE_VCC80) && !defined(VBOX_USE_VCC70)
+ VBOX_USE_VCC70 := 1
 endif
 
@@ -1167,9 +1177,9 @@
 ## @todo Remove the default tool crap here!
 TOOL = $(VBOX_GCC_TOOL)
-ifdef VBOX_USE_VCC80
- TOOL.win.x86 = VCC80X86
- TOOL.win.amd64 = VCC80AMD64
-else
+ifdef VBOX_USE_VCC70
  TOOL.win = VCC70
+else
+ TOOL.win.x86 = $(VBOX_VCC_TOOL_STEM)X86
+ TOOL.win.amd64 = $(VBOX_VCC_TOOL_STEM)AMD64
 endif
 ASTOOL = $(VBOX_ASTOOL)
@@ -1309,5 +1319,5 @@
  VBOX_GCC_OPT    ?= -O2 $(VBOX_GCC_mtune-generic)
  VBOX_VCC_FP     ?= -Oy-
- ifdef VBOX_USE_VCC80
+ ifndef VBOX_USE_VCC70
  VBOX_VCC_OPT    ?= -O2 -GS-
  else
@@ -1317,5 +1327,5 @@
  VBOX_GCC_R0_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
  VBOX_VCC_R0_FP  ?= -Oy-
- ifdef VBOX_USE_VCC80
+ ifndef VBOX_USE_VCC70
  VBOX_VCC_R0_OPT ?= -O2 -GS-
  else
@@ -1325,5 +1335,5 @@
  VBOX_GCC_GC_OPT ?= -O2 $(VBOX_GCC_mtune-generic)
  VBOX_VCC_GC_FP  ?= -Oy-
- ifdef VBOX_USE_VCC80
+ ifndef VBOX_USE_VCC70
  VBOX_VCC_GC_OPT ?= -O2
  else
@@ -1348,4 +1358,13 @@
  VBOX_VCC_CRT_TYPE   =
  VBOX_VCC_CRT_TYPE_N = d
+endif
+
+#
+# Decide which windows DDK to use by default.
+#
+ifdef VBOX_USE_WINDDK
+ VBOX_WINDDK ?= WINDDK
+else
+ VBOX_WINDDK ?= W2K3DDK
 endif
 
@@ -1816,7 +1835,9 @@
   VBOX_WINDOWS_ADDITIONS_ICON_FILE ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBoxGA-vista.ico
   VBOX_NSIS_ICON_FILE              ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBoxGA-nsis.ico
-  TOOL_VCC80X86_RC   := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
-  TOOL_VCC80AMD64_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
-  TOOL_VCC70_RC      := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
+  TOOL_VCC100X86_RC   := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
+  TOOL_VCC100AMD64_RC := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
+  TOOL_VCC80X86_RC    := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
+  TOOL_VCC80AMD64_RC  := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
+  TOOL_VCC70_RC       := $(PATH_DEVTOOLS)/win.x86/ddk/6000/bin/x86/rc.exe
  else
   VBOX_WINDOWS_ICON_FILE           ?= $(PATH_ROOT)/src/VBox/Artwork/VirtualBox-winxp.ico
@@ -2168,8 +2189,8 @@
 # Special SDK for the problematic NTDLL.LIB.
 #
-SDK_VBOX_NTDLL = Requires W2K3DDK
-SDK_VBOX_NTDLL_LIBS ?= $(PATH_SDK_W2K3DDK_LIB)/ntdll.lib
+SDK_VBOX_NTDLL = Requires $(VBOX_WINDDK)
+SDK_VBOX_NTDLL_LIBS ?= $(PATH_SDK_$(VBOX_WINDDK)_LIB)/ntdll.lib
 ifeq ($(KBUILD_TARGET),win)
- include $(KBUILD_PATH)/sdks/W2K3DDK.kmk
+ include $(KBUILD_PATH)/sdks/$(VBOX_WINDDK).kmk
 endif
 
@@ -2263,6 +2284,6 @@
 
  ifeq ($(VBOX_LDR_FMT32),pe)
-  ifdef VBOX_USE_VCC80
-   TEMPLATE_VBoxRc_TOOL              = VCC80X86
+  ifndef VBOX_USE_VCC70
+   TEMPLATE_VBoxRc_TOOL              = $(VBOX_VCC_TOOL_STEM)X86
    TEMPLATE_VBoxRc_CXXFLAGS          = -Zi -Zl -GR- -EHs- -GF -W3 -wd4244 -GS- -wd4996 -Zc:wchar_t- -Gs8192 $(VBOX_VCC_GC_OPT) $(VBOX_VCC_GC_FP) $(VBOX_VCC_WERR)
   else
@@ -2271,11 +2292,20 @@
   endif
   TEMPLATE_VBoxRc_CFLAGS             = $(TEMPLATE_VBoxRc_CXXFLAGS)
-  TEMPLATE_VBoxRc_LDFLAGS            = -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Lines -MapInfo:Exports -NoD $(VBOX_VCC_LD_WERR) -Debug
-  ifndef VBOX_NOINC_MISC
-   include $(KBUILD_PATH)/sdks/W2K3DDKX86.kmk
+  TEMPLATE_VBoxRc_LDFLAGS            = -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Exports -NoD $(VBOX_VCC_LD_WERR) -Debug
+  ifdef VBOX_USE_WINDDK
+   ifndef VBOX_NOINC_MISC
+    include $(KBUILD_PATH)/sdks/$(VBOX_WINDDK).kmk
+   endif
+   TEMPLATE_VBoxRc_LIBS               = \
+   	$(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib
+  else
+   ifndef VBOX_NOINC_MISC
+    include $(KBUILD_PATH)/sdks/W2K3DDKX86.kmk
+   endif
+  TEMPLATE_VBoxRc_LIBS               = \
+	$(PATH_SDK_W2K3DDKX86_LIB)/int64.lib
   endif
-  TEMPLATE_VBoxRc_LIBS               = \
-	$(PATH_SDK_W2K3DDKX86_LIB)/int64.lib \
-	$(PATH_LIB)/RuntimeRCStub$(VBOX_SUFF_LIB)
+  TEMPLATE_VBoxRc_LIBS              += \
+  	$(PATH_LIB)/RuntimeRCStub$(VBOX_SUFF_LIB)
   TEMPLATE_VBoxRc_POST_CMDS          = $(VBOX_SIGN_IMAGE_CMDS)
  endif # pe
@@ -2331,12 +2361,12 @@
   TEMPLATE_VBoxRcExe_LDFLAGS = -Incremental:NO -MapInfo:Exports -NoD -Debug
   TEMPLATE_VBoxRcExe_SDKS    = WIN32SDK
-  ifdef VBOX_USE_VCC80
+  ifndef VBOX_USE_VCC70
    TEMPLATE_VBoxRcExe_LIBS   = \
-	$(PATH_TOOL_VCC80X86_LIB)/libcmt.lib \
-	$(PATH_TOOL_VCC80X86_LIB)/oldnames.lib
+   	$(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/libcmt.lib \
+   	$(PATH_TOOL_$(VBOX_VCC_TOOL_STEM)X86_LIB)/oldnames.lib
   else
    TEMPLATE_VBoxRcExe_LIBS   = \
-	$(PATH_TOOL_VCC70_LIB)/libcmt.lib \
-	$(PATH_TOOL_VCC70_LIB)/oldnames.lib
+   	$(PATH_TOOL_VCC70_LIB)/libcmt.lib \
+   	$(PATH_TOOL_VCC70_LIB)/oldnames.lib
   endif
  endif
@@ -2388,5 +2418,5 @@
 ifeq ($(VBOX_LDR_FMT),pe)
 TEMPLATE_VBoxR0_TOOL                = $(VBOX_VCC_TOOL)
- ifdef VBOX_USE_VCC80
+ ifndef VBOX_USE_VCC70
 TEMPLATE_VBoxR0_CXXFLAGS            = -Zi -Zl -GR- -EHs- -GF -W3 -wd4244 -GS- -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP) $(VBOX_VCC_WERR)
  else
@@ -2397,6 +2427,11 @@
 TEMPLATE_VBoxR0_LIBS                = \
 	$(PATH_LIB)/RuntimeR0Stub$(VBOX_SUFF_LIB)
+ ifdef VBOX_USE_WINDDK
+TEMPLATE_VBoxR0_LIBS.x86            = \
+	$(PATH_SDK_$(VBOX_WINDDK)_LIB.x86)/int64.lib
+ else
 TEMPLATE_VBoxR0_LIBS.x86            = \
 	$(PATH_SDK_W2K3DDKX86_LIB)/int64.lib
+ endif
 TEMPLATE_VBoxR0_POST_CMDS           = $(VBOX_SIGN_DRIVER_CMDS)
 endif # pe
@@ -2474,5 +2509,5 @@
  TEMPLATE_VBOXR0DRV_DEFS.x86           = _X86_
  TEMPLATE_VBOXR0DRV_DEFS.amd64         = _AMD64_
- ifdef VBOX_USE_VCC80
+ ifndef VBOX_USE_VCC70
   TEMPLATE_VBOXR0DRV_CXXFLAGS          = -Zi -Zl -GR- -EHs- -GF -Gz -W3 -GS- -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
  else
@@ -2482,4 +2517,8 @@
  TEMPLATE_VBOXR0DRV_LDFLAGS            = -Driver -Subsystem:NATIVE -Incremental:NO -Align:64 -MapInfo:Exports -NoD -Debug
  TEMPLATE_VBOXR0DRV_POST_CMDS          = $(VBOX_SIGN_DRIVER_CMDS)
+ ifdef VBOX_USE_VCC100 # HACK ALERT!
+  TEMPLATE_VBOXR0DRV_CINCS             = $(TOOL_$(VBOX_VCC_TOOL)_CINCS)
+  TEMPLATE_VBOXR0DRV_CXXINCS           = $(TOOL_$(VBOX_VCC_TOOL)_CXXINCS)
+ endif
 endif
 
@@ -2698,5 +2737,5 @@
 	VBOX_SVN_REV_NR=$(VBOX_SVN_REV)
  TEMPLATE_VBOXR3EXE_SDKS               = WINPSDK
- ifdef VBOX_USE_VCC80
+ ifndef VBOX_USE_VCC70
   TEMPLATE_VBOXR3EXE_CXXFLAGS          = -Zi -Zl -GR- -EHsc -GF -MD$(VBOX_VCC_CRT_TYPE) -W3 -wd4065 -wd4244 -wd4996 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
   TEMPLATE_VBOXR3EXE_CXXFLAGS.debug    = -RTCsu
@@ -2722,4 +2761,8 @@
 	$(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/oldnames.lib
  TEMPLATE_VBOXR3EXE_POST_CMDS          = $(VBOX_SIGN_IMAGE_CMDS)
+ ifdef VBOX_USE_VCC100 # HACK ALERT!
+  TEMPLATE_VBOXR3EXE_CINCS.win         = $(TOOL_$(VBOX_VCC_TOOL)_CINCS)
+  TEMPLATE_VBOXR3EXE_CXXINCS.win       = $(TOOL_$(VBOX_VCC_TOOL)_CXXINCS)
+ endif
 
 else # the gcc guys
@@ -3143,9 +3186,9 @@
 
 ifeq ($(KBUILD_TARGET),win)
- TEMPLATE_VBOXMAINEXE_SDKS               = WINPSDK W2K3DDK
+ TEMPLATE_VBOXMAINEXE_SDKS               = WINPSDK $(VBOX_WINDDK)
  # Note: C4250 is the dominance warning, see r32789.
  #       C4065 is about default only switches.
  #       C4996 is about deprected function (CRT only?).
- ifdef VBOX_USE_VCC80
+ ifndef VBOX_USE_VCC70
   TEMPLATE_VBOXMAINEXE_TOOL              = $(VBOX_VCC_TOOL)
   TEMPLATE_VBOXMAINEXE_CXXFLAGS          = -Zi -Zl -GR -EHsc -GF -MD$(VBOX_VCC_CRT_TYPE) -W3 -wd4065 -wd4996 -wd4250 -Zc:wchar_t- $(VBOX_VCC_OPT) $(VBOX_VCC_FP)
@@ -3177,4 +3220,8 @@
 	$(PATH_TOOL_$(VBOX_VCC_TOOL)_ATLMFC_LIB)/atls$(VBOX_VCC_CRT_TYPE).lib
  TEMPLATE_VBOXMAINEXE_POST_CMDS          = $(VBOX_SIGN_IMAGE_CMDS)
+ ifdef VBOX_USE_VCC100 # HACK ALERT!
+  TEMPLATE_VBOXMAINEXE_CINCS             = $(TOOL_$(VBOX_VCC_TOOL)_CINCS)
+  TEMPLATE_VBOXMAINEXE_CXXINCS           = $(TOOL_$(VBOX_VCC_TOOL)_CXXINCS)
+ endif
 
 else # the GCC guys:
@@ -3467,5 +3514,5 @@
      $(QMAKE_PRL_DEFINES)
   ## @todo VCC70 flags?
-  ifdef VBOX_USE_VCC80
+  ifndef VBOX_USE_VCC70
    TEMPLATE_VBOXQT4GUIEXE_CXXFLAGS = \
 	-nologo -Zm200 -W3 -MD -Zi -EHsc -Zc:wchar_t-
@@ -3496,4 +3543,8 @@
   endif
   TEMPLATE_VBOXQT4GUIEXE_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
+ ifdef VBOX_USE_VCC100 # HACK ALERT!
+  TEMPLATE_VBOXQT4GUIEXE_CINCS   = $(TOOL_$(VBOX_VCC_TOOL)_CINCS)
+  TEMPLATE_VBOXQT4GUIEXE_CXXINCS = $(TOOL_$(VBOX_VCC_TOOL)_CXXINCS)
+ endif
 
  else # the gcc guys:
@@ -3634,16 +3685,14 @@
 TEMPLATE_VBOXBLDPROG_DEFS                = IN_RING3
 ifeq ($(KBUILD_HOST),win)
- ifeq ($(KBUILD_HOST_ARCH),x86)
-  ifdef VBOX_USE_VCC80
-   TEMPLATE_VBOXBLDPROG_TOOL             = VCC80X86
-  else
-   TEMPLATE_VBOXBLDPROG_TOOL             = VCC70
-  endif
-   TEMPLATE_VBOXBLDPROG_SDKS             = WIN32SDK
+ ifndef VBOX_USE_VCC70
+  TEMPLATE_VBOXBLDPROG_TOOL            := $(VBOX_VCC_TOOL_STEM)$(toupper $(KBUILD_HOST_ARCH))
+  TEMPLATE_VBOXBLDPROG_SDKS            := $(if-expr "$(KBUILD_HOST_ARCH)" == "x86",WIN32SDK,WIN64SDK)
+ else if1of ($(KBUILD_HOST_ARCH), x86)
+  TEMPLATE_VBOXBLDPROG_TOOL            := VCC70
+  TEMPLATE_VBOXBLDPROG_SDKS            := WIN32SDK
  else
-  TEMPLATE_VBOXBLDPROG_TOOL              = VCC80AMD64
-  TEMPLATE_VBOXBLDPROG_SDKS              = WIN64SDK
- endif
- ifneq ($(TEMPLATE_VBOXBLDPROG_TOOL),VCC70)
+  $(error VBOX_USE_VCC70 does not work with KBUILD_HOST_ARCH=$(KBUILD_HOST_ARCH) because the compiler only does 32-bit x86)
+ endif
+ ifndef VBOX_USE_VCC70
   TEMPLATE_VBOXBLDPROG_CXXFLAGS          = -Zi -Zl -GR- -EHs- -GF -MT$(VBOX_VCC_CRT_TYPE) -W3 -wd4996 -Zc:wchar_t-
   TEMPLATE_VBOXBLDPROG_CXXFLAGS.debug    = -RTCsu
@@ -3765,7 +3814,9 @@
 #
 ifneq ($(KBUILD_HOST),win)
- TOOL_VCC80X86_RC   := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
- TOOL_VCC80AMD64_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
- TOOL_VCC70_RC      := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
+ TOOL_VCC100X86_RC   := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
+ TOOL_VCC100AMD64_RC := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
+ TOOL_VCC80X86_RC    := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
+ TOOL_VCC80AMD64_RC  := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
+ TOOL_VCC70_RC       := $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/rc.exe
  WIN32_MC = $(EXEC_X86_WIN32) $(PATH_DEVTOOLS)/win.x86/bin/mc.exe
 else
@@ -3975,8 +4026,8 @@
 TEMPLATE_VBOXGUESTR0_EXTENDS     = VBOXR0DRV
 TEMPLATE_VBOXGUESTR0_INST        = $(INST_ADDITIONS)
-TEMPLATE_VBOXGUESTR0_SDKS.win.x86   = WIN32SDK W2K3DDK
-TEMPLATE_VBOXGUESTR0_SDKS.win.amd64 = W2K3DDK WINPSDKINCS
+TEMPLATE_VBOXGUESTR0_SDKS.win.x86   = WIN32SDK $(VBOX_WINDDK)
+TEMPLATE_VBOXGUESTR0_SDKS.win.amd64 = $(VBOX_WINDDK) WINPSDKINCS
 TEMPLATE_VBOXGUESTR0_LIBS.win.x86   = \
-	$(PATH_SDK_W2K3DDK_LIB)/int64.lib
+	$(PATH_SDK_$(VBOX_WINDDK)_LIB)/int64.lib
 TEMPLATE_VBOXGUESTR0_DEFS        = $(TEMPLATE_VBOXR0DRV_DEFS) IN_GUEST IN_GUEST_R0
 ifeq ($(KBUILD_TARGET),solaris) # No VBI for the guest additions yet.
Index: /trunk/src/VBox/Runtime/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Runtime/Makefile.kmk	(revision 30227)
+++ /trunk/src/VBox/Runtime/Makefile.kmk	(revision 30228)
@@ -182,5 +182,5 @@
 RuntimeR3_TEMPLATE      = VBoxR3Static
 RuntimeR3_SDKS          = VBOX_LIBXML2 VBOX_BOOST
-RuntimeR3_SDKS.win      = WINPSDK W2K3DDK
+RuntimeR3_SDKS.win      = WINPSDK $(VBOX_WINDDK)
 RuntimeR3_DEFS          = IN_RT_R3 IN_SUP_R3 LDR_WITH_NATIVE LDR_WITH_ELF32 LDR_WITH_PE RT_WITH_VBOX RT_NO_GIP
 #RuntimeR3_DEFS         += RTMEM_WRAP_TO_EF_APIS
@@ -994,5 +994,5 @@
  VBoxRT_SDKS                  += VBOX_LIBCURL
 endif
-VBoxRT_SDKS.win                = WINPSDK W2K3DDK VBOX_NTDLL
+VBoxRT_SDKS.win                = WINPSDK $(VBOX_WINDDK) VBOX_NTDLL
 if1of ($(KBUILD_TARGET)$(VBOX_WITH_HARDENING), darwin win)
 VBoxRT_INST                    = $(INST_DLL) $(INST_TESTCASE)
@@ -1074,6 +1074,6 @@
 endif
 VBoxRT_LIBS.win                = \
-	$(PATH_SDK_W2K3DDK_LIB)/vccomsup.lib \
-	$(PATH_SDK_W2K3DDK_LIB)/wbemuuid.lib
+	$(PATH_SDK_$(VBOX_WINDDK)_LIB)/vccomsup.lib \
+	$(PATH_SDK_$(VBOX_WINDDK)_LIB)/wbemuuid.lib
 VBoxRT_LDFLAGS.darwin          = -framework IOKit -framework CoreFoundation -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxRT.dylib
 ifdef VBOX_USE_VCC80
@@ -1320,5 +1320,5 @@
 #
 RuntimeR0Drv_TEMPLATE   = VBOXR0DRV
-RuntimeR0Drv_SDKS.win   = W2K3DDK WINPSDKINCS
+RuntimeR0Drv_SDKS.win   = $(VBOX_WINDDK) WINPSDKINCS
 RuntimeR0Drv_DEFS       = IN_RT_R0 RT_WITH_VBOX RT_WITHOUT_NOCRT_WRAPPERS RT_NO_EXPORT_SYMBOL
 RuntimeR0Drv_DEFS.win   = IN_SUP_R0
