/* FUNCTIONS ****************************************************************/
-
-PPEB
-STDCALL
-RtlpCurrentPeb(VOID)
-{
- return NtCurrentPeb();
-}
-
-
-/*
+/**********************************************************************
+ * NAME EXPORTED
+ * RtlGetNtProductType
+ *
+ * DESCRIPTION
+ * Retrieves the OS product type.
+ *
+ * ARGUMENTS
+ * ProductType Pointer to the product type variable.
+ *
+ * RETURN VALUE
+ * TRUE if successful, otherwise FALSE
+ *
+ * NOTE
+ * ProductType can be one of the following values:
+ * 1 Workstation (Winnt)
+ * 2 Server (Lanmannt)
+ * 3 Advanced Server (Servernt)
+ *
+ * REVISIONS
+ * 2000-08-10 ekohl
+ *
* @implemented
*/
-VOID STDCALL
-RtlAcquirePebLock(VOID)
+
+BOOLEAN STDCALL
+RtlGetNtProductType(PNT_PRODUCT_TYPE ProductType)
{
- PPEB Peb = NtCurrentPeb ();
- Peb->FastPebLockRoutine (Peb->FastPebLock);
+ *ProductType = SharedUserData->NtProductType;
+ 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
-RtlReleasePebLock(VOID)
+
+void STDCALL
+RtlGetNtVersionNumbers(LPDWORD major, LPDWORD minor, LPDWORD build)
{
- PPEB Peb = NtCurrentPeb ();
- Peb->FastPebUnlockRoutine (Peb->FastPebLock);
+ 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)
+ {
+ if (pPeb->OSMinorVersion <= 5)
+ *minor = pPeb->OSMinorVersion < 1 ? 1 : pPeb->OSMinorVersion;
+ else
+ *minor = pPeb->OSMinorVersion;
+ }
+
+ if (build)
+ {
+ /* FIXME: Does anybody know the real formula? */
+ *build = (0xF0000000 | pPeb->OSBuildNumber);
+ }
}
-
/*
* @implemented
*/
return STATUS_INVALID_PARAMETER;
}
-/*
- * @implemented
- */
-VOID
-STDCALL
-RtlExitUserThread(NTSTATUS Status)
-{
- /* Call the Loader and tell him to notify the DLLs */
- LdrShutdownThread();
-
- /* Shut us down */
- NtCurrentTeb()->FreeStackOnTermination = TRUE;
- NtTerminateThread(NtCurrentThread(), Status);
-}
-
/* EOF */