WinCommon 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7c4bfe76872952b47611704aae5087ff318f59ba
4
- data.tar.gz: 167b26d4b8e11a5d3118496198d10af51b7f051a
3
+ metadata.gz: 00ebfa266d5c8e6f2605affc423e17dc86dba69f
4
+ data.tar.gz: 3349af84a6b33f23281e0fc6b0441451a1f279a1
5
5
  SHA512:
6
- metadata.gz: 561538be030a9514f8a626536acdf4ff0b7ffd6635eecff0da7345cb7f6a79b4e0adb795ec925634b4b36c874de76ba521d77c1940f823f4d85e80053b5ca647
7
- data.tar.gz: f223b600b92b11a654a6248eba569b9c123d33ce9bb8aa76b598c3432af3377f4960241615c7a696be8a3da34d62609f56689ad88f6aea04ffb922c8f81a9d0d
6
+ metadata.gz: 327c266e6cd9c88e4f16e697ac74ad78f7cfa7b877c474861aa8ef662a60923f5cc576718f080f4e81aca55d01d6a65e4f4eafea04e30a6c260ec7f484582632
7
+ data.tar.gz: 489b7a6cd44d54144e7aca36fd45817c841cbe66683aa4ed3d078ce36f7edad02f96425915c842453ff1a0075bb6069ba39f53c5a090a914d64c005ea4ebec08
@@ -0,0 +1,85 @@
1
+ module WinCommon
2
+ module Crypt
3
+ module Structs
4
+ class CRYPT_INTEGER_BLOB < FFI::Struct
5
+ layout({
6
+ :cbData => :DWORD,
7
+ :pbData => :PBYTE
8
+ })
9
+ end
10
+
11
+ CRYPT_OBJID_BLOB = CRYPT_INTEGER_BLOB
12
+ CERT_NAME_BLOB = CRYPT_INTEGER_BLOB
13
+
14
+ class CRYPT_ALGORITHM_IDENTIFIER < FFI::Struct
15
+ layout({
16
+ :pszObjId => :LPSTR,
17
+ :Parameters => CRYPT_OBJID_BLOB
18
+ })
19
+ end
20
+
21
+ class CRYPT_BIT_BLOB < FFI::Struct
22
+ layout({
23
+ :cbData => :DWORD,
24
+ :pbData => :PBYTE,
25
+ :cUnusedBits => :DWORD
26
+ })
27
+ end
28
+
29
+ class CERT_PUBLIC_KEY_INFO < FFI::Struct
30
+ layout({
31
+ :Algorithm => CRYPT_ALGORITHM_IDENTIFIER,
32
+ :PublicKey => CRYPT_BIT_BLOB
33
+ })
34
+ end
35
+
36
+ class CERT_EXTENSION < FFI::Struct
37
+ layout({
38
+ :pszObjId => :LPSTR,
39
+ :fCritical => :BOOL,
40
+ :Value => CRYPT_OBJID_BLOB
41
+ })
42
+ end
43
+ FFI.typedef CERT_EXTENSION.ptr, :PCERT_EXTENSION
44
+
45
+ class CERT_INFO < FFI::Struct
46
+ layout({
47
+ :dwVersion => :DWORD,
48
+ :SerialNumber => CRYPT_INTEGER_BLOB,
49
+ :SignatureAlgorithm => CRYPT_ALGORITHM_IDENTIFIER,
50
+ :Issuer => CERT_NAME_BLOB,
51
+ :NotBefore => WinCommon::Structs::FILETIME,
52
+ :NotAfter => WinCommon::Structs::FILETIME,
53
+ :Subject => CERT_NAME_BLOB,
54
+ :SubjectPublicKeyInfo => CERT_PUBLIC_KEY_INFO,
55
+ :IssuerUniqueId => CRYPT_BIT_BLOB,
56
+ :SubjectUniqueId => CRYPT_BIT_BLOB,
57
+ :cExtension => :DWORD,
58
+ :rgExtension => :PCERT_EXTENSION
59
+ })
60
+ end
61
+
62
+ class CERT_CONTEXT < FFI::Struct
63
+ layout({
64
+ :dwCertEncodingType => :DWORD,
65
+ :pbCertEncoded => :PBYTE,
66
+ :cbCertEncoded => :DWORD,
67
+ :pCertInfo => CERT_INFO.ptr,
68
+ :hCertStore => :HCERTSTORE
69
+ })
70
+ end
71
+
72
+ end
73
+
74
+ module Typedefs
75
+ FFI.typedef Structs::CRYPT_INTEGER_BLOB.ptr, :PCRYPT_INTEGER_BLOB
76
+ FFI.typedef Structs::CRYPT_OBJID_BLOB.ptr, :PCRYPT_OBJID_BLOB
77
+ FFI.typedef Structs::CERT_NAME_BLOB.ptr, :PCERT_NAME_BLOB
78
+ FFI.typedef Structs::CRYPT_ALGORITHM_IDENTIFIER.ptr, :PCRYPT_ALGORITHM_IDENTIFIER
79
+ FFI.typedef Structs::CRYPT_BIT_BLOB.ptr, :PCRYPT_BIT_BLOB
80
+ FFI.typedef Structs::CERT_PUBLIC_KEY_INFO.ptr, :PCERT_PUBLIC_KEY_INFO
81
+ FFI.typedef Structs::CERT_INFO.ptr, :PCERT_INFO
82
+ FFI.typedef Structs::CERT_CONTEXT.ptr, :PCERT_CONTEXT
83
+ end
84
+ end
85
+ end
@@ -2,9 +2,6 @@ module WinCommon
2
2
  module Errors
