import (
"fmt"
+ "internal/syscall/windows"
"cmd/internal/telemetry/counter"
-
- "golang.org/x/sys/windows"
)
func incrementVersionCounters() {
- v := windows.RtlGetVersion()
- counter.Inc(fmt.Sprintf("go/platform/host/windows/major-version:%d", v.MajorVersion))
- counter.Inc(fmt.Sprintf("go/platform/host/windows/version:%d-%d", v.MajorVersion, v.MinorVersion))
- counter.Inc(fmt.Sprintf("go/platform/host/windows/build:%d", v.BuildNumber))
+ major, minor, build := windows.Version()
+ counter.Inc(fmt.Sprintf("go/platform/host/windows/major-version:%d", major))
+ counter.Inc(fmt.Sprintf("go/platform/host/windows/version:%d-%d", major, minor))
+ counter.Inc(fmt.Sprintf("go/platform/host/windows/build:%d", build))
}
import (
"fmt"
-
- "golang.org/x/sys/windows"
+ "internal/syscall/windows"
)
// Version returns the OS version name/number.
func Version() (string, error) {
- info := windows.RtlGetVersion()
- return fmt.Sprintf("%d.%d.%d", info.MajorVersion, info.MinorVersion, info.BuildNumber), nil
+ major, minor, build := windows.Version()
+ return fmt.Sprintf("%d.%d.%d", major, minor, build), nil
}
// According to documentation, RtlGetVersion function always succeeds.
//sys rtlGetVersion(info *_OSVERSIONINFOW) = ntdll.RtlGetVersion
-// version retrieves the major, minor, and build version numbers
+// Version retrieves the major, minor, and build version numbers
// of the current Windows OS from the RtlGetVersion API.
-func version() (major, minor, build uint32) {
+func Version() (major, minor, build uint32) {
info := _OSVERSIONINFOW{}
info.osVersionInfoSize = uint32(unsafe.Sizeof(info))
rtlGetVersion(&info)
s, err := WSASocket(syscall.AF_INET, syscall.SOCK_STREAM, syscall.IPPROTO_TCP, nil, 0, WSA_FLAG_NO_HANDLE_INHERIT)
if err != nil {
// Fallback to checking the Windows version.
- major, _, build := version()
+ major, _, build := Version()
supportTCPKeepAliveIdle = major >= 10 && build >= 16299
supportTCPKeepAliveInterval = major >= 10 && build >= 16299
supportTCPKeepAliveCount = major >= 10 && build >= 15063
// Windows version supports the TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS.
// The minimal requirement is Windows 10.0.16299.
var SupportTCPInitialRTONoSYNRetransmissions = sync.OnceValue(func() bool {
- major, _, build := version()
+ major, _, build := Version()
return major >= 10 && build >= 16299
})