42 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| 
								 | 
							
								import 'dart:ffi' hide Size;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import 'package:ffi/ffi.dart';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import 'package:win32/win32.dart' as win32;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Get windows target build number.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// [Note]
							 | 
						||
| 
								 | 
							
								/// Please use this function wrapped with `Platform.isWindows`.
							 | 
						||
| 
								 | 
							
								int getWindowsTargetBuildNumber_() {
							 | 
						||
| 
								 | 
							
								  final rtlGetVersion = DynamicLibrary.open('ntdll.dll').lookupFunction<
							 | 
						||
| 
								 | 
							
								      Void Function(Pointer<win32.OSVERSIONINFOEX>),
							 | 
						||
| 
								 | 
							
								      void Function(Pointer<win32.OSVERSIONINFOEX>)>('RtlGetVersion');
							 | 
						||
| 
								 | 
							
								  final osVersionInfo = _getOSVERSIONINFOEXPointer();
							 | 
						||
| 
								 | 
							
								  rtlGetVersion(osVersionInfo);
							 | 
						||
| 
								 | 
							
								  int buildNumber = osVersionInfo.ref.dwBuildNumber;
							 | 
						||
| 
								 | 
							
								  calloc.free(osVersionInfo);
							 | 
						||
| 
								 | 
							
								  return buildNumber;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Get Windows OS version pointer
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// [Note]
							 | 
						||
| 
								 | 
							
								/// Please use this function wrapped with `Platform.isWindows`.
							 | 
						||
| 
								 | 
							
								Pointer<win32.OSVERSIONINFOEX> _getOSVERSIONINFOEXPointer() {
							 | 
						||
| 
								 | 
							
								  final pointer = calloc<win32.OSVERSIONINFOEX>();
							 | 
						||
| 
								 | 
							
								  pointer.ref
							 | 
						||
| 
								 | 
							
								    ..dwOSVersionInfoSize = sizeOf<win32.OSVERSIONINFOEX>()
							 | 
						||
| 
								 | 
							
								    ..dwBuildNumber = 0
							 | 
						||
| 
								 | 
							
								    ..dwMajorVersion = 0
							 | 
						||
| 
								 | 
							
								    ..dwMinorVersion = 0
							 | 
						||
| 
								 | 
							
								    ..dwPlatformId = 0
							 | 
						||
| 
								 | 
							
								    ..szCSDVersion = ''
							 | 
						||
| 
								 | 
							
								    ..wServicePackMajor = 0
							 | 
						||
| 
								 | 
							
								    ..wServicePackMinor = 0
							 | 
						||
| 
								 | 
							
								    ..wSuiteMask = 0
							 | 
						||
| 
								 | 
							
								    ..wProductType = 0
							 | 
						||
| 
								 | 
							
								    ..wReserved = 0;
							 | 
						||
| 
								 | 
							
								  return pointer;
							 | 
						||
| 
								 | 
							
								}
							 |