github.com/nullne/docker@v1.13.0-rc1/pkg/platform/architecture_windows.go (about) 1 package platform 2 3 import ( 4 "fmt" 5 "syscall" 6 "unsafe" 7 ) 8 9 var ( 10 modkernel32 = syscall.NewLazyDLL("kernel32.dll") 11 procGetSystemInfo = modkernel32.NewProc("GetSystemInfo") 12 ) 13 14 // see http://msdn.microsoft.com/en-us/library/windows/desktop/ms724958(v=vs.85).aspx 15 type systeminfo struct { 16 wProcessorArchitecture uint16 17 wReserved uint16 18 dwPageSize uint32 19 lpMinimumApplicationAddress uintptr 20 lpMaximumApplicationAddress uintptr 21 dwActiveProcessorMask uintptr 22 dwNumberOfProcessors uint32 23 dwProcessorType uint32 24 dwAllocationGranularity uint32 25 wProcessorLevel uint16 26 wProcessorRevision uint16 27 } 28 29 // Constants 30 const ( 31 ProcessorArchitecture64 = 9 // PROCESSOR_ARCHITECTURE_AMD64 32 ProcessorArchitectureIA64 = 6 // PROCESSOR_ARCHITECTURE_IA64 33 ProcessorArchitecture32 = 0 // PROCESSOR_ARCHITECTURE_INTEL 34 ProcessorArchitectureArm = 5 // PROCESSOR_ARCHITECTURE_ARM 35 ) 36 37 // runtimeArchitecture gets the name of the current architecture (x86, x86_64, …) 38 func runtimeArchitecture() (string, error) { 39 var sysinfo systeminfo 40 syscall.Syscall(procGetSystemInfo.Addr(), 1, uintptr(unsafe.Pointer(&sysinfo)), 0, 0) 41 switch sysinfo.wProcessorArchitecture { 42 case ProcessorArchitecture64, ProcessorArchitectureIA64: 43 return "x86_64", nil 44 case ProcessorArchitecture32: 45 return "i686", nil 46 case ProcessorArchitectureArm: 47 return "arm", nil 48 default: 49 return "", fmt.Errorf("Unknown processor architecture") 50 } 51 } 52 53 // NumProcs returns the number of processors on the system 54 func NumProcs() uint32 { 55 var sysinfo systeminfo 56 syscall.Syscall(procGetSystemInfo.Addr(), 1, uintptr(unsafe.Pointer(&sysinfo)), 0, 0) 57 return sysinfo.dwNumberOfProcessors 58 }