diff -ru orig/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c work/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c
--- orig/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c	2011-12-19 07:01:10 -0600
+++ work/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c	2012-01-05 21:41:15 -0600
@@ -156,7 +156,7 @@
     static LPCSTR aValueNames[] = {"OpenGLVendorName", "OpenGLDriverName"};
     char *pBufPos = pBuf;
     DWORD cbBufRemain = cbBuf, cbTotal = 0;
-    HKEY hKey;
+    HKEY hKey, hSubkey;
     DWORD dwIndex = 0;
     int i;
     int rc = VINF_SUCCESS;
@@ -190,15 +190,22 @@
             continue;
         }
 
+        lRc = RegOpenKeyEx(hKey,
+                NameBuf,
+                0, /* reserved*/
+                KEY_READ,
+                &hSubkey);
+        if (ERROR_SUCCESS != lRc)
+        {
+            crDebug("RegOpenKeyEx 2 failed, %d", lRc);
+            return VERR_OPEN_FAILED;
+        }
+
         for (i = 0; i < RT_ELEMENTS(aValueNames); ++i)
         {
             DWORD cbCur = cbBufRemain;
-            lRc = RegGetValueA(hKey, NameBuf, aValueNames[i], RRF_RT_REG_MULTI_SZ,
-                    NULL, /* LPDWORD pdwType */
-                    pBufPos,
-                    &cbCur);
-            /* exclude second null termination */
-            --cbCur;
+            lRc = RegQueryValueExA(hSubkey, aValueNames[i], NULL, NULL,
+                (PBYTE)pBufPos, &cbCur);
             if (ERROR_MORE_DATA == lRc)
             {
                 rc = VERR_BUFFER_OVERFLOW;
@@ -221,8 +228,12 @@
             cbTotal += cbCur;
             CRASSERT(cbBufRemain < UINT32_MAX/2);
         }
+
+        RegCloseKey(hSubkey);
     }
 
+    RegCloseKey(hKey);
+
     if (cbTotal)
     {
         /* include second null termination */
