github.com/iDigitalFlame/xmt@v0.5.4/device/cpu_other_windows_crypt.go (about) 1 //go:build !amd64 && !386 && windows && crypt 2 // +build !amd64,!386,windows,crypt 3 4 // Copyright (C) 2020 - 2023 iDigitalFlame 5 // 6 // This program is free software: you can redistribute it and/or modify 7 // it under the terms of the GNU General Public License as published by 8 // the Free Software Foundation, either version 3 of the License, or 9 // any later version. 10 // 11 // This program is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 // 16 // You should have received a copy of the GNU General Public License 17 // along with this program. If not, see <https://www.gnu.org/licenses/>. 18 // 19 20 package device 21 22 import ( 23 "github.com/iDigitalFlame/xmt/device/winapi/registry" 24 "github.com/iDigitalFlame/xmt/util/crypt" 25 ) 26 27 func isVirtual() bool { 28 // 0x1 - KEY_QUERY_VALUE 29 k, err := registry.Open(registry.KeyLocalMachine, crypt.Get(63), 0x1) // Hardware\Description\System\BIOS 30 if err != nil { 31 return false 32 } 33 r := checkVendorKey(k, crypt.Get(64)) || // BaseBoardManufacturer 34 checkVendorKey(k, crypt.Get(65)) || // BaseBoardProduct 35 checkVendorKey(k, crypt.Get(66)) || // BIOSVendor 36 checkVendorKey(k, crypt.Get(67)) || // SystemManufacturer 37 checkVendorKey(k, crypt.Get(68)) || // SystemFamily 38 checkVendorKey(k, crypt.Get(69)) || // SystemProductName 39 checkVendorKey(k, crypt.Get(70)) // SystemVersion 40 k.Close() 41 return r 42 } 43 func checkVendorKey(k registry.Key, s string) bool { 44 v, _, err := k.String(s) 45 if err != nil || len(v) == 0 { 46 return false 47 } 48 return isKnownVendor([]byte(v)) 49 }