Author: ion
Date: Tue Aug 13 03:14:22 2013
New Revision: 59717
URL:
http://svn.reactos.org/svn/reactos?rev=59717&view=rev
Log:
[NTOSKRNL]: RtlGetVersion in the kernel does not fail, does not return a CSD version, and
should not be returning negative build numbers. Fix it so that it works as it should (and
anyone that relied on correct build numbers will no longer fail).
Modified:
trunk/reactos/ntoskrnl/rtl/misc.c
Modified: trunk/reactos/ntoskrnl/rtl/misc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/rtl/misc.c?rev=59…
==============================================================================
--- trunk/reactos/ntoskrnl/rtl/misc.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/rtl/misc.c [iso-8859-1] Tue Aug 13 03:14:22 2013
@@ -33,51 +33,33 @@
}
/*
-* @implemented
-*/
-NTSTATUS NTAPI
+ * @implemented
+ */
+NTSTATUS
+NTAPI
RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
{
- LONG i;
- ULONG MaxLength;
+ PAGED_CODE();
- if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOW) ||
- lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
+ /* Return the basics */
+ lpVersionInformation->dwMajorVersion = NtMajorVersion;
+ lpVersionInformation->dwMinorVersion = NtMinorVersion;
+ lpVersionInformation->dwBuildNumber = NtBuildNumber & 0x3FFF;
+ lpVersionInformation->dwPlatformId = VER_PLATFORM_WIN32_NT;
+
+ /* Check if this is the extended version */
+ if (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)
- {
- /* Null-terminate if it was overflowed */
- lpVersionInformation->szCSDVersion[MaxLength] = L'\0';
- }
- }
-
- 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_SUCCESS;
+ 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;
+ /* Always succeed */
+ return STATUS_SUCCESS;
}
/* EOF */