| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // Copyright 2019 Yunion
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- //go:build linux
- // +build linux
- package isoutils
- import (
- "fmt"
- "github.com/Microsoft/go-winio/wim"
- "yunion.io/x/log"
- "yunion.io/x/pkg/util/imagetools"
- )
- // ========== 7. 保留Windows版本识别函数(适配新结构) ==========
- func DetectWindowsEdition(r *ISOFileReader) (*ISOInfo, error) {
- wimFile, err := r.GetFile("sources/install.wim")
- if err != nil {
- return nil, err
- }
- wim, err := wim.NewReader(wimFile.NewReader())
- if err != nil {
- return nil, err
- }
- result := &ISOInfo{}
- for _, image := range wim.Image {
- version := fmt.Sprintf("%d.%d.%d", image.Windows.Version.Major, image.Windows.Version.Minor, image.Windows.Version.Build)
- if image.Windows != nil {
- if image.Windows.Arch == 9 {
- result.Arch = "x86_64"
- } else if image.Windows.Arch == 12 {
- result.Arch = "arm64"
- } else if image.Windows.Arch == 0 {
- result.Arch = "x86"
- }
- result.Distro = imagetools.OS_DIST_WINDOWS
- result.Language = image.Windows.DefaultLanguage
- switch fmt.Sprintf("%d.%d", image.Windows.Version.Major, image.Windows.Version.Minor) {
- case "6.0":
- result.Version = "Windows Vista"
- case "6.1":
- result.Version = "Windows 7"
- case "6.2":
- result.Version = "Windows 8"
- case "6.3":
- result.Version = "Windows 8.1"
- case "10.0":
- if image.Windows.Version.Build >= 27500 {
- result.Version = "Windows 12"
- } else if image.Windows.Version.Build >= 22000 {
- result.Version = "Windows 11"
- } else {
- result.Version = "Windows 10"
- }
- }
- if image.Windows.ProductType == "ServerNT" {
- result.Distro = imagetools.OS_DIST_WINDOWS_SERVER
- switch fmt.Sprintf("%d.%d", image.Windows.Version.Major, image.Windows.Version.Minor) {
- case "6.0":
- result.Version = "Windows Server 2008"
- case "6.1":
- result.Version = "Windows Server 2008 R2"
- case "6.2":
- result.Version = "Windows Server 2012"
- case "6.3":
- result.Version = "Windows Server 2012 R2"
- case "10.0":
- if image.Windows.Version.Build >= 26040 {
- result.Version = "Windows Server 2025"
- } else if image.Windows.Version.Build >= 20348 {
- result.Version = "Windows Server 2022"
- } else if image.Windows.Version.Build >= 17763 {
- result.Version = "Windows Server 2019"
- } else if image.Windows.Version.Build >= 14393 {
- result.Version = "Windows Server 2016"
- }
- }
- }
- log.Debugf("识别到 %s 版本: %s -> %s", result.Distro, version, result.Version)
- break
- }
- }
- return result, nil
- }
|