Home > Article > Backend Development > How Can I Accurately Detect Windows 10 Version From a Cross-Platform Perspective?
Cross-Platform Detection of Windows 10 Version
The task of accurately detecting Windows 10 from a cross-platform perspective can be challenging due to inconsistencies in version reporting across different Windows versions. While the IsWindows10OrGreater() function is readily available, its absence in earlier Windows versions creates a hurdle.
Retrieving True OS Version
An effective solution lies in bypassing compatibility shims and directly accessing the underlying OS version information. This can be achieved using the RtlGetVersion function from the Windows Driver Development Kit (DDK).
Runtime Dynamic Linking
To avoid dependency on the DDK, runtime dynamic linking can be employed as demonstrated below:
<code class="C++">typedef LONG NTSTATUS, *PNTSTATUS; #define STATUS_SUCCESS (0x00000000) typedef NTSTATUS (WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW); RTL_OSVERSIONINFOW GetRealOSVersion() { HMODULE hMod = ::GetModuleHandleW(L"ntdll.dll"); if (hMod) { RtlGetVersionPtr fxPtr = (RtlGetVersionPtr)::GetProcAddress(hMod, "RtlGetVersion"); if (fxPtr != nullptr) { RTL_OSVERSIONINFOW rovi = { 0 }; rovi.dwOSVersionInfoSize = sizeof(rovi); if ( STATUS_SUCCESS == fxPtr(&rovi) ) { return rovi; } } } RTL_OSVERSIONINFOW rovi = { 0 }; return rovi; }</code>
By calling this function, the true OS version can be retrieved, regardless of any compatibility shims or manifest settings.
Alternative Approach
Consider approaching the problem from the perspective of identifying supported features rather than solely relying on OS versions. This approach provides greater flexibility and adaptability to future updates and enhancements.
The above is the detailed content of How Can I Accurately Detect Windows 10 Version From a Cross-Platform Perspective?. For more information, please follow other related articles on the PHP Chinese website!