win-ffi-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 07b6199ff2041ec04c908e4a28715ede253489fd
4
+ data.tar.gz: 2bd9bf4e101580882935b128134bdea1225ca506
5
+ SHA512:
6
+ metadata.gz: ad1362955f00d9cf9870f2ca1660028bb0f214491875aa4b5f9ff2bccf9b743ee4a70f9532e4959c77c0a2789d897bf8bdc874a52472a4a0545e9fa259127838
7
+ data.tar.gz: 5eb7492aa46d63f6e001ce6e9d6f2f5aca78e422db0cbbda98716a4a6981a86d6382046e5fcc24abb38c8b67dd66c2f6dfef85557342d00b16ae921ccaa7cc96
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # WinFFI
2
+
3
+ [![Join the chat at https://gitter.im/P3t3rU5/winffi](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/P3t3rU5/winffi?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
4
+
5
+ WinFFI is a gem to use the windows API using the ffi gem inspired by windows-pr gem.
6
+ This gem is work in progress
7
+ To install:
8
+
9
+ ```
10
+ gem install win-ffi
11
+ ```
12
+
13
+ # License
14
+
15
+ (The MIT License)
16
+
17
+ Copyright © 2013 Pedro Miranda
18
+
19
+ Permission is hereby granted, free of charge, to any person obtaining
20
+ a copy of this software and associated documentation files (the
21
+ 'Software'), to deal in the Software without restriction, including
22
+ without limitation the rights to use, copy, modify, merge, publish,
23
+ distribute, sublicense, and/or sell copies of the Software, and to
24
+ permit persons to whom the Software is furnished to do so, subject to
25
+ the following conditions:
26
+
27
+ The above copyright notice and this permission notice shall be
28
+ included in all copies or substantial portions of the Software.
29
+
30
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
31
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
33
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
34
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
35
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
36
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,10 @@
1
+ # require 'facets/pathname'
2
+ require 'win-ffi/core/version'
3
+ require 'win-ffi/core/string_utils'
4
+ require 'win-ffi/core/boolean_utils'
5
+ require 'win-ffi/core/macro/util'
6
+ require 'win-ffi/core/lib_base'
7
+
8
+ module WinFFI
9
+ extend LibBase
10
+ end
@@ -0,0 +1,34 @@
1
+ module WinFFI
2
+ module BooleanUtils
3
+ refine ::TrueClass do
4
+
5
+ def to_native
6
+ 1
7
+ end
8
+
9
+ alias_method :to_n, :to_native
10
+ alias_method :to_c, :to_native
11
+ end
12
+
13
+ refine ::FalseClass do
14
+
15
+ def to_native
16
+ 0
17
+ end
18
+
19
+ alias_method :to_n, :to_native
20
+ alias_method :to_c, :to_native
21
+ end
22
+
23
+ refine ::NilClass do
24
+
25
+ def to_native
26
+ 0
27
+ end
28
+
29
+ alias_method :to_n, :to_native
30
+ alias_method :to_c, :to_native
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,13 @@
1
+ require 'win-ffi/core/lib_base'
2
+
3
+ module WinFFI
4
+ extend LibBase
5
+
6
+ FirmwareType = enum :firmware_type,
7
+ [
8
+ :Unknown, 0,
9
+ :Bios, 1,
10
+ :Uefi, 2,
11
+ :Max, 3
12
+ ]
13
+ end
@@ -0,0 +1,47 @@
1
+ require 'win-ffi/core/lib_base'
2
+
3
+ module WinFFI
4
+ extend LibBase
5
+
6
+ LoadResourceFlags = enum :load_resource_flags,
7
+ [
8
+ :DEFAULTCOLOR, 0x00000000, # The default flag; it does nothing. All it means is "not :MONOCHROME".
9
+
10
+ :MONOCHROME, 0x00000001, # Loads the image in black and white.
11
+ :COLOR, 0x00000002,
12
+ :COPYRETURNORG, 0x00000004,
13
+ :COPYDELETEORG, 0x00000008,
14
+ :LOADFROMFILE, 0x00000010, # Loads the stand-alone image from the file specified by lpszName (icon, cursor, or
15
+ # bitmap file).
16
+ :LOADTRANSPARENT, 0x00000020, # Retrieves the color value of the first pixel in the image and replaces the
17
+ # corresponding entry in the color table with the default window_class color (COLOR_WINDOW). All pixels in the image
18
+ # that use that entry become the default window_class color. This value applies only to images that have corresponding
19
+ # color tables.
20
+ :DEFAULTSIZE, 0x00000040, # Uses the width or height specified by the system metric values for cursors or icons,
21
+ # if the cxDesired or cyDesired values are set to zero. If this flag is not specified and cxDesired and
22
+ # cyDesired are set to zero, the function uses the actual resource size. If the resource contains multiple
23
+ # images, the function uses the size of the first image.
24
+ :VGACOLOR, 0x00000080, # Uses true VGA colors.
25
+ :LOADMAP3DCOLORS, 0x00001000, # Searches the color table for the image and replaces the following shades of gray
26
+ # with the corresponding 3-D color.
27
+ #Dk Gray, RGB(128,128,128) with COLOR_3DSHADOW
28
+ #Gray, RGB(192,192,192) with COLOR_3DFACE
29
+ #Lt Gray, RGB(223,223,223) with COLOR_3DLIGHT
30
+ # Do not use this option if you are loading a bitmap with a color depth greater than 8bpp.
31
+
32
+ :CREATEDIBSECTION, 0x00002000, # When the uType parameter specifies IMAGE_BITMAP, causes the function to return
33
+ # a DIB section bitmap rather than a compatible bitmap. This flag is useful for loading a bitmap without mapping
34
+ # it to the colors of the display device.
35
+ # Do not use this option if you are loading a bitmap with a color depth greater than 8bpp.
36
+ # If fuLoad includes both the :LOADTRANSPARENT and :LOADMAP3DCOLORS values, :LOADTRANSPARENT takes precedence.
37
+ # However, the color table entry is replaced with COLOR_3DFACE rather than COLOR_WINDOW.
38
+ :COPYFROMRESOURCE, 0x00004000,
39
+ :SHARED, 0x00008000, # Shares the image handle if the image is loaded multiple times. If :SHARED is not set, a
40
+ # second call to LoadImage for the same resource will load the image again and return a different handle.
41
+ # When you use this flag, the system will destroy the resource when it is no longer needed.
42
+ # Do not use :SHARED for images that have non-standard sizes, that may change after loading, or that are loaded
43
+ # from a file. When loading a system icon or cursor, you must use :SHARED or the function will fail to load the
44
+ # resource. This function finds the first image in the cache with the requested resource name, regardless of the
45
+ # size requested.
46
+ ]
47
+ end
@@ -0,0 +1,78 @@
1
+ require 'ffi'
2
+ require 'logger'
3
+
4
+ module WinFFI
5
+ @logger = Logger.new(STDOUT)
6
+ @logger.info "WinFFI #{VERSION}"
7
+ def self.logger
8
+ @logger
9
+ end
10
+
11
+ WinFFI.logger.debug 'Getting Encoding...'
12
+ @encoding = (__ENCODING__.name =~ /ASCII/ ? 'A' : 'W')
13
+ WinFFI.logger.debug 'Got Encoding: ' + @encoding
14
+
15
+ def self.encoding
16
+ @encoding
17
+ end
18
+
19
+ def self.encoding=(encoding)
20
+ @encoding = encoding
21
+ end
22
+
23
+ module LibBase
24
+ extend FFI::Library
25
+ ffi_convention :stdcall
26
+
27
+ def encoded_function(name, *args, ruby_name: nil)
28
+ ruby_name = name unless ruby_name
29
+ attach_function ruby_name, name + WinFFI.encoding, *args
30
+ end
31
+
32
+ if WinFFI.encoding == 'A'
33
+ def self.string_from_byte_array(array)
34
+ array[0, array.index(0) || array.length].pack('C*').encode(Encoding::UTF_8)
35
+ end
36
+ else
37
+ def self.string_from_byte_array(array)
38
+ array = array[0, array.index(0) || array.length]
39
+ array.pack('S*').force_encoding(Encoding::UTF_16LE).encode(Encoding::UTF_8)
40
+ end
41
+ end
42
+
43
+ def self.extended(c)
44
+ c.extend FFI::Library
45
+ instance_variables.each do |v|
46
+ value = instance_variable_get(v)
47
+ value = value.dup unless value.is_a?(Fixnum) || value.is_a?(Symbol)
48
+ c.instance_variable_set(v, value)
49
+ end
50
+ end
51
+ end
52
+
53
+ require 'win-ffi/core/typedef/core'
54
+
55
+ require 'win-ffi/kernel32/struct/os_version_info_ex'
56
+
57
+ module Kernel32
58
+ extend LibBase
59
+
60
+ ffi_lib 'kernel32'
61
+
62
+ #BOOL WINAPI GetVersionEx( _Inout_ LPOSVERSIONINFO lpVersionInfo )
63
+ encoded_function 'GetVersionEx', [OSVERSIONINFOEX.ptr], :bool
64
+ end
65
+
66
+ WinFFI.logger.debug 'Getting Architecture...'
67
+ Architecture = RbConfig::CONFIG['arch'] # "i386-mingw32" | "x64-mingw32"
68
+ WinFFI.logger.debug 'Got Architecture: ' + Architecture
69
+
70
+ WinFFI.logger.debug 'Getting Windows Version...'
71
+ WindowsVersion = OSVERSIONINFOEX.new.get!
72
+ WinFFI.logger.debug "Got Windows Version: #{WindowsVersion.hex}-> #{WindowsVersion.to_s}"
73
+
74
+ WindowsVersion.major, WindowsVersion.minor, WindowsVersion.build = `ver`.match(/\d+\.\d+\.\d+/)[0].split('.').map(&:to_i)
75
+
76
+ @logger.info "#{WindowsVersion.to_s} #{Architecture} #{__ENCODING__.to_s}"
77
+ end
78
+
@@ -0,0 +1,38 @@
1
+ module WinFFI
2
+ def makeword(a, b)
3
+ ((a & 0xff) | ((b & 0xff) << 8))
4
+ end
5
+
6
+ def makelong(a, b)
7
+ ((a & 0xffff) | ((b & 0xffff) << 16))
8
+ end
9
+
10
+ def loword(l)
11
+ l & 0xffff
12
+ end
13
+
14
+ def hiword(l)
15
+ l >> 16
16
+ end
17
+
18
+ def lobyte(w)
19
+ w & 0xff
20
+ end
21
+
22
+ def hibyte(w)
23
+ w >> 8
24
+ end
25
+
26
+ def points_to_point(pt, pts)
27
+ pt.x = loword(pts)
28
+ pt.y = hiword(pts)
29
+ end
30
+
31
+ def point_to_points(pt)
32
+ makelong(pt.x, pt.y)
33
+ end
34
+
35
+ alias_method :makelresult, :makelong
36
+ alias_method :makelparam, :makelong
37
+ alias_method :makewparam, :makelong
38
+ end
@@ -0,0 +1,24 @@
1
+ module WinFFI
2
+ module StringUtils
3
+ refine ::String do
4
+
5
+ def to_utf8
6
+ encode('utf-8')
7
+ end
8
+
9
+ def to_w
10
+ encode('utf-16LE')
11
+ end
12
+ end
13
+
14
+ refine ::Object do
15
+ def to_utf8
16
+ to_s.to_utf8
17
+ end
18
+
19
+ def to_w
20
+ to_s.to_w
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,17 @@
1
+ require 'ffi'
2
+ require 'win-ffi/core/lib_base'
3
+
4
+ module WinFFI
5
+ extend LibBase
6
+ class FFIStruct < FFI::Struct
7
+ def self.layout(*args)
8
+ super
9
+ members.each do |name|
10
+ unless method_defined?(name)
11
+ define_method name, ->{ self[name] }
12
+ define_method "#{name}=", ->(v){ self[name] = v }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ module WinFFI
2
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx
3
+ class GUID < FFIStruct
4
+ layout :Data1, :dword,
5
+ :Data2, :word,
6
+ :Data3, :word,
7
+ :Data4, [:byte, 8]
8
+
9
+ def from_str(guid)
10
+ data = [guid.gsub(/[{\-}]/, '')].pack('H*').unpack('L>S>2C8')
11
+ self.Data1 = data[0]
12
+ self.Data2 = data[1]
13
+ self.Data3 = data[2]
14
+ 3.upto(data.count - 1) do |i|
15
+ self.Data4[i - 3] = data[i]
16
+ end
17
+ end
18
+
19
+ def to_s
20
+ str = "%08X-%04X-%04X-%02X%02X-" % [self.Data1, self.Data2, self.Data3, self.Data4[0], self.Data4[1]]
21
+ 2.upto(7) do |i|
22
+ str << "%02X" % self.Data4[i]
23
+ end
24
+ str
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ module WinFFI
2
+ if WindowsVersion >= :xp
3
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa379261(v=vs.85).aspx
4
+ class LUID < FFIStruct
5
+ layout :LowPart, :dword,
6
+ :HighPart, :long
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module WinFFI
2
+ class POINT < FFIStruct
3
+ layout :x, :long,
4
+ :y, :long
5
+
6
+ def to_s
7
+ "POINT x = #{x}, y = #{y}"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,41 @@
1
+ module WinFFI
2
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/dd162897(v=vs.85).aspx
3
+ class RECT < FFIStruct
4
+ layout :left, :long,
5
+ :top, :long,
6
+ :right, :long,
7
+ :bottom, :long
8
+
9
+ # def initialize(left, top, right, bottom)
10
+ # self.left, self.top, self.right, self.bottom = left, top, right, bottom
11
+ # end
12
+
13
+ def area
14
+ width * height
15
+ end
16
+
17
+ def perimeter
18
+ 2 * width + 2 * height
19
+ end
20
+
21
+ def width
22
+ right - left
23
+ end
24
+
25
+ def width=(v)
26
+ self.right = left + v
27
+ end
28
+
29
+ def height
30
+ bottom - top
31
+ end
32
+
33
+ def height=(v)
34
+ self.bottom = top + v
35
+ end
36
+
37
+ def to_s
38
+ "(left = #{left}, top = #{top}, width = #{width}, height = #{height})"
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,7 @@
1
+ module WinFFI
2
+ class SECURITY_ATTRIBUTES < FFIStruct
3
+ layout :nLength, :dword,
4
+ :lpSecurityDescriptor, :pointer,
5
+ :bInheritHandle, :bool
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ module WinFFI
2
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/dd145106(v=vs.85).aspx
3
+ class SIZE < FFIStruct
4
+ layout :cx, :long,
5
+ :cy, :long
6
+
7
+ def to_s
8
+ "Size x=#{x}, y=#{y}"
9
+ end
10
+
11
+ alias_method :x, :cx
12
+ alias_method :x=, :cx=
13
+ alias_method :y, :cy
14
+ alias_method :y=, :cy=
15
+ end
16
+ end
@@ -0,0 +1,30 @@
1
+ require 'win-ffi/core/lib_base'
2
+
3
+ module WinFFI
4
+ module LibBase
5
+ typedef (WinFFI.encoding == 'A' ? :char : :ushort), :tchar
6
+ typedef :ushort, :atom
7
+ typedef :uchar, :byte
8
+ typedef :ushort, :word
9
+ typedef :uint, :dword
10
+ typedef :uint, :colorref
11
+ typedef :uint, :wparam
12
+ typedef :long, :lparam
13
+ typedef :long, :lresult
14
+ typedef :long, :hresult
15
+ typedef :ushort, :langid
16
+ %i'
17
+ handle
18
+ hbitmap
19
+ hbrush
20
+ hdc
21
+ hglobal
22
+ hicon
23
+ hinstance
24
+ hmodule
25
+ hwnd
26
+ '.each do |s|
27
+ typedef :pointer, s
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ module WinFFI
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,22 @@
1
+ module WinFFI
2
+ class WideInlineString
3
+ include FFI::DataConverter
4
+
5
+ attr_reader :size, :native_type
6
+
7
+ def initialize(size)
8
+ @size = size
9
+ @native_type = FFI::ArrayType.new(WinFFI.find_type(:tchar), size)
10
+ end
11
+
12
+ def to_native(_value, _context)
13
+ raise NotImplementedError
14
+ end
15
+
16
+ def from_native(value, _context)
17
+ LibBase.string_from_byte_array(value.to_a)
18
+ end
19
+
20
+ alias_method :length, :size
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module WinFFI
2
+ class WideStringPointer
3
+ extend FFI::DataConverter
4
+ native_type FFI::Type::POINTER
5
+ # TODO
6
+ class << self
7
+
8
+ def to_native(value, _context)
9
+
10
+ end
11
+
12
+ def from_native(pointer, _context)
13
+
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ require 'win-ffi/core/lib_base'
2
+
3
+ module WinFFI
4
+ module Kernel32
5
+ extend WinFFI::LibBase
6
+
7
+ ffi_lib 'kernel32'
8
+ end
9
+ end
10
+
@@ -0,0 +1,22 @@
1
+ require 'win-ffi/kernel32'
2
+
3
+ module WinFFI
4
+ module Kernel32
5
+ # _WIN32_WINNT version constants
6
+ WIN32_WINNT = enum :win32_winnt, [
7
+ :NT4, 0x0400,
8
+ :WIN2K, 0x0500,
9
+ :WINXP, 0x0501,
10
+ :WS03, 0x0502,
11
+ :WIN6, 0x0600,
12
+ :VISTA, 0x0600,
13
+ :WS08, 0x0600,
14
+ :LONGHORN, 0x0600,
15
+ :WIN7, 0x0601,
16
+ :WIN8, 0x0602,
17
+ :WINBLUE, 0x0603,
18
+ :WINTHRESHOLD, 0x0A00, # ABRACADABRA_THRESHOLD
19
+ :WIN10, 0x0A00 # ABRACADABRA_THRESHOLD
20
+ ]
21
+ end
22
+ end
@@ -0,0 +1,79 @@
1
+ require 'win-ffi/core/wide_inline_string'
2
+
3
+ require 'win-ffi/core/struct'
4
+
5
+ require 'win-ffi/kernel32/enum/version/win32_winnt'
6
+
7
+ module WinFFI
8
+ class OSVERSIONINFOEX < FFIStruct
9
+
10
+ include Kernel32, Comparable
11
+
12
+ layout :dwOSVersionInfoSize, :ulong,
13
+ :dwMajorVersion, :ulong,
14
+ :dwMinorVersion, :ulong,
15
+ :dwBuildNumber, :ulong,
16
+ :dwPlatformId, :ulong,
17
+ :szCSDVersion, WideInlineString.new(128),
18
+ :wServicePackMajor, :ushort,
19
+ :wServicePackMinor, :ushort,
20
+ :wSuiteMask, :ushort,
21
+ :wProductType, :uchar,
22
+ :wReserved, :uchar
23
+
24
+ def initialize
25
+ super
26
+ self[:dwOSVersionInfoSize] = size
27
+ end
28
+
29
+ def get!
30
+ Kernel32.GetVersionEx(self)
31
+ self
32
+ end
33
+
34
+ def major; dwMajorVersion end
35
+ def minor; dwMinorVersion end
36
+ def build; dwBuildNumber end
37
+ def sp; wServicePackMajor end
38
+
39
+ def major=(major)
40
+ self.dwMajorVersion = major
41
+ end
42
+
43
+ def minor=(minor); self.dwMinorVersion = minor end
44
+
45
+ def build=(build); self.dwBuildNumber = build end
46
+
47
+ def hex; (major << 8) + minor end
48
+
49
+ def <=>(version)
50
+ hex <=> WIN32_WINNT[case version
51
+ when '2000', 2000 then :WIN2K
52
+ when 'xp', :xp then :WINXP
53
+ when 'server2003', :server2003, 2003 then :WS03
54
+ when 'vista', :vista, 'longhorn', :longhorn then :VISTA
55
+ when '7', 7 then :WIN7
56
+ when '8', 8 then :WIN8
57
+ when '8.1', 8.1, 'blue', :blue then :WINBLUE
58
+ when '10', 10, 'thresold', :thresold then :WIN10
59
+ when Integer then version
60
+ else raise ArgumentError, 'Unknown Version'
61
+ end]
62
+ end
63
+
64
+ def name
65
+ case hex
66
+ when WIN32_WINNT[:WIN2K]...WIN32_WINNT[:WINXP] then 'Windows 2000'
67
+ when WIN32_WINNT[:WINXP]...WIN32_WINNT[:VISTA] then 'Windows XP'
68
+ when WIN32_WINNT[:VISTA]...WIN32_WINNT[:WIN7] then 'Windows Vista'
69
+ when WIN32_WINNT[:WIN7]...WIN32_WINNT[:WIN8] then 'Windows 7'
70
+ when WIN32_WINNT[:WIN8]...WIN32_WINNT[:WINBLUE] then 'Windows 8'
71
+ when WIN32_WINNT[:WINBLUE]...WIN32_WINNT[:WIN10] then 'Windows 8.1'
72
+ when WIN32_WINNT[:WIN10] then 'Windows 10'
73
+ else 'Unknown'
74
+ end
75
+ end
76
+
77
+ def to_s; "#{name} v#{major}.#{minor}.#{build} SP#{sp}" end
78
+ end
79
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: win-ffi-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - P3t3rU5
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.9.10
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.9'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.9.10
33
+ - !ruby/object:Gem::Dependency
34
+ name: facets
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.4'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.4'
61
+ description: FFI definitions for Windows API.
62
+ email:
63
+ - pedro.at.miranda@gmail.com
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - README.md
69
+ - lib/win-ffi/core.rb
70
+ - lib/win-ffi/core/boolean_utils.rb
71
+ - lib/win-ffi/core/enum/firmware_type.rb
72
+ - lib/win-ffi/core/enum/load_resource_flags.rb
73
+ - lib/win-ffi/core/lib_base.rb
74
+ - lib/win-ffi/core/macro/util.rb
75
+ - lib/win-ffi/core/string_utils.rb
76
+ - lib/win-ffi/core/struct.rb
77
+ - lib/win-ffi/core/struct/guid.rb
78
+ - lib/win-ffi/core/struct/luid.rb
79
+ - lib/win-ffi/core/struct/point.rb
80
+ - lib/win-ffi/core/struct/rect.rb
81
+ - lib/win-ffi/core/struct/security_attributes.rb
82
+ - lib/win-ffi/core/struct/size.rb
83
+ - lib/win-ffi/core/typedef/core.rb
84
+ - lib/win-ffi/core/version.rb
85
+ - lib/win-ffi/core/wide_inline_string.rb
86
+ - lib/win-ffi/core/wide_string_pointer.rb
87
+ - lib/win-ffi/kernel32.rb
88
+ - lib/win-ffi/kernel32/enum/version/win32_winnt.rb
89
+ - lib/win-ffi/kernel32/struct/os_version_info_ex.rb
90
+ homepage: https://github.com/P3t3rU5/win-ffi-core
91
+ licenses:
92
+ - MIT
93
+ metadata: {}
94
+ post_install_message: |
95
+ +----------------------------------------------------------------------------+
96
+ Thanks for choosing WinFFI.
97
+
98
+ ==========================================================================
99
+ 1.0.0 Changes:
100
+ - Refactored Directory Structure
101
+
102
+ ==========================================================================
103
+
104
+ If you find any bugs, please report them on
105
+ https://github.com/P3t3rU5/win-ffi-core/issues
106
+
107
+ +----------------------------------------------------------------------------+
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 2.6.1
124
+ signing_key:
125
+ specification_version: 4
126
+ summary: FFI definitions for Windows API
127
+ test_files: []