[PATCH 2/5] shcore: Add IsOS().

Nikolay Sivov nsivov at codeweavers.com
Fri Nov 30 04:50:08 CST 2018


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/shcore/main.c      | 120 ++++++++++++++++++++++++++++++++++++++++
 dlls/shcore/shcore.spec |   2 +-
 2 files changed, 121 insertions(+), 1 deletion(-)

diff --git a/dlls/shcore/main.c b/dlls/shcore/main.c
index 45df1a8f45..a53a9849e8 100644
--- a/dlls/shcore/main.c
+++ b/dlls/shcore/main.c
@@ -2315,3 +2315,123 @@ LONG WINAPI SHQueryInfoKeyW(HKEY hkey, DWORD *subkeys, DWORD *subkey_max, DWORD
 
     return RegQueryInfoKeyW(hkey, NULL, NULL, NULL, subkeys, subkey_max, NULL, values, value_max, NULL, NULL, NULL);
 }
+
+/*************************************************************************
+ * IsOS        [SHCORE.@]
+ */
+BOOL WINAPI IsOS(DWORD feature)
+{
+    DWORD platform, majorv, minorv;
+    OSVERSIONINFOA osvi;
+
+    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
+    if (!GetVersionExA(&osvi))
+        return FALSE;
+
+    majorv = osvi.dwMajorVersion;
+    minorv = osvi.dwMinorVersion;
+    platform = osvi.dwPlatformId;
+
+#define ISOS_RETURN(x) \
+    TRACE("(0x%x) ret=%d\n",feature,(x)); \
+    return (x);
+
+    switch(feature)  {
+    case OS_WIN32SORGREATER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32s
+                 || platform == VER_PLATFORM_WIN32_WINDOWS)
+    case OS_NT:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+    case OS_WIN95ORGREATER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS)
+    case OS_NT4ORGREATER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 4)
+    case OS_WIN2000ORGREATER_ALT:
+    case OS_WIN2000ORGREATER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5)
+    case OS_WIN98ORGREATER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS && minorv >= 10)
+    case OS_WIN98_GOLD:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS && minorv == 10)
+    case OS_WIN2000PRO:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5)
+    case OS_WIN2000SERVER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && (minorv == 0 || minorv == 1))
+    case OS_WIN2000ADVSERVER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && (minorv == 0 || minorv == 1))
+    case OS_WIN2000DATACENTER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && (minorv == 0 || minorv == 1))
+    case OS_WIN2000TERMINAL:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && (minorv == 0 || minorv == 1))
+    case OS_EMBEDDED:
+        FIXME("(OS_EMBEDDED) What should we return here?\n");
+        return FALSE;
+    case OS_TERMINALCLIENT:
+        FIXME("(OS_TERMINALCLIENT) What should we return here?\n");
+        return FALSE;
+    case OS_TERMINALREMOTEADMIN:
+        FIXME("(OS_TERMINALREMOTEADMIN) What should we return here?\n");
+        return FALSE;
+    case OS_WIN95_GOLD:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS && minorv == 0)
+    case OS_MEORGREATER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_WINDOWS && minorv >= 90)
+    case OS_XPORGREATER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5 && minorv >= 1)
+    case OS_HOME:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5 && minorv >= 1)
+    case OS_PROFESSIONAL:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+    case OS_DATACENTER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+    case OS_ADVSERVER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5)
+    case OS_SERVER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+    case OS_TERMINALSERVER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+    case OS_PERSONALTERMINALSERVER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && minorv >= 1 && majorv >= 5)
+    case OS_FASTUSERSWITCHING:
+        FIXME("(OS_FASTUSERSWITCHING) What should we return here?\n");
+        return TRUE;
+    case OS_WELCOMELOGONUI:
+        FIXME("(OS_WELCOMELOGONUI) What should we return here?\n");
+        return FALSE;
+    case OS_DOMAINMEMBER:
+        FIXME("(OS_DOMAINMEMBER) What should we return here?\n");
+        return TRUE;
+    case OS_ANYSERVER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+    case OS_WOW6432:
+        {
+            BOOL is_wow64;
+            IsWow64Process(GetCurrentProcess(), &is_wow64);
+            return is_wow64;
+        }
+    case OS_WEBSERVER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+    case OS_SMALLBUSINESSSERVER:
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)
+    case OS_TABLETPC:
+        FIXME("(OS_TABLETPC) What should we return here?\n");
+        return FALSE;
+    case OS_SERVERADMINUI:
+        FIXME("(OS_SERVERADMINUI) What should we return here?\n");
+        return FALSE;
+    case OS_MEDIACENTER:
+        FIXME("(OS_MEDIACENTER) What should we return here?\n");
+        return FALSE;
+    case OS_APPLIANCE:
+        FIXME("(OS_APPLIANCE) What should we return here?\n");
+        return FALSE;
+    case 0x25: /*OS_VISTAORGREATER*/
+        ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 6)
+    }
+
+#undef ISOS_RETURN
+
+    WARN("(0x%x) unknown parameter\n", feature);
+
+    return FALSE;
+}
diff --git a/dlls/shcore/shcore.spec b/dlls/shcore/shcore.spec
index c0150cbc90..6ad1297989 100644
--- a/dlls/shcore/shcore.spec
+++ b/dlls/shcore/shcore.spec
@@ -25,7 +25,7 @@
 @ stdcall IUnknown_QueryService(ptr ptr ptr ptr)
 @ stdcall IUnknown_Set(ptr ptr)
 @ stdcall IUnknown_SetSite(ptr ptr)
-@ stdcall IsOS(long) shlwapi.IsOS
+@ stdcall IsOS(long)
 @ stub RegisterScaleChangeEvent
 @ stub RegisterScaleChangeNotifications
 @ stub RevokeScaleChangeNotifications
-- 
2.19.2




More information about the wine-devel mailing list