Sync with trunk (r48042), except win32k/ntuser/cursoricon.c
[reactos.git] / ntoskrnl / rtl / misc.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: ntoskrnl/rtl/misc.c
5 * PURPOSE: Various functions
6 *
7 * PROGRAMMERS:
8 */
9
10 /* INCLUDES *****************************************************************/
11
12 #include <ntoskrnl.h>
13 #define NDEBUG
14 #include <debug.h>
15
16 /* GLOBALS *******************************************************************/
17
18 extern ULONG NtGlobalFlag;
19 extern ULONG NtMajorVersion;
20 extern ULONG NtMinorVersion;
21 extern ULONG NtOSCSDVersion;
22
23 /* FUNCTIONS *****************************************************************/
24
25 /*
26 * @implemented
27 */
28 ULONG
29 NTAPI
30 RtlGetNtGlobalFlags(VOID)
31 {
32 return(NtGlobalFlag);
33 }
34
35
36 /*
37 * @implemented
38 */
39 NTSTATUS NTAPI
40 RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
41 {
42 LONG i;
43 ULONG MaxLength;
44 if (lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOW) ||
45 lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW))
46 {
47 lpVersionInformation->dwMajorVersion = NtMajorVersion;
48 lpVersionInformation->dwMinorVersion = NtMinorVersion;
49 lpVersionInformation->dwBuildNumber = NtBuildNumber;
50 lpVersionInformation->dwPlatformId = VER_PLATFORM_WIN32_NT;
51 RtlZeroMemory(lpVersionInformation->szCSDVersion, sizeof(lpVersionInformation->szCSDVersion));
52 if(((CmNtCSDVersion >> 8) & 0xFF) != 0)
53 {
54 MaxLength = (sizeof(lpVersionInformation->szCSDVersion) / sizeof(lpVersionInformation->szCSDVersion[0])) - 1;
55 i = _snwprintf(lpVersionInformation->szCSDVersion,
56 MaxLength,
57 L"Service Pack %d",
58 ((CmNtCSDVersion >> 8) & 0xFF));
59 if (i < 0)
60 {
61 /* null-terminate if it was overflowed */
62 lpVersionInformation->szCSDVersion[MaxLength] = L'\0';
63 }
64 }
65 if (lpVersionInformation->dwOSVersionInfoSize == sizeof(OSVERSIONINFOEXW))
66 {
67 RTL_OSVERSIONINFOEXW *InfoEx = (RTL_OSVERSIONINFOEXW *)lpVersionInformation;
68 InfoEx->wServicePackMajor = (USHORT)(CmNtCSDVersion >> 8) & 0xFF;
69 InfoEx->wServicePackMinor = (USHORT)(CmNtCSDVersion & 0xFF);
70 InfoEx->wSuiteMask = (USHORT)SharedUserData->SuiteMask;
71 InfoEx->wProductType = SharedUserData->NtProductType;
72 }
73
74 return STATUS_SUCCESS;
75 }
76
77 return STATUS_INVALID_PARAMETER;
78 }
79