branch update for HEAD-2003091401
[reactos.git] / lib / ntdll / rtl / misc.c
index 4b9cf76..bc01605 100644 (file)
@@ -11,6 +11,7 @@
 
 /* INCLUDES *****************************************************************/
 
+#include <windows.h>
 #include <ddk/ntddk.h>
 #include <ntdll/rtl.h>
 
@@ -65,6 +66,8 @@ RtlGetNtGlobalFlags(VOID)
  *
  * REVISIONS
  *     2000-08-10 ekohl
+ *
+ * @implemented
  */
 
 BOOLEAN STDCALL
@@ -74,4 +77,51 @@ RtlGetNtProductType(PNT_PRODUCT_TYPE ProductType)
   return(TRUE);
 }
 
+/**********************************************************************
+ * NAME                                                        EXPORTED
+ *     RtlGetNtVersionNumbers
+ *
+ * DESCRIPTION
+ *     Get the version numbers of the run time library.
+ *
+ * ARGUMENTS
+ *     major [OUT]     Destination for the Major version
+ *     minor [OUT]     Destination for the Minor version
+ *     build [OUT]     Destination for the Build version
+ *
+ * RETURN VALUE
+ *     Nothing.
+ *
+ * NOTE
+ *     Introduced in Windows XP (NT5.1)
+ *
+ * @implemented
+ */
+
+void STDCALL
+RtlGetNtVersionNumbers(LPDWORD major, LPDWORD minor, LPDWORD build)
+{
+       PPEB pPeb = NtCurrentPeb();
+
+       if (major)
+       {
+               /* msvcrt.dll as released with XP Home fails in DLLMain() if the
+                * major version is not 5. So, we should never set a version < 5 ...
+                * This makes sense since this call didn't exist before XP anyway.
+                */
+               *major = pPeb->OSMajorVersion < 5 ? 5 : pPeb->OSMajorVersion;
+       }
+
+       if (minor)
+       {
+               *minor = pPeb->OSMinorVersion;
+       }
+
+       if (build)
+       {
+               /* FIXME: Does anybody know the real formula? */
+               *build = (0xF0000000 | pPeb->OSBuildNumber);
+       }
+}
+
 /* EOF */