aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2020-10-26 11:36:09 +0000
committerGitHub <noreply@github.com>2020-10-26 11:36:09 +0000
commit6772cb0f3bd66a90eae49ccdf9248d63e88e3bb6 (patch)
tree8fbaa31ad9ad17aaf4d1250344842a63191077d8
parentce35de47e49842cda9b114af6d77a18b8c92eaf7 (diff)
parent05b58bdbb138cce95a7f948837897b40b4369cf2 (diff)
Merge pull request #758 from zhibog/master
Fixed getting windows version. The former function is no longer worki…
-rw-r--r--core/os/os_windows.odin33
-rw-r--r--core/sys/windows/ntdll.odin8
-rw-r--r--core/sys/windows/types.odin25
3 files changed, 37 insertions, 29 deletions
diff --git a/core/os/os_windows.odin b/core/os/os_windows.odin
index 86c4b4df2..a6af811b5 100644
--- a/core/os/os_windows.odin
+++ b/core/os/os_windows.odin
@@ -160,40 +160,39 @@ _alloc_command_line_arguments :: proc() -> []string {
return arg_list;
}
-get_windows_version_ansi :: proc() -> win32.OSVERSIONINFOEXW {
+get_windows_version_w :: proc() -> win32.OSVERSIONINFOEXW {
osvi : win32.OSVERSIONINFOEXW;
- osvi.os_version_info_size = size_of(win32.OSVERSIONINFOEXW);
- win32.GetVersionExW(&osvi);
+ osvi.dwOSVersionInfoSize = size_of(win32.OSVERSIONINFOEXW);
+ win32.RtlGetVersion(&osvi);
return osvi;
}
is_windows_xp :: proc() -> bool {
- osvi := get_windows_version_ansi();
- return (osvi.major_version == 5 && osvi.minor_version == 1);
+ osvi := get_windows_version_w();
+ return (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1);
}
is_windows_vista :: proc() -> bool {
- osvi := get_windows_version_ansi();
- return (osvi.major_version == 6 && osvi.minor_version == 0);
+ osvi := get_windows_version_w();
+ return (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0);
}
is_windows_7 :: proc() -> bool {
- osvi := get_windows_version_ansi();
- return (osvi.major_version == 6 && osvi.minor_version == 1);
+ osvi := get_windows_version_w();
+ return (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1);
}
is_windows_8 :: proc() -> bool {
- osvi := get_windows_version_ansi();
- return (osvi.major_version == 6 && osvi.minor_version == 2);
+ osvi := get_windows_version_w();
+ return (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2);
}
is_windows_8_1 :: proc() -> bool {
- osvi := get_windows_version_ansi();
- return (osvi.major_version == 6 && osvi.minor_version == 3);
+ osvi := get_windows_version_w();
+ return (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 3);
}
is_windows_10 :: proc() -> bool {
- osvi := get_windows_version_ansi();
- return (osvi.major_version == 10 && osvi.minor_version == 0);
-}
-
+ osvi := get_windows_version_w();
+ return (osvi.dwMajorVersion == 10 && osvi.dwMinorVersion == 0);
+} \ No newline at end of file
diff --git a/core/sys/windows/ntdll.odin b/core/sys/windows/ntdll.odin
new file mode 100644
index 000000000..0f7472f33
--- /dev/null
+++ b/core/sys/windows/ntdll.odin
@@ -0,0 +1,8 @@
+package sys_windows
+
+foreign import ntdll_lib "system:ntdll.lib"
+
+@(default_calling_convention="std")
+foreign ntdll_lib {
+ RtlGetVersion :: proc(lpVersionInformation: ^OSVERSIONINFOEXW) -> NTSTATUS ---;
+} \ No newline at end of file
diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin
index 73af4f418..5d1cbb6c9 100644
--- a/core/sys/windows/types.odin
+++ b/core/sys/windows/types.odin
@@ -36,6 +36,7 @@ ULONG_PTR :: uint;
DWORD_PTR :: ULONG_PTR;
ULONG :: c_ulong;
UCHAR :: BYTE;
+NTSTATUS :: c.long;
PDWORD_PTR :: ^DWORD_PTR;
ATOM :: distinct WORD;
@@ -721,15 +722,15 @@ SYSTEM_INFO :: struct {
// https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_osversioninfoexw
OSVERSIONINFOEXW :: struct {
- os_version_info_size: ULONG,
- major_version: ULONG,
- minor_version: ULONG,
- build_number: ULONG,
- platform_id : ULONG,
- service_pack_string: [128]WCHAR,
- service_pack_major: USHORT,
- service_pack_minor: USHORT,
- suite_mask: USHORT,
- product_type: UCHAR,
- reserved: UCHAR,
-}
+ dwOSVersionInfoSize: ULONG,
+ dwMajorVersion: ULONG,
+ dwMinorVersion: ULONG,
+ dwBuildNumber: ULONG,
+ dwPlatformId: ULONG,
+ szCSDVersion: [128]WCHAR,
+ wServicePackMajor: USHORT,
+ wServicePackMinor: USHORT,
+ wSuiteMask: USHORT,
+ wProductType: UCHAR,
+ wReserved: UCHAR,
+}; \ No newline at end of file