Определение кросс-платформенной совместимости Windows 10 может быть сложной задачей из-за неточностей в доступных функциях, таких как IsWindows10OrGreater(). В этой статье рассматривается кроссплатформенный и многоверсионный подход для решения этой проблемы.
Самый надежный метод получения истинной версии ОС — вызов RtlGetVersion. Эта функция позволяет избежать прокладок совместимости, используемых GetVersionEx и VerifyVersionInfo. Доступ к нему можно получить посредством динамического связывания, как показано в следующем фрагменте кода:
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;
}
Этот метод возвращает ожидаемые результаты в Windows 10, даже при отсутствии манифеста.
Вместо того, чтобы полагаться на версии ОС, рекомендуется реализовывать решения на основе функций. Это обеспечивает более гибкий и перспективный подход.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3