Author: hbelusca
Date: Thu Nov  1 12:52:34 2012
New Revision: 57662
URL: 
http://svn.reactos.org/svn/reactos?rev=57662&view=rev
Log:
[KERNEL32/NTDLL]
- Move the ReactOS-specific workaround described in
http://jira.reactos.org/browse/CORE-6611 and 
http://jira.reactos.org/browse/CORE-4620
  from kernel32 to ntdll for using it by RtlGetVersion, in order to :
  * still having it available in user-mode only,
  * and having VerifyVersionInfo (and its Rtl counter-part) working properly.
[RTL/NTOSKRNL]
- Code formatting.
- Use a defined-constant instead of a hard-coded value.
Modified:
    trunk/reactos/dll/ntdll/rtl/version.c
    trunk/reactos/dll/win32/kernel32/client/version.c
    trunk/reactos/lib/rtl/version.c
    trunk/reactos/ntoskrnl/mm/ARM3/procsup.c
    trunk/reactos/ntoskrnl/rtl/misc.c
Modified: trunk/reactos/dll/ntdll/rtl/version.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/ntdll/rtl/version.c?re…
==============================================================================
--- trunk/reactos/dll/ntdll/rtl/version.c [iso-8859-1] (original)
+++ trunk/reactos/dll/ntdll/rtl/version.c [iso-8859-1] Thu Nov  1 12:52:34 2012
@@ -8,13 +8,64 @@
  *                  Created 01/11/98
  */
-/* INCLUDES ****************************************************************/
+/* INCLUDES *******************************************************************/
 #include <ntdll.h>
 #define NDEBUG
 #include <debug.h>
