[PATCH 1/3] ntdll: Implement RtlGetProductInfo and use it for GetProductInfo

Detlef Riekenberg wine.dev at web.de
Sat May 26 18:55:46 CDT 2012


The "Games for Windows Client" installer produced a FIXME for
RtlGetProductInfo and the function is too simple to be a stub.

The wrapper in kernel32 is not needed.
RtlGetProductInfo and GetProductInfo have the same signature and
tests show the same results.

The installer is linked here:
http://www.xbox.com/en-GB/LIVE/PC/DownloadClient

--
By by ... Detlef
---
 dlls/kernel32/kernel32.spec |    2 +-
 dlls/kernel32/version.c     |   15 ---------------
 dlls/ntdll/version.c        |   16 ++++++++++++++--
 include/winnt.h             |    5 ++++-
 4 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index e5a70cf..f94a513 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -609,7 +609,7 @@
 @ stdcall GetProcessTimes(long ptr ptr ptr ptr)
 @ stdcall GetProcessVersion(long)
 @ stdcall GetProcessWorkingSetSize(long ptr ptr)
-@ stdcall GetProductInfo(long long long long ptr)
+@ stdcall GetProductInfo(long long long long ptr) ntdll.RtlGetProductInfo
 @ stub GetProductName
 @ stdcall GetProfileIntA(str str long)
 @ stdcall GetProfileIntW(wstr wstr long)
diff --git a/dlls/kernel32/version.c b/dlls/kernel32/version.c
index 9f21435..162da8f 100644
--- a/dlls/kernel32/version.c
+++ b/dlls/kernel32/version.c
@@ -186,18 +186,3 @@ DWORD WINAPI SetTermsrvAppInstallMode(BOOL bInstallMode)
     FIXME("(%d): stub\n", bInstallMode);
     return 0;
 }
-
-/***********************************************************************
- *           GetProductInfo       (KERNEL32.@)
- *
- * Gives info about the current Windows product type, in a format compatible
- * with the given Windows version
- *
- * Returns TRUE if the input is valid, FALSE otherwise
- */
-BOOL WINAPI GetProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion,
-                           DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType)
-{
-    return RtlGetProductInfo(dwOSMajorVersion, dwOSMinorVersion,
-                             dwSpMajorVersion, dwSpMinorVersion, pdwReturnedProductType);
-}
diff --git a/dlls/ntdll/version.c b/dlls/ntdll/version.c
index 0185d7f..ee4cff2 100644
--- a/dlls/ntdll/version.c
+++ b/dlls/ntdll/version.c
@@ -554,10 +554,22 @@ done:
 BOOLEAN WINAPI RtlGetProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion,
                                  DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType)
 {
-    FIXME("(%d,%d,%d,%d,%p): stub\n", dwOSMajorVersion, dwOSMinorVersion,
+    TRACE("(%d, %d, %d, %d, %p)\n", dwOSMajorVersion, dwOSMinorVersion,
           dwSpMajorVersion, dwSpMinorVersion, pdwReturnedProductType);
 
-    *pdwReturnedProductType = PRODUCT_ULTIMATE_N;
+    if (!pdwReturnedProductType)
+        return FALSE;
+
+    if (dwOSMajorVersion < 6)
+    {
+        *pdwReturnedProductType = PRODUCT_UNDEFINED;
+        return FALSE;
+    }
+
+    if (current_version->wProductType == VER_NT_WORKSTATION)
+        *pdwReturnedProductType = PRODUCT_ULTIMATE_N;
+    else
+        *pdwReturnedProductType = PRODUCT_STANDARD_SERVER;
 
     return TRUE;
 }
diff --git a/include/winnt.h b/include/winnt.h
index 02c92e6..bed2a19 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -1976,7 +1976,7 @@ NTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*);
 #define PRODUCT_DATACENTER_SERVER                       0x00000008
 #define PRODUCT_DATACENTER_SERVER_CORE                  0x0000000C
 #define PRODUCT_DATACENTER_SERVER_CORE_V                0x00000027
-#define PRODUCT_SERVER_V                                0x00000025
+#define PRODUCT_EMBEDDED                                0x00000041
 #define PRODUCT_ENTERPRISE                              0x00000004
 #define PRODUCT_ENTERPRISE_N                            0x0000001B
 #define PRODUCT_ENTERPRISE_SERVER                       0x0000000A
@@ -1992,8 +1992,11 @@ NTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*);
 #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT        0x0000001E
 #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING         0x00000020
 #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY          0x0000001F
+#define PRODUCT_PROFESSIONAL                            0x00000030
+#define PRODUCT_PROFESSIONAL_N                          0x00000031
 #define PRODUCT_SERVER_FOR_SMALLBUSINESS                0x00000018
 #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V              0x00000023
+#define PRODUCT_SERVER_V                                0x00000025
 #define PRODUCT_SMALLBUSINESS_SERVER                    0x00000009
 #define PRODUCT_STANDARD_SERVER                         0x00000007
 #define PRODUCT_STANDARD_SERVER_CORE                    0x0000000D
-- 
1.7.5.4




More information about the wine-patches mailing list