X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fxml_windows.c;h=455a0deee4d2d70450fcfbc5806b2b4b62ff2267;hp=12cc922f7a7f0aa38d9b53930dbd01491459cf12;hb=1d944a3bf8f65ac8043e83c28b7dbd62722a2055;hpb=1c142989478a3e670fbb6953d98adfa988441e5b diff --git a/src/xml_windows.c b/src/xml_windows.c index 12cc922f..455a0dee 100644 --- a/src/xml_windows.c +++ b/src/xml_windows.c @@ -432,6 +432,7 @@ set_info_from_software_hive(struct windows_info_ctx *ctx, s64 major_version = -1; s64 minor_version = -1; tchar *version_string; + tchar *build_string; /* Image flags */ copy_registry_string(ctx, regf, version_key, T("EditionID"), @@ -494,8 +495,28 @@ set_info_from_software_hive(struct windows_info_ctx *ctx, } /* Build number */ - copy_registry_string(ctx, regf, version_key, T("CurrentBuild"), - T("WINDOWS/VERSION/BUILD")); + + /* Note: "CurrentBuild" is marked as obsolete in Windows XP registries + * (example value: "1.511.1 () (Obsolete data - do not use)"), and + * "CurrentBuildNumber" contains the correct value. But oddly enough, + * it is "CurrentBuild" that contains the correct value on *later* + * versions of Windows. */ + if (get_string_from_registry(ctx, regf, version_key, T("CurrentBuild"), + &build_string)) + { + if (tstrchr(build_string, T('.'))) { + FREE(build_string); + build_string = NULL; + get_string_from_registry(ctx, regf, version_key, + T("CurrentBuildNumber"), + &build_string); + } + if (build_string) { + set_string_property(ctx, T("WINDOWS/VERSION/BUILD"), + build_string); + FREE(build_string); + } + } } /* Gather the default language from the SYSTEM registry hive. */