#winapi
#winapi
Вопрос:
Я хочу получить версию сборки в Windows 10 с помощью WINAPI. Текущая версия окна: 10.0.19042.685
Я пытался получить его с помощью запросов WMI.
select Version, BuildNumber from Win32_OperatingSystem.
-> Version: 10.0.19042, BuildNumber: 19042
Я попытался получить его, вызвав RtlGetVersion().
HMODULE hMod = ::GetModuleHandleW(L"ntdll.dll");
if (hMod) {
typedef NTSTATUS(WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOEXW);
RtlGetVersionPtr fxPtr = (RtlGetVersionPtr)::GetProcAddress(hMod, "RtlGetVersion");
if (fxPtr != nullptr) {
RTL_OSVERSIONINFOEXW rovi = { 0 };
rovi.dwOSVersionInfoSize = sizeof(rovi);
if (0 == fxPtr(amp;rovi)) {
printf("dwMajorVersion: %lun", rovi.dwMajorVersion);
printf("dwMinorVersion: %lun", rovi.dwMinorVersion);
printf("dwBuildNumber: %lun", rovi.dwBuildNumber);
}
}
}
dwMajorVersion: 10
dwMinorVersion: 0
dwBuildNumber: 19042
Мне не удалось получить номер редакции с помощью WMI query и RtlGetVerion() API.
Я хочу получить ‘685’ из ‘10.0.19042.685’.
Как я могу получить версию сборки Windows, номер редакции с помощью WINAPI?
Комментарии:
1. Вы проверили
GetProductInfo
? Это может бытьdwSpMinorVersion
поле, которое оно возвращает. У меня нет удобного доступа к машине для тестирования.2. 19042 — это правильный номер сборки. 685 — это «Обновление версии сборки», которое, насколько я знаю, можно прочитать только из значения реестра
HKLMSoftwareMicrosoftWindows NTCurrentVersionUBR
.3. Значения реестра
HKLMSoftwareMicrosoftWindows NTCurrentVersionUBR
можно легко изменить. Я обнаружил, что версия файла «ntoskrnl.exe » это версия ядра. Спасибо за подсказку.4. Реестр @snh действительно может быть не самым надежным, но другая информация, такая как удобная для пользователя версия, может быть найдена только там, например
ReleaseID
. =2004
под тем же ключом.5. Бывает ли ситуация, когда номер редакции в версии продукта ntoskrnl.exe не соответствует значению реестра UBR (при условии, что UBR не был изменен)?