-/* FUNCTIONS ****************************************************************/
+/* FUNCTIONS ******************************************************************/
+
+/* HACK: ReactOS specific changes, see bug-reports CORE-6611 and CORE-4620 (aka. #5003)
*/
+static VOID NTAPI
+SetRosSpecificInfo(IN OUT PRTL_OSVERSIONINFOEXW VersionInformation)
+{
+    CHAR Buffer[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + sizeof(ULONG)];
+    PKEY_VALUE_PARTIAL_INFORMATION kvpInfo = (PVOID)Buffer;
+    OBJECT_ATTRIBUTES ObjectAttributes;
+    ULONG ReportAsWorkstation = 0;
+    HANDLE hKey;
+    ULONG Length;
+    NTSTATUS Status;
+    UNICODE_STRING KeyName =
RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\ReactOS\\Settings\\Version");
+    UNICODE_STRING ValName = RTL_CONSTANT_STRING(L"ReportAsWorkstation");
+
+    InitializeObjectAttributes(&ObjectAttributes,
+                               &KeyName,
+                               OBJ_OPENIF | OBJ_CASE_INSENSITIVE,
+                               NULL,
+                               NULL);
+
+    /* Don't change anything if the key doesn't exist */
+    Status = NtOpenKey(&hKey, KEY_READ, &ObjectAttributes);
+    if (NT_SUCCESS(Status))
+    {
+        /* Get the value from the registry and make sure it's a 32-bit value */
+        Status = NtQueryValueKey(hKey,
+                                 &ValName,
+                                 KeyValuePartialInformation,
+                                 kvpInfo,
+                                 sizeof(Buffer),
+                                 &Length);
+        if (NT_SUCCESS(Status) &&
+            (kvpInfo->Type == REG_DWORD) &&
+            (kvpInfo->DataLength == sizeof(ULONG)))
+        {
+            /* Is the value set? */
+            ReportAsWorkstation = *(PULONG)kvpInfo->Data;
+            if ((VersionInformation->wProductType == VER_NT_SERVER) &&
+                (ReportAsWorkstation != 0))
+            {
+                /* It is, modify the product type to report a workstation */
+                VersionInformation->wProductType = VER_NT_WORKSTATION;
+                DPRINT1("We modified the reported OS from NtProductServer to
NtProductWinNt\n");
+            }
+        }
+
+        /* Close the handle */
+        NtClose(hKey);
+    }
+}
 /**********************************************************************
  * NAME                                                        EXPORTED
@@ -40,12 +91,11 @@
  *
  * @implemented
  */
-
 BOOLEAN NTAPI
 RtlGetNtProductType(PNT_PRODUCT_TYPE ProductType)
 {
-  *ProductType = SharedUserData->NtProductType;
-  return(TRUE);
+    *ProductType = SharedUserData->NtProductType;
+    return TRUE;
 }
 /**********************************************************************
@@ -71,7 +121,6 @@
  *
  * @implemented
  */
-
 VOID NTAPI
 RtlGetNtVersionNumbers(OUT LPDWORD pdwMajorVersion,
                        OUT LPDWORD pdwMinorVersion,
@@ -101,49 +150,56 @@
 }
 /*
-* @implemented
-*/
+ * @implemented
+ * @note User-mode version of RtlGetVersion in ntoskrnl/rtl/misc.c
+ */
 NTSTATUS NTAPI
-RtlGetVersion(RTL_OSVERSIONINFOW *Info)
-{
-   LONG i, MaxLength;
-
-   if (Info->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOW) ||
-       Info->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
-   {
-      PPEB Peb = NtCurrentPeb();
-
-      Info->dwMajorVersion = Peb->OSMajorVersion;
-      Info->dwMinorVersion = Peb->OSMinorVersion;
-      Info->dwBuildNumber = Peb->OSBuildNumber;
-      Info->dwPlatformId = Peb->OSPlatformId;
-      RtlZeroMemory(Info->szCSDVersion, sizeof(Info->szCSDVersion));
-      if(((Peb->OSCSDVersion >> 8) & 0xFF) != 0)
-      {
-        MaxLength = (sizeof(Info->szCSDVersion) / sizeof(Info->szCSDVersion[0])) -
1;
-        i = _snwprintf(Info->szCSDVersion,
-                       MaxLength,
-                       L"Service Pack %d",
-                       ((Peb->OSCSDVersion >> 8) & 0xFF));
-        if (i < 0)
+RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
+{
+    LONG i, MaxLength;
+
+    if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOW) ||
+        lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
+    {
+        PPEB Peb = NtCurrentPeb();
+
+        lpVersionInformation->dwMajorVersion = Peb->OSMajorVersion;
+        lpVersionInformation->dwMinorVersion = Peb->OSMinorVersion;
+        lpVersionInformation->dwBuildNumber = Peb->OSBuildNumber;
+        lpVersionInformation->dwPlatformId = Peb->OSPlatformId;
+        RtlZeroMemory(lpVersionInformation->szCSDVersion,
sizeof(lpVersionInformation->szCSDVersion));
+
+        if(((Peb->OSCSDVersion >> 8) & 0xFF) != 0)
         {
-           /* null-terminate if it was overflowed */
-           Info->szCSDVersion[MaxLength] = L'\0';
+            MaxLength = (sizeof(lpVersionInformation->szCSDVersion) /
sizeof(lpVersionInformation->szCSDVersion[0])) - 1;
+            i = _snwprintf(lpVersionInformation->szCSDVersion,
+                           MaxLength,
+                           L"Service Pack %d",
+                           ((Peb->OSCSDVersion >> 8) & 0xFF));
+            if (i < 0)
+            {
+                /* Null-terminate if it was overflowed */
+                lpVersionInformation->szCSDVersion[MaxLength] = L'\0';
+            }
         }
-      }
-      if (Info->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
-      {
-         RTL_OSVERSIONINFOEXW *InfoEx = (RTL_OSVERSIONINFOEXW *)Info;
-         InfoEx->wServicePackMajor = (Peb->OSCSDVersion >> 8) & 0xFF;
-         InfoEx->wServicePackMinor = Peb->OSCSDVersion & 0xFF;
-         InfoEx->wSuiteMask = SharedUserData->SuiteMask & 0xFFFF;
-         InfoEx->wProductType = SharedUserData->NtProductType;
-      }
-
-      return STATUS_SUCCESS;
-   }
-
-   return STATUS_INVALID_PARAMETER;
+
+        if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
+        {
+            PRTL_OSVERSIONINFOEXW InfoEx = (PRTL_OSVERSIONINFOEXW)lpVersionInformation;
+            InfoEx->wServicePackMajor = (Peb->OSCSDVersion >> 8) & 0xFF;
+            InfoEx->wServicePackMinor = Peb->OSCSDVersion & 0xFF;
+            InfoEx->wSuiteMask = SharedUserData->SuiteMask & 0xFFFF;
+            InfoEx->wProductType = SharedUserData->NtProductType;
+            InfoEx->wReserved = 0;
+
+            /* HACK: ReactOS specific changes, see bug-reports CORE-6611 and CORE-4620
(aka. #5003) */
+            SetRosSpecificInfo(InfoEx);
+        }
+
+        return STATUS_SUCCESS;
+    }
+
+    return STATUS_INVALID_PARAMETER;
 }
 /* EOF */
Modified: trunk/reactos/dll/win32/kernel32/client/version.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/version.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/version.c [iso-8859-1] Thu Nov  1 12:52:34
2012
@@ -13,57 +13,6 @@
 #include <debug.h>
 /* FUNCTIONS ******************************************************************/
-
-VOID
-NTAPI
-SetRosSpecificInfo(IN LPOSVERSIONINFOEXW VersionInformation)
-{
-    CHAR Buffer[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + sizeof(DWORD)];
-    PKEY_VALUE_PARTIAL_INFORMATION kvpInfo = (PVOID)Buffer;
-    OBJECT_ATTRIBUTES ObjectAttributes;
-    DWORD ReportAsWorkstation = 0;
-    HANDLE hKey;
-    DWORD dwSize;
-    NTSTATUS Status;
-    UNICODE_STRING KeyName =
RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\ReactOS\\Settings\\Version");
-    UNICODE_STRING ValName = RTL_CONSTANT_STRING(L"ReportAsWorkstation");
-
-    InitializeObjectAttributes(&ObjectAttributes,
-                               &KeyName,
-                               OBJ_OPENIF | OBJ_CASE_INSENSITIVE,
-                               NULL,
-                               NULL);
-
-    /* Don't change anything if the key doesn't exist */
-    Status = NtOpenKey(&hKey, KEY_READ, &ObjectAttributes);
-    if (NT_SUCCESS(Status))
-    {
-        /* Get the value from the registry and make sure it's a 32-bit value */
-        Status = NtQueryValueKey(hKey,
-                                 &ValName,
-                                 KeyValuePartialInformation,
-                                 kvpInfo,
-                                 sizeof(Buffer),
-                                 &dwSize);
-        if ((NT_SUCCESS(Status)) &&
-            (kvpInfo->Type == REG_DWORD) &&
-            (kvpInfo->DataLength == sizeof(DWORD)))
-        {
-            /* Is the value set? */
-            ReportAsWorkstation = *(PULONG)kvpInfo->Data;
-            if ((VersionInformation->wProductType == VER_NT_SERVER) &&
-                (ReportAsWorkstation))
-            {
-                /* It is, modify the product type to report a workstation */
-                VersionInformation->wProductType = VER_NT_WORKSTATION;
-                DPRINT1("We modified the reported OS from NtProductServer to
NtProductWinNt\n");
-            }
-        }
-
-        /* Close the handle */
-        NtClose(hKey);
-     }
-}
 /*
  * @implemented
@@ -104,9 +53,6 @@
         {
             lpVersionInformationEx = (PVOID)lpVersionInformation;
             lpVersionInformationEx->wReserved = 0;
-
-            /* ReactOS specific changes */
-            SetRosSpecificInfo(lpVersionInformationEx);
         }
         return TRUE;
Modified: trunk/reactos/lib/rtl/version.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/version.c?rev=5766…
==============================================================================
--- trunk/reactos/lib/rtl/version.c [iso-8859-1] (original)
+++ trunk/reactos/lib/rtl/version.c [iso-8859-1] Thu Nov  1 12:52:34 2012
@@ -4,7 +4,7 @@
  * PURPOSE:         Runtime code
  * FILE:            lib/rtl/version.c
  * PROGRAMERS:      Filip Navara
- *                  Hermes BELUSCA - MAITO
+ *                  Hermes Belusca-Maito (hermes.belusca(a)sfr.fr)
  */
 /* INCLUDES *****************************************************************/
@@ -18,9 +18,7 @@
 NTSTATUS
 NTAPI
-RtlGetVersion(
-    OUT PRTL_OSVERSIONINFOW lpVersionInformation
-    );
+RtlGetVersion(OUT PRTL_OSVERSIONINFOW lpVersionInformation);
 /* FUNCTIONS ****************************************************************/
@@ -54,11 +52,9 @@
 */
 NTSTATUS
 NTAPI
-RtlVerifyVersionInfo(
-    IN PRTL_OSVERSIONINFOEXW VersionInfo,
-    IN ULONG TypeMask,
-    IN ULONGLONG ConditionMask
-    )
+RtlVerifyVersionInfo(IN PRTL_OSVERSIONINFOEXW VersionInfo,
+                     IN ULONG TypeMask,
+                     IN ULONGLONG ConditionMask)
 {
     RTL_OSVERSIONINFOEXW ver;
     NTSTATUS status;
Modified: trunk/reactos/ntoskrnl/mm/ARM3/procsup.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/procsup.c…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/procsup.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/procsup.c [iso-8859-1] Thu Nov  1 12:52:34 2012
@@ -678,7 +678,7 @@
         Peb->OSMajorVersion = NtMajorVersion;
         Peb->OSMinorVersion = NtMinorVersion;
         Peb->OSBuildNumber = (USHORT)(NtBuildNumber & 0x3FFF);
-        Peb->OSPlatformId = 2; /* VER_PLATFORM_WIN32_NT */
+        Peb->OSPlatformId = VER_PLATFORM_WIN32_NT;
         Peb->OSCSDVersion = (USHORT)CmNtCSDVersion;
         //
Modified: trunk/reactos/ntoskrnl/rtl/misc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/rtl/misc.c?rev=57…
==============================================================================
--- trunk/reactos/ntoskrnl/rtl/misc.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/rtl/misc.c [iso-8859-1] Thu Nov  1 12:52:34 2012
@@ -29,9 +29,8 @@
 NTAPI
 RtlGetNtGlobalFlags(VOID)
 {
-       return(NtGlobalFlag);
+    return NtGlobalFlag;
 }
-
 /*
 * @implemented
@@ -39,41 +38,46 @@
 NTSTATUS NTAPI
 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
 {
-   LONG i;
-   ULONG MaxLength;
-   if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOW) ||
-       lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
-   {
-      lpVersionInformation->dwMajorVersion = NtMajorVersion;
-      lpVersionInformation->dwMinorVersion = NtMinorVersion;
-      lpVersionInformation->dwBuildNumber = NtBuildNumber;
-      lpVersionInformation->dwPlatformId = VER_PLATFORM_WIN32_NT;
-      RtlZeroMemory(lpVersionInformation->szCSDVersion,
sizeof(lpVersionInformation->szCSDVersion));
-      if(((CmNtCSDVersion >> 8) & 0xFF) != 0)
-      {
-        MaxLength = (sizeof(lpVersionInformation->szCSDVersion) /
sizeof(lpVersionInformation->szCSDVersion[0])) - 1;
-        i = _snwprintf(lpVersionInformation->szCSDVersion,
-                       MaxLength,
-                       L"Service Pack %d",
-                       ((CmNtCSDVersion >> 8) & 0xFF));
-        if (i < 0)
+    LONG i;
+    ULONG MaxLength;
+
+    if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOW) ||
+        lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
+    {
+        lpVersionInformation->dwMajorVersion = NtMajorVersion;
+        lpVersionInformation->dwMinorVersion = NtMinorVersion;
+        lpVersionInformation->dwBuildNumber = NtBuildNumber;
+        lpVersionInformation->dwPlatformId = VER_PLATFORM_WIN32_NT;
+        RtlZeroMemory(lpVersionInformation->szCSDVersion,
sizeof(lpVersionInformation->szCSDVersion));
+
+        if(((CmNtCSDVersion >> 8) & 0xFF) != 0)
         {
-           /* null-terminate if it was overflowed */
-           lpVersionInformation->szCSDVersion[MaxLength] = L'\0';
+            MaxLength = (sizeof(lpVersionInformation->szCSDVersion) /
sizeof(lpVersionInformation->szCSDVersion[0])) - 1;
+            i = _snwprintf(lpVersionInformation->szCSDVersion,
+                           MaxLength,
+                           L"Service Pack %d",
+                           ((CmNtCSDVersion >> 8) & 0xFF));
+            if (i < 0)
+            {
+                /* Null-terminate if it was overflowed */
+                lpVersionInformation->szCSDVersion[MaxLength] = L'\0';
+            }
         }
-      }
-      if (lpVersionInformation->dwOSVersionInfoSize == sizeof(OSVERSIONINFOEXW))
-      {
-         RTL_OSVERSIONINFOEXW *InfoEx = (RTL_OSVERSIONINFOEXW *)lpVersionInformation;
-         InfoEx->wServicePackMajor = (USHORT)(CmNtCSDVersion >> 8) & 0xFF;
-         InfoEx->wServicePackMinor = (USHORT)(CmNtCSDVersion & 0xFF);
-         InfoEx->wSuiteMask = (USHORT)(SharedUserData->SuiteMask & 0xFFFF);
-         InfoEx->wProductType = SharedUserData->NtProductType;
-      }
-      return STATUS_SUCCESS;
-   }
+        if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
+        {
+            PRTL_OSVERSIONINFOEXW InfoEx = (PRTL_OSVERSIONINFOEXW)lpVersionInformation;
+            InfoEx->wServicePackMajor = (USHORT)(CmNtCSDVersion >> 8) &
0xFF;
+            InfoEx->wServicePackMinor = (USHORT)(CmNtCSDVersion & 0xFF);
+            InfoEx->wSuiteMask = (USHORT)(SharedUserData->SuiteMask & 0xFFFF);
+            InfoEx->wProductType = SharedUserData->NtProductType;
+            InfoEx->wReserved = 0;
+        }
-   return STATUS_INVALID_PARAMETER;
+        return STATUS_SUCCESS;
+    }
+
+    return STATUS_INVALID_PARAMETER;
 }
+/* EOF */