2017-01-01 16:44:40 +00:00
|
|
|
/*
|
|
|
|
* PROJECT: ReactOS Kernel - Vista+ APIs
|
|
|
|
* LICENSE: GPL v2 - See COPYING in the top level directory
|
|
|
|
* FILE: lib/drivers/ntoskrnl_vista/rtl.c
|
2021-06-11 12:29:21 +00:00
|
|
|
* PURPOSE: Implementation of RtlIsNtDdiVersionAvailable and RtlIsServicePackVersionInstalled
|
2017-01-01 16:44:40 +00:00
|
|
|
* PROGRAMMERS: Pierre Schweitzer <pierre@reactos.org>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <ntdef.h>
|
|
|
|
#include <ntifs.h>
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|