diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-05-03 22:44:21 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-05-03 22:44:21 +0200 |
commit | 43d81aed6092b5ea2d82507c3099411690fa8687 (patch) | |
tree | e5141ec155967c53830b7a5e87986135df968b48 /version | |
parent | firewall: DNS is TCP and UDP (diff) | |
download | wireguard-windows-43d81aed6092b5ea2d82507c3099411690fa8687.tar.xz wireguard-windows-43d81aed6092b5ea2d82507c3099411690fa8687.zip |
version: expose OsVersion for firewall
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'version')
-rw-r--r-- | version/os_windows.go | 51 | ||||
-rw-r--r-- | version/zsyscall_windows.go | 12 |
2 files changed, 37 insertions, 26 deletions
diff --git a/version/os_windows.go b/version/os_windows.go index ac4e8957..81147ea5 100644 --- a/version/os_windows.go +++ b/version/os_windows.go @@ -10,34 +10,39 @@ import ( "unsafe" ) -type osVersionInfo struct { +type OsVersionInfo struct { osVersionInfoSize uint32 - majorVersion uint32 - minorVersion uint32 - buildNumber uint32 - platformId uint32 - csdVersion [128]uint16 - servicePackMajor uint16 - servicePackMinor uint16 - suiteMask uint16 - productType byte + MajorVersion uint32 + MinorVersion uint32 + BuildNumber uint32 + PlatformId uint32 + CsdVersion [128]uint16 + ServicePackMajor uint16 + ServicePackMinor uint16 + SuiteMask uint16 + ProductType byte reserved byte } -//sys rtlGetVersion(versionInfo *osVersionInfo) (nterr uint32) = ntdll.RtlGetVersion +//sys rtlGetVersion(versionInfo *OsVersionInfo) (err error) [failretval!=0] = ntdll.RtlGetVersion + +func OsVersion() (versionInfo OsVersionInfo, err error) { + versionInfo.osVersionInfoSize = uint32(unsafe.Sizeof(versionInfo)) + err = rtlGetVersion(&versionInfo) + return +} func OsName() string { - windowsVersion := "Windows Unknown" - versionInfo := &osVersionInfo{osVersionInfoSize: uint32(unsafe.Sizeof(osVersionInfo{}))} - if rtlGetVersion(versionInfo) == 0 { - winType := "" - switch versionInfo.productType { - case 3: - winType = " Server" - case 2: - winType = " Controller" - } - windowsVersion = fmt.Sprintf("Windows%s %d.%d.%d", winType, versionInfo.majorVersion, versionInfo.minorVersion, versionInfo.buildNumber) + versionInfo, err := OsVersion() + if err != nil { + return "Windows Unknown" + } + winType := "" + switch versionInfo.ProductType { + case 3: + winType = " Server" + case 2: + winType = " Controller" } - return windowsVersion + return fmt.Sprintf("Windows%s %d.%d.%d", winType, versionInfo.MajorVersion, versionInfo.MinorVersion, versionInfo.BuildNumber) } diff --git a/version/zsyscall_windows.go b/version/zsyscall_windows.go index ef4e11d7..711d76da 100644 --- a/version/zsyscall_windows.go +++ b/version/zsyscall_windows.go @@ -46,9 +46,15 @@ var ( procVerQueryValueW = modversion.NewProc("VerQueryValueW") ) -func rtlGetVersion(versionInfo *osVersionInfo) (nterr uint32) { - r0, _, _ := syscall.Syscall(procRtlGetVersion.Addr(), 1, uintptr(unsafe.Pointer(versionInfo)), 0, 0) - nterr = uint32(r0) +func rtlGetVersion(versionInfo *OsVersionInfo) (err error) { + r1, _, e1 := syscall.Syscall(procRtlGetVersion.Addr(), 1, uintptr(unsafe.Pointer(versionInfo)), 0, 0) + if r1 != 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } return } |