Bug #690: Implementation of VerSetConditionMask
Vincent Béron
vberon at mecano.gme.usherb.ca
Fri May 17 16:51:15 CDT 2002
Changelog:
- Implementation of VerSetConditionMask.
Vincent
-------------- next part --------------
diff -urN wine-orig/dlls/ntdll/nt.c wine/dlls/ntdll/nt.c
--- wine-orig/dlls/ntdll/nt.c Fri May 10 08:40:00 2002
+++ wine/dlls/ntdll/nt.c Fri May 17 17:34:22 2002
@@ -744,6 +744,41 @@
ULONGLONG WINAPI VerSetConditionMask( ULONGLONG dwlConditionMask, DWORD dwTypeBitMask,
BYTE dwConditionMask)
{
- FIXME("%llx %lu %u\n", dwlConditionMask, dwTypeBitMask, dwConditionMask);
- return dwlConditionMask;
+ /* Verify that the condition is really cleared before the bitwise OR */
+ switch(dwTypeBitMask) {
+ case VER_MINORVERSION:
+ dwlConditionMask &= 0xfffffffffffffff8LL;
+ dwlConditionMask |= dwConditionMask << 0*3;
+ return dwlConditionMask;
+ case VER_MAJORVERSION:
+ dwlConditionMask &= 0xffffffffffffffc7LL;
+ dwlConditionMask |= dwConditionMask << 1*3;
+ return dwlConditionMask;
+ case VER_BUILDNUMBER:
+ dwlConditionMask &= 0xfffffffffffffe3fLL;
+ dwlConditionMask |= dwConditionMask << 2*3;
+ return dwlConditionMask;
+ case VER_PLATFORMID:
+ dwlConditionMask &= 0xfffffffffffff1ffLL;
+ dwlConditionMask |= dwConditionMask << 3*3;
+ return dwlConditionMask;
+ case VER_SERVICEPACKMINOR:
+ dwlConditionMask &= 0xffffffffffff8fffLL;
+ dwlConditionMask |= dwConditionMask << 4*3;
+ return dwlConditionMask;
+ case VER_SERVICEPACKMAJOR:
+ dwlConditionMask &= 0xfffffffffffc7fffLL;
+ dwlConditionMask |= dwConditionMask << 5*3;
+ return dwlConditionMask;
+ case VER_SUITENAME:
+ dwlConditionMask &= 0xffffffffffe3ffffLL;
+ dwlConditionMask |= dwConditionMask << 6*3;
+ return dwlConditionMask;
+ case VER_PRODUCT_TYPE:
+ dwlConditionMask &= 0xffffffffff1fffffLL;
+ dwlConditionMask |= dwConditionMask << 7*3;
+ return dwlConditionMask;
+ default:
+ return dwlConditionMask;
+ }
}
diff -urN wine-orig/include/winbase.h wine/include/winbase.h
--- wine-orig/include/winbase.h Sat May 11 20:04:31 2002
+++ wine/include/winbase.h Fri May 17 13:12:21 2002
@@ -838,9 +838,77 @@
DECL_WINELIB_TYPE_AW(POSVERSIONINFO)
DECL_WINELIB_TYPE_AW(LPOSVERSIONINFO)
-#define VER_PLATFORM_WIN32s 0
-#define VER_PLATFORM_WIN32_WINDOWS 1
-#define VER_PLATFORM_WIN32_NT 2
+typedef struct {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ CHAR szCSDVersion[128];
+ WORD wServicePackMajor;
+ WORD wServicePackMinor;
+ WORD wSuiteMask;
+ BYTE wProductType;
+ BYTE wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
+typedef struct {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ WCHAR szCSDVersion[128];
+ WORD wServicePackMajor;
+ WORD wServicePackMinor;
+ WORD wSuiteMask;
+ BYTE wProductType;
+ BYTE wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
+
+DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX)
+DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX)
+DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX)
+
+ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
+
+#define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
+
+#define VER_PLATFORM_WIN32s 0
+#define VER_PLATFORM_WIN32_WINDOWS 1
+#define VER_PLATFORM_WIN32_NT 2
+
+#define VER_MINORVERSION 0x00000001
+#define VER_MAJORVERSION 0x00000002
+#define VER_BUILDNUMBER 0x00000004
+#define VER_PLATFORMID 0x00000008
+#define VER_SERVICEPACKMINOR 0x00000010
+#define VER_SERVICEPACKMAJOR 0x00000020
+#define VER_SUITENAME 0x00000040
+#define VER_PRODUCT_TYPE 0x00000080
+
+#define VER_NT_WORKSTATION 1
+#define VER_NT_DOMAIN_CONTROLLER 2
+#define VER_NT_SERVER 3
+
+#define VER_SUITE_SMALLBUSINESS 0x00000001
+#define VER_SUITE_ENTERPRISE 0x00000002
+#define VER_SUITE_BACKOFFICE 0x00000004
+#define VER_SUITE_COMMUNICATIONS 0x00000008
+#define VER_SUITE_TERMINAL 0x00000010
+#define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
+#define VER_SUITE_EMBEDDEDNT 0x00000040
+#define VER_SUITE_DATACENTER 0x00000080
+#define VER_SUITE_SINGLEUSERTS 0x00000100
+#define VER_SUITE_PERSONAL 0x00000200
+
+#define VER_EQUAL 1
+#define VER_GREATER 2
+#define VER_GREATER_EQUAL 3
+#define VER_LESS 4
+#define VER_LESS_EQUAL 5
+#define VER_AND 6
+#define VER_OR 7
typedef struct tagCOMSTAT
{
More information about the wine-patches
mailing list