|
|
@@ -296,6 +296,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
|
|
//sys coCreateGuid(pguid *GUID) (ret error) = ole32.CoCreateGuid
|
|
|
//sys CoTaskMemFree(address unsafe.Pointer) = ole32.CoTaskMemFree
|
|
|
//sys rtlGetVersion(info *OsVersionInfoEx) (ret error) = ntdll.RtlGetVersion
|
|
|
+//sys rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) = ntdll.RtlGetNtVersionNumbers
|
|
|
|
|
|
// syscall interface implementation for other packages
|
|
|
|
|
|
@@ -1306,8 +1307,8 @@ func (t Token) KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, e
|
|
|
return UTF16ToString((*[(1 << 30) - 1]uint16)(unsafe.Pointer(p))[:]), nil
|
|
|
}
|
|
|
|
|
|
-// RtlGetVersion returns the true version of the underlying operating system, ignoring
|
|
|
-// any manifesting or compatibility layers on top of the win32 layer.
|
|
|
+// RtlGetVersion returns the version of the underlying operating system, ignoring
|
|
|
+// manifest semantics but is affected by the application compatibility layer.
|
|
|
func RtlGetVersion() *OsVersionInfoEx {
|
|
|
info := &OsVersionInfoEx{}
|
|
|
info.osVersionInfoSize = uint32(unsafe.Sizeof(*info))
|
|
|
@@ -1318,3 +1319,11 @@ func RtlGetVersion() *OsVersionInfoEx {
|
|
|
_ = rtlGetVersion(info)
|
|
|
return info
|
|
|
}
|
|
|
+
|
|
|
+// RtlGetNtVersionNumbers returns the version of the underlying operating system,
|
|
|
+// ignoring manifest semantics and the application compatibility layer.
|
|
|
+func RtlGetNtVersionNumbers() (majorVersion, minorVersion, buildNumber uint32) {
|
|
|
+ rtlGetNtVersionNumbers(&majorVersion, &minorVersion, &buildNumber)
|
|
|
+ buildNumber &= 0xffff
|
|
|
+ return
|
|
|
+}
|