aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/version/os_windows.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-05-03 22:44:21 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-05-03 22:44:21 +0200
commit43d81aed6092b5ea2d82507c3099411690fa8687 (patch)
treee5141ec155967c53830b7a5e87986135df968b48 /version/os_windows.go
parentfirewall: DNS is TCP and UDP (diff)
downloadwireguard-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/os_windows.go')
-rw-r--r--version/os_windows.go51
1 files changed, 28 insertions, 23 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)
}