3
3
  module HRESULT
4
4
  # Defined in winerror.h
5
- SEVERITY_SUCCESS = 0
6
- SEVERITY_ERROR = 1
7
- NOERROR = 0x00000000
8
5
  S_OK = 0x00000000
9
6
  S_FALSE = 0x00000001
10
7
  E_PENDING = 0x8000000A
@@ -41,11 +38,29 @@ module WinCommon
41
38
  E_INVALID_DATA = 0x8007000D
42
39
  E_OUTOFMEMORY = 0x8007000E
43
40
  E_INVALIDARG = 0x80070057
41
+ module SEVERITY
42
+ SUCCESS = 0
43
+ ERROR = 1
44
+ end
45
+
44
46
  def self.toUnsigned(hresult)
45
47
  hresult += 0x1_0000_0000 if (hresult < 0)
46
48
  hresult
47
49
  end
48
50
 
51
+ def self.Compare(error, code)
52
+ error = toUnsigned(error)
53
+ error <=> code
54
+ end
55
+
56
+ def self.Equal?(error, codes)
57
+ [*codes].include?(toUnsigned(error))
58
+ end
59
+
60
+ def self.ErrorIfEqual(error, code)
61
+ raise HRESULTError.new(error) if Equal?(error, code)
62
+ end
63
+
49
64
  def self.GetSeverity(hresult)
50
65
  (toUnsigned(hresult) >> 31) & 0x01
51
66
  end
@@ -59,11 +74,11 @@ module WinCommon
59
74
  end
60
75
 
61
76
  def self.IsSuccess?(hresult)
62
- GetSeverity(hresult) == SEVERITY_SUCCESS
77
+ GetSeverity(hresult) == SEVERITY::SUCCESS
63
78
  end
64
79
 
65
80
  def self.IsError?(hresult)
66
- GetSeverity(hresult) == SEVERITY_ERROR
81
+ GetSeverity(hresult) == SEVERITY::ERROR
67
82
  end
68
83
 
69
84
  def self.GetName(hresult)
@@ -79,13 +94,18 @@ module WinCommon
79
94
  'UKNOWN_ERROR'
80
95
  end
81
96
  end
97
+
98
+ def self.GetNameCode(hresult)
99
+ code = HRESULT.toUnsigned(hresult)
100
+ HRESULT.GetName(code) + " [0x%08X]" % code
101
+ end
82
102
  end
83
103
 
84
104
  class HRESULTError < WinCommonError
85
105
  attr_reader :code
86
106
  def initialize(hr)
87
107
  @code = HRESULT.toUnsigned(hr)
88
- super(HRESULT.GetName(@code) + " [0x%08X]" % @code)
108
+ super(HRESULT.GetNameCode(@code))
89
109
  end
90
110
  end
91
111
  end
@@ -1,5 +1,26 @@
1
1
  module WinCommon
2
2
  module Structs
