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  }