Nikolay Sivov : shcore: Add IsOS().
Alexandre Julliard
julliard at winehq.org
Fri Nov 30 14:34:41 CST 2018
Module: wine
Branch: master
Commit: 588b734e35fb7bb6fde089e96c1c21eb11a0c696
URL: https://source.winehq.org/git/wine.git/?a=commit;h=588b734e35fb7bb6fde089e96c1c21eb11a0c696
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri Nov 30 13:50:08 2018 +0300
shcore: Add IsOS().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 45df1a8..c18f9c8 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 c0150cb..6ad1297 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
More information about the wine-cvs
mailing list