From: Pierre Schweitzer Date: Sun, 1 Jan 2017 16:44:40 +0000 (+0000) Subject: [SDK] X-Git-Tag: ReactOS-0.4.4-FOSDEM2017~41 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=47b3314130bf81461b11a37159380763dfe2843f;ds=sidebyside [SDK] Implement the rtlver library with RtlIsNtDdiVersionAvailable(). Will be used later on by BtrFS driver. Reference: https://msdn.microsoft.com/en-us/library/windows/hardware/ff561954(v=vs.85).aspx CORE-12617 svn path=/trunk/; revision=73496 --- diff --git a/reactos/sdk/lib/drivers/CMakeLists.txt b/reactos/sdk/lib/drivers/CMakeLists.txt index a65f6876f5c..0c69feed4ed 100644 --- a/reactos/sdk/lib/drivers/CMakeLists.txt +++ b/reactos/sdk/lib/drivers/CMakeLists.txt @@ -6,4 +6,5 @@ add_subdirectory(ip) add_subdirectory(libusb) add_subdirectory(lwip) add_subdirectory(ntoskrnl_vista) +add_subdirectory(rtlver) add_subdirectory(sound) diff --git a/reactos/sdk/lib/drivers/rtlver/CMakeLists.txt b/reactos/sdk/lib/drivers/rtlver/CMakeLists.txt new file mode 100644 index 00000000000..3b63ea16f0f --- /dev/null +++ b/reactos/sdk/lib/drivers/rtlver/CMakeLists.txt @@ -0,0 +1,7 @@ +add_definitions(-DUNICODE -D_UNICODE -D__NTOSKRNL__ -D_NTOSKRNL_ -D_NTSYSTEM_) + +list(APPEND SOURCE + rtl.c) + +add_library(rtlver ${SOURCE}) +add_dependencies(rtlver xdk) diff --git a/reactos/sdk/lib/drivers/rtlver/rtl.c b/reactos/sdk/lib/drivers/rtlver/rtl.c new file mode 100644 index 00000000000..6259abb1325 --- /dev/null +++ b/reactos/sdk/lib/drivers/rtlver/rtl.c @@ -0,0 +1,41 @@ +/* + * PROJECT: ReactOS Kernel - Vista+ APIs + * LICENSE: GPL v2 - See COPYING in the top level directory + * FILE: lib/drivers/ntoskrnl_vista/rtl.c + * PURPOSE: Implementation of RtlIsNtDdiVersionAvailable and RtlIsServicePackVersionInstalled + * PROGRAMMERS: Pierre Schweitzer + */ + +#include +#include + +BOOLEAN +WdmlibRtlIsNtDdiVersionAvailable( + _In_ ULONG Version) +{ + UNICODE_STRING ImportName; + ULONG Major, Minor, Current; + BOOLEAN (NTAPI *pRtlIsNtDdiVersionAvailable)(ULONG Version); + + /* Try to use ntoskrnl version if available */ + RtlInitUnicodeString(&ImportName, L"RtlIsNtDdiVersionAvailable"); + pRtlIsNtDdiVersionAvailable = MmGetSystemRoutineAddress(&ImportName); + if (pRtlIsNtDdiVersionAvailable) + { + return pRtlIsNtDdiVersionAvailable(Version); + } + + /* Only provide OS version. No SP */ + if (SPVER(Version) || SUBVER(Version)) + { + return FALSE; + } + + /* Compute the version and compare */ + Major = 0; + Minor = 0; + PsGetVersion(&Major, &Minor, NULL, NULL); + Current = (Minor + (Major << 8)) << 16; + + return (Current >= Version); +}