«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как надежно определить версию Windows 10 на разных платформах и версиях?

Как надежно определить версию Windows 10 на разных платформах и версиях?

Опубликовано 21 ноября 2024 г.
Просматривать:361

How to Reliably Detect Windows 10 Version Across Platforms and Versions?

Определение кросс-платформенной и мультиверсионной версии Windows 10

Контекст

Определение кросс-платформенной совместимости 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