3
+ class POINT < FFI::Struct
4
+ layout({
5
+ :x => :LONG,
6
+ :y => :LONG
7
+ })
8
+ end
9
+
10
+ class SIZE < FFI::Struct
11
+ layout({
12
+ :cx => :LONG,
13
+ :cy => :LONG
14
+ })
15
+ end
16
+
17
+ class FILETIME < FFI::Struct
18
+ layout({
19
+ :dwLowDateTime => :DWORD,
20
+ :dwHighDateTime => :DWORD
21
+ })
22
+ end
23
+
3
24
  class GUID < FFI::Struct
4
25
  layout({
5
26
  :data1 => :ulong,
@@ -31,14 +52,9 @@ module WinCommon
31
52
  end
32
53
  end
33
54
 
34
- class IID < GUID
35
- end
36
-
37
- class CLSID < GUID
38
- end
39
-
40
- class FMTID < GUID
41
- end
55
+ IID = GUID
56
+ CLSID = GUID
57
+ FMTID = GUID
42
58
 
43
59
  class WideString
44
60
  extend FFI::DataConverter
@@ -60,13 +76,16 @@ module WinCommon
60
76
  end
61
77
 
62
78
  module Typedefs
63
- FFI.typedef Structs::GUID.ptr, :LPGUID
64
- FFI.typedef Structs::GUID.ptr, :LPCGUID
65
- FFI.typedef Structs::IID.ptr, :LPIID
66
- FFI.typedef Structs::CLSID.ptr, :LPCLSID
67
- FFI.typedef Structs::FMTID.ptr, :LPFMTID
68
- FFI.typedef Structs::GUID.by_ref(:in), :REFGUID
69
- FFI.typedef Structs::IID.by_ref(:in), :REFIID
70
- FFI.typedef Structs::CLSID.by_ref(:in), :REFCLSID
79
+ FFI.typedef Structs::POINT.ptr, :PPOINT
80
+ FFI.typedef Structs::SIZE.ptr, :PSIZE
81
+ FFI.typedef Structs::FILETIME.ptr, :PFILETIME
82
+ FFI.typedef Structs::GUID.ptr, :LPGUID
83
+ FFI.typedef Structs::GUID.ptr, :LPCGUID
84
+ FFI.typedef Structs::IID.ptr, :LPIID
85
+ FFI.typedef Structs::CLSID.ptr, :LPCLSID
86
+ FFI.typedef Structs::FMTID.ptr, :LPFMTID
87
+ FFI.typedef Structs::GUID.by_ref(:in), :REFGUID
88
+ FFI.typedef Structs::IID.by_ref(:in), :REFIID
89
+ FFI.typedef Structs::CLSID.by_ref(:in), :REFCLSID
71
90
  end
72
91
  end
@@ -45,6 +45,7 @@ module WinCommon
45
45
  FFI.typedef :WORD, :FSHORT
46
46
  FFI.typedef :DWORD, :FLONG
47
47
  FFI.typedef :LONG, :HRESULT
48
+ FFI.typedef :pointer, :PHRESULT
48
49
  FFI.typedef :char, :CCHAR
49
50
  FFI.typedef :DWORD, :LCID
50
51
  FFI.typedef :PDWORD, :PLCID
@@ -116,6 +117,7 @@ module WinCommon
116
117
  FFI.typedef :HANDLE, :HICON
117
118
  FFI.typedef :HANDLE, :HMENU
118
119
  FFI.typedef :HICON, :HCURSOR
120
+ FFI.typedef :HANDLE, :HCERTSTORE
119
121
  FFI.typedef :short, :WCHAR
120
122
  FFI.typedef :pointer, :PWCHAR
121
123
  FFI.typedef :pointer, :LPWCH
@@ -1,3 +1,3 @@
1
1
  module WinCommon
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: WinCommon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dāvis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-08 00:00:00.000000000 Z
11
+ date: 2014-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -55,6 +55,7 @@ files:
55
55
  - UNLICENSE
56
56
  - lib/win_common.rb
57
57
  - lib/win_common/constants.rb
58
+ - lib/win_common/crypt/structs.rb
58
59
  - lib/win_common/enums.rb
59
60
  - lib/win_common/errors.rb
60
61
  - lib/win_common/errors/hresult.rb