[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).

svn path=/trunk/; revision=59717
This commit is contained in:
Alex Ionescu 2013-08-13 03:14:22 +00:00
parent f762bc3a74
commit 1f8570be62

View file

@ -33,37 +33,21 @@ RtlGetNtGlobalFlags(VOID)
}
/*
* @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;
lpVersionInformation->dwBuildNumber = NtBuildNumber & 0x3FFF;
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';
}
}
/* Check if this is the extended version */
if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
{
PRTL_OSVERSIONINFOEXW InfoEx = (PRTL_OSVERSIONINFOEXW)lpVersionInformation;
@ -74,10 +58,8 @@ RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
InfoEx->wReserved = 0;
}
/* Always succeed */
return STATUS_SUCCESS;
}
return STATUS_INVALID_PARAMETER;
}
/* EOF */