windows-pr 1.2.2 → 1.2.3

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.
Files changed (126) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +444 -438
  3. data/MANIFEST +68 -65
  4. data/README +154 -153
  5. data/Rakefile +42 -37
  6. data/doc/conversion_guide.txt +37 -37
  7. data/lib/windows/clipboard.rb +61 -61
  8. data/lib/windows/com.rb +192 -192
  9. data/lib/windows/com/accessibility.rb +16 -16
  10. data/lib/windows/com/automation.rb +149 -149
  11. data/lib/windows/com/variant.rb +24 -24
  12. data/lib/windows/console.rb +114 -114
  13. data/lib/windows/debug.rb +35 -35
  14. data/lib/windows/device_io.rb +248 -248
  15. data/lib/windows/directory.rb +27 -27
  16. data/lib/windows/error.rb +504 -498
  17. data/lib/windows/eventlog.rb +80 -80
  18. data/lib/windows/file.rb +264 -264
  19. data/lib/windows/file_mapping.rb +25 -25
  20. data/lib/windows/filesystem.rb +15 -15
  21. data/lib/windows/gdi/bitmap.rb +65 -65
  22. data/lib/windows/gdi/device_context.rb +46 -46
  23. data/lib/windows/gdi/metafile.rb +40 -40
  24. data/lib/windows/gdi/painting_drawing.rb +115 -115
  25. data/lib/windows/handle.rb +23 -23
  26. data/lib/windows/library.rb +44 -44
  27. data/lib/windows/limits.rb +34 -34
  28. data/lib/windows/mailslot.rb +24 -24
  29. data/lib/windows/memory.rb +128 -128
  30. data/lib/windows/msvcrt/buffer.rb +75 -75
  31. data/lib/windows/msvcrt/directory.rb +31 -31
  32. data/lib/windows/msvcrt/file.rb +47 -47
  33. data/lib/windows/msvcrt/io.rb +73 -73
  34. data/lib/windows/msvcrt/string.rb +182 -182
  35. data/lib/windows/msvcrt/time.rb +169 -169
  36. data/lib/windows/national.rb +580 -580
  37. data/lib/windows/network/management.rb +525 -525
  38. data/lib/windows/network/snmp.rb +92 -92
  39. data/lib/windows/network/winsock.rb +128 -128
  40. data/lib/windows/nio.rb +50 -50
  41. data/lib/windows/ntfs/winternl.rb +117 -117
  42. data/lib/windows/path.rb +143 -143
  43. data/lib/windows/pipe.rb +42 -42
  44. data/lib/windows/process.rb +176 -176
  45. data/lib/windows/registry.rb +171 -171
  46. data/lib/windows/security.rb +479 -479
  47. data/lib/windows/security/authentication.rb +32 -32
  48. data/lib/windows/security/sspi.rb +153 -0
  49. data/lib/windows/service.rb +142 -142
  50. data/lib/windows/shell.rb +171 -171
  51. data/lib/windows/socket.rb +86 -86
  52. data/lib/windows/sound.rb +39 -39
  53. data/lib/windows/synchronize.rb +133 -133
  54. data/lib/windows/system_info.rb +229 -229
  55. data/lib/windows/thread.rb +64 -64
  56. data/lib/windows/time.rb +48 -48
  57. data/lib/windows/tool_helper.rb +36 -36
  58. data/lib/windows/unicode.rb +155 -155
  59. data/lib/windows/volume.rb +61 -61
  60. data/lib/windows/window.rb +81 -81
  61. data/lib/windows/window/classes.rb +59 -59
  62. data/lib/windows/window/dialog.rb +91 -91
  63. data/lib/windows/window/menu.rb +102 -102
  64. data/lib/windows/window/message.rb +297 -297
  65. data/lib/windows/window/properties.rb +20 -20
  66. data/lib/windows/window/timer.rb +19 -19
  67. data/lib/windows/wsa.rb +102 -102
  68. data/test/tc_clipboard.rb +41 -41
  69. data/test/tc_com.rb +32 -32
  70. data/test/tc_com_automation.rb +15 -15
  71. data/test/tc_console.rb +108 -108
  72. data/test/tc_debug.rb +48 -48
  73. data/test/tc_device_io.rb +29 -29
  74. data/test/tc_directory.rb +25 -25
  75. data/test/tc_error.rb +38 -38
  76. data/test/tc_eventlog.rb +58 -58
  77. data/test/tc_file.rb +67 -67
  78. data/test/tc_file_mapping.rb +38 -38
  79. data/test/tc_filesystem.rb +27 -27
  80. data/test/tc_gdi_bitmap.rb +25 -25
  81. data/test/tc_gdi_metafile.rb +23 -23
  82. data/test/tc_handle.rb +36 -36
  83. data/test/tc_library.rb +37 -37
  84. data/test/tc_limits.rb +34 -34
  85. data/test/tc_mailslot.rb +22 -22
  86. data/test/tc_memory.rb +44 -44
  87. data/test/tc_msvcrt_buffer.rb +63 -63
  88. data/test/tc_msvcrt_directory.rb +96 -96
  89. data/test/tc_msvcrt_file.rb +80 -80
  90. data/test/tc_msvcrt_io.rb +48 -48
  91. data/test/tc_msvcrt_string.rb +94 -94
  92. data/test/tc_msvcrt_time.rb +19 -19
  93. data/test/tc_national.rb +38 -38
  94. data/test/tc_network_management.rb +32 -32
  95. data/test/tc_network_snmp.rb +31 -31
  96. data/test/tc_network_winsock.rb +34 -34
  97. data/test/tc_nio.rb +32 -32
  98. data/test/tc_ntfs_winternl.rb +48 -48
  99. data/test/tc_path.rb +90 -90
  100. data/test/tc_pipe.rb +53 -53
  101. data/test/tc_process.rb +24 -24
  102. data/test/tc_registry.rb +29 -29
  103. data/test/tc_security.rb +104 -104
  104. data/test/tc_security_authentication.rb +34 -34
  105. data/test/tc_security_sspi.rb +23 -0
  106. data/test/tc_service.rb +57 -57
  107. data/test/tc_shell.rb +34 -34
  108. data/test/tc_socket.rb +20 -20
  109. data/test/tc_sound.rb +37 -37
  110. data/test/tc_synchronize.rb +75 -75
  111. data/test/tc_system_info.rb +33 -33
  112. data/test/tc_thread.rb +29 -29
  113. data/test/tc_time.rb +32 -32
  114. data/test/tc_tool_helper.rb +29 -29
  115. data/test/tc_unicode.rb +83 -83
  116. data/test/tc_volume.rb +47 -47
  117. data/test/tc_window.rb +45 -45
  118. data/test/tc_window_classes.rb +33 -33
  119. data/test/tc_window_dialog.rb +33 -33
  120. data/test/tc_window_menu.rb +29 -29
  121. data/test/tc_window_message.rb +33 -33
  122. data/test/tc_window_properties.rb +29 -29
  123. data/test/tc_window_timer.rb +29 -29
  124. data/test/tc_wsa.rb +19 -19
  125. data/windows-pr.gemspec +33 -34
  126. metadata +31 -32
@@ -1,42 +1,42 @@
1
- require 'windows/api'
2
-
3
- module Windows
4
- module Pipe
5
- API.auto_namespace = 'Windows::Pipe'
6
- API.auto_constant = true
7
- API.auto_method = true
8
- API.auto_unicode = true
9
-
10
- private
11
-
12
- NMPWAIT_NOWAIT = 0x00000001
13
- NMPWAIT_WAIT_FOREVER = 0xffffffff
14
- NMPWAIT_USE_DEFAULT_WAIT = 0x00000000
15
-
16
- PIPE_WAIT = 0x00000000
17
- PIPE_NOWAIT = 0x00000001
18
- PIPE_ACCESS_INBOUND = 0x00000001
19
- PIPE_ACCESS_OUTBOUND = 0x00000002
20
- PIPE_ACCESS_DUPLEX = 0x00000003
21
- PIPE_TYPE_BYTE = 0x00000000
22
- PIPE_TYPE_MESSAGE = 0x00000004
23
- PIPE_READMODE_BYTE = 0x00000000
24
- PIPE_READMODE_MESSAGE = 0x00000002
25
- PIPE_CLIENT_END = 0x00000000
26
- PIPE_SERVER_END = 0x00000001
27
-
28
- PIPE_UNLIMITED_INSTANCES = 255
29
-
30
- API.new('CallNamedPipe', 'PPLPLPL', 'B')
31
- API.new('ConnectNamedPipe', 'LP', 'B')
32
- API.new('CreateNamedPipe', 'PLLLLLLL', 'L')
33
- API.new('CreatePipe', 'PPPL', 'B')
34
- API.new('DisconnectNamedPipe', 'L', 'B')
35
- API.new('GetNamedPipeHandleState', 'LPPPPPL', 'B')
36
- API.new('GetNamedPipeInfo', 'LPPPP', 'B')
37
- API.new('PeekNamedPipe', 'LPLPPP', 'B')
38
- API.new('SetNamedPipeHandleState', 'LPPP', 'B')
39
- API.new('TransactNamedPipe', 'LPLPLPP', 'B')
40
- API.new('WaitNamedPipe', 'PL', 'B')
41
- end
42
- end
1
+ require 'windows/api'
2
+
3
+ module Windows
4
+ module Pipe
5
+ API.auto_namespace = 'Windows::Pipe'
6
+ API.auto_constant = true
7
+ API.auto_method = true
8
+ API.auto_unicode = true
9
+
10
+ private
11
+
12
+ NMPWAIT_NOWAIT = 0x00000001
13
+ NMPWAIT_WAIT_FOREVER = 0xffffffff
14
+ NMPWAIT_USE_DEFAULT_WAIT = 0x00000000
15
+
16
+ PIPE_WAIT = 0x00000000
17
+ PIPE_NOWAIT = 0x00000001
18
+ PIPE_ACCESS_INBOUND = 0x00000001
19
+ PIPE_ACCESS_OUTBOUND = 0x00000002
20
+ PIPE_ACCESS_DUPLEX = 0x00000003
21
+ PIPE_TYPE_BYTE = 0x00000000
22
+ PIPE_TYPE_MESSAGE = 0x00000004
23
+ PIPE_READMODE_BYTE = 0x00000000
24
+ PIPE_READMODE_MESSAGE = 0x00000002
25
+ PIPE_CLIENT_END = 0x00000000
26
+ PIPE_SERVER_END = 0x00000001
27
+
28
+ PIPE_UNLIMITED_INSTANCES = 255
29
+
30
+ API.new('CallNamedPipe', 'PPLPLPL', 'B')
31
+ API.new('ConnectNamedPipe', 'LP', 'B')
32
+ API.new('CreateNamedPipe', 'PLLLLLLL', 'L')
33
+ API.new('CreatePipe', 'PPPL', 'B')
34
+ API.new('DisconnectNamedPipe', 'L', 'B')
35
+ API.new('GetNamedPipeHandleState', 'LPPPPPL', 'B')
36
+ API.new('GetNamedPipeInfo', 'LPPPP', 'B')
37
+ API.new('PeekNamedPipe', 'LPLPPP', 'B')
38
+ API.new('SetNamedPipeHandleState', 'LPPP', 'B')
39
+ API.new('TransactNamedPipe', 'LPLPLPP', 'B')
40
+ API.new('WaitNamedPipe', 'PL', 'B')
41
+ end
42
+ end
@@ -1,176 +1,176 @@
1
- require 'windows/api'
2
-
3
- # The Windows module serves as a namespace only.
4
- module Windows
5
- # The Process module includes process related functions and constants,
6
- # including some tool help functions that relate to processes.
7
- module Process
8
- API.auto_namespace = 'Windows::Process'
9
- API.auto_constant = true
10
- API.auto_method = true
11
- API.auto_unicode = true
12
-
13
- private
14
-
15
- # Process access rights
16
-
17
- PROCESS_ALL_ACCESS = 0x1F0FFF
18
- PROCESS_CREATE_PROCESS = 0x0080
19
- PROCESS_CREATE_THREAD = 0x0002
20
- PROCESS_DUP_HANDLE = 0x0040
21
- PROCESS_QUERY_INFORMATION = 0x0400
22
- PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
23
- PROCESS_SET_QUOTA = 0x0100
24
- PROCESS_SET_INFORMATION = 0x0200
25
- PROCESS_SUSPEND_RESUME = 0x0800
26
- PROCESS_TERMINATE = 0x0001
27
- PROCESS_VM_OPERATION = 0x0008
28
- PROCESS_VM_READ = 0x0010
29
- PROCESS_VM_WRITE = 0x0020
30
- SYNCHRONIZE = 1048576
31
- STILL_ACTIVE = 259
32
-
33
- # Process priority flags
34
-
35
- ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000
36
- BELOW_NORMAL_PRIORITY_CLASS = 0x00004000
37
- HIGH_PRIORITY_CLASS = 0x00000080
38
- IDLE_PRIORITY_CLASS = 0x00000040
39
- NORMAL_PRIORITY_CLASS = 0x00000020
40
- REALTIME_PRIORITY_CLASS = 0x00000100
41
-
42
- # Process creation flags
43
-
44
- CREATE_BREAKAWAY_FROM_JOB = 0x01000000
45
- CREATE_DEFAULT_ERROR_MODE = 0x04000000
46
- CREATE_NEW_CONSOLE = 0x00000010
47
- CREATE_NEW_PROCESS_GROUP = 0x00000200
48
- CREATE_NO_WINDOW = 0x08000000
49
- CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000
50
- CREATE_SEPARATE_WOW_VDM = 0x00000800
51
- CREATE_SHARED_WOW_VDM = 0x00001000
52
- CREATE_SUSPENDED = 0x00000004
53
- CREATE_UNICODE_ENVIRONMENT = 0x00000400
54
- DEBUG_ONLY_THIS_PROCESS = 0x00000002
55
- DEBUG_PROCESS = 0x00000001
56
- DETACHED_PROCESS = 0x00000008
57
-
58
- STARTF_USESHOWWINDOW = 0x00000001
59
- STARTF_USESIZE = 0x00000002
60
- STARTF_USEPOSITION = 0x00000004
61
- STARTF_USECOUNTCHARS = 0x00000008
62
- STARTF_USEFILLATTRIBUTE = 0x00000010
63
- STARTF_RUNFULLSCREEN = 0x00000020
64
- STARTF_FORCEONFEEDBACK = 0x00000040
65
- STARTF_FORCEOFFFEEDBACK = 0x00000080
66
- STARTF_USESTDHANDLES = 0x00000100
67
- STARTF_USEHOTKEY = 0x00000200
68
-
69
- LOGON_WITH_PROFILE = 0x00000001
70
- LOGON_NETCREDENTIALS_ONLY = 0x00000002
71
-
72
- SHUTDOWN_NORETRY = 0x00000001
73
-
74
- # Job Object Classes
75
-
76
- JobObjectBasicLimitInformation = 2
77
- JobObjectBasicUIRestrictions = 4
78
- JobObjectSecurityLimitInformation = 5
79
- JobObjectEndOfJobTimeInformation = 6
80
- JobObjectAssociateCompletionPortInformation = 7
81
- JobObjectExtendedLimitInformation = 9
82
- JobObjectGroupInformation = 11
83
-
84
- # Job Limit Flags
85
-
86
- JOB_OBJECT_LIMIT_WORKINGSET = 0x00000001
87
- JOB_OBJECT_LIMIT_PROCESS_TIME = 0x00000002
88
- JOB_OBJECT_LIMIT_JOB_TIME = 0x00000004
89
- JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x00000008
90
- JOB_OBJECT_LIMIT_AFFINITY = 0x00000010
91
- JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x00000020
92
- JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x00000040
93
- JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x00000080
94
- JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x00000100
95
- JOB_OBJECT_LIMIT_JOB_MEMORY = 0x00000200
96
- JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400
97
- JOB_OBJECT_LIMIT_BREAKAWAY_OK = 0x00000800
98
- JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = 0x00001000
99
- JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000
100
-
101
- # Job Access Rights
102
-
103
- JOB_OBJECT_ASSIGN_PROCESS = 0x0001
104
- JOB_OBJECT_SET_ATTRIBUTES = 0x0002
105
- JOB_OBJECT_QUERY = 0x0004
106
- JOB_OBJECT_TERMINATE = 0x0008
107
- JOB_OBJECT_SET_SECURITY_ATTRIBUTES = 0x0010
108
- JOB_OBJECT_ALL_ACCESS = 0x1F001F
109
-
110
- # Functions
111
-
112
- API.new('AssignProcessToJobObject', 'LL', 'B')
113
- API.new('CreateJobObject', 'PS', 'L')
114
- API.new('CreateProcess', 'SPPPLLLPPP', 'B')
115
- API.new('CreateProcessAsUser', 'LSPLLILPPPP', 'B', 'advapi32')
116
- API.new('CreateProcessWithLogonW', 'SSSLSPLLSPP', 'B', 'advapi32')
117
- API.new('EnumProcesses', 'PLP', 'B', 'psapi')
118
- API.new('ExitProcess', 'L', 'V')
119
- API.new('FreeEnvironmentStrings', 'P', 'B')
120
- API.new('GetCommandLine', 'V', 'P')
121
- API.new('GetCurrentProcess', 'V', 'L')
122
- API.new('GetCurrentProcessId', 'V', 'L')
123
- API.new('GetEnvironmentStrings', 'V', 'L')
124
- API.new('GetEnvironmentVariable', 'SPL', 'L')
125
- API.new('GetExitCodeProcess', 'LP', 'B')
126
- API.new('GetGuiResources', 'LL', 'L', 'user32')
127
- API.new('GetPriorityClass', 'L', 'L')
128
- API.new('GetProcessAffinityMask', 'LPP', 'B')
129
- API.new('GetProcessIoCounters', 'LP', 'B')
130
- API.new('GetProcessPriorityBoost', 'LP', 'B')
131
- API.new('GetProcessShutdownParameters', 'PP', 'B')
132
- API.new('GetProcessTimes', 'LPPPP', 'B')
133
- API.new('GetProcessVersion', 'L', 'L')
134
- API.new('GetProcessWorkingSetSize', 'LPP', 'B')
135
- API.new('GetStartupInfo', 'P', 'V')
136
- API.new('OpenJobObject', 'LIS', 'L')
137
- API.new('OpenProcess', 'LIL', 'L')
138
- API.new('QueryInformationJobObject', 'LLPLP', 'B')
139
- API.new('SetEnvironmentVariable', 'SS', 'B')
140
- API.new('SetInformationJobObject', 'LLPL', 'B')
141
- API.new('SetPriorityClass', 'LL', 'B')
142
- API.new('SetProcessAffinityMask', 'LL', 'B')
143
- API.new('SetProcessPriorityBoost', 'LB', 'B')
144
- API.new('SetProcessShutdownParameters', 'LL', 'B')
145
- API.new('SetProcessWorkingSetSize', 'LLL', 'B')
146
- API.new('TerminateJobObject', 'LL', 'B')
147
- API.new('TerminateProcess', 'LL', 'B')
148
- API.new('WaitForInputIdle', 'LL', 'L', 'user32')
149
- API.new('WTSEnumerateProcesses', 'LLLPP', 'B', 'wtsapi32')
150
-
151
- begin
152
- API.new('GetProcessId', 'L', 'L')
153
- API.new('GetProcessHandleCount', 'LP', 'B')
154
- API.new('IsProcessInJob', 'LLP', 'B')
155
- API.new('IsWow64Process', 'LP', 'B')
156
- rescue Win32::API::LoadLibraryError
157
- # Windows XP or later
158
- end
159
-
160
- # Helper method to determine if you're on a 64 bit version of Windows
161
- def windows_64?
162
- bool = false
163
-
164
- if defined? IsWow64Process
165
- buf = 0.chr * 4
166
- if IsWow64Process(GetCurrentProcess(), buf)
167
- if buf.unpack('I')[0] == 1
168
- bool = true
169
- end
170
- end
171
- end
172
-
173
- bool
174
- end
175
- end
176
- end
1
+ require 'windows/api'
2
+
3
+ # The Windows module serves as a namespace only.
4
+ module Windows
5
+ # The Process module includes process related functions and constants,
6
+ # including some tool help functions that relate to processes.
7
+ module Process
8
+ API.auto_namespace = 'Windows::Process'
9
+ API.auto_constant = true
10
+ API.auto_method = true
11
+ API.auto_unicode = true
12
+
13
+ private
14
+
15
+ # Process access rights
16
+
17
+ PROCESS_ALL_ACCESS = 0x1F0FFF
18
+ PROCESS_CREATE_PROCESS = 0x0080
19
+ PROCESS_CREATE_THREAD = 0x0002
20
+ PROCESS_DUP_HANDLE = 0x0040
21
+ PROCESS_QUERY_INFORMATION = 0x0400
22
+ PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
23
+ PROCESS_SET_QUOTA = 0x0100
24
+ PROCESS_SET_INFORMATION = 0x0200
25
+ PROCESS_SUSPEND_RESUME = 0x0800
26
+ PROCESS_TERMINATE = 0x0001
27
+ PROCESS_VM_OPERATION = 0x0008
28
+ PROCESS_VM_READ = 0x0010
29
+ PROCESS_VM_WRITE = 0x0020
30
+ SYNCHRONIZE = 1048576
31
+ STILL_ACTIVE = 259
32
+
33
+ # Process priority flags
34
+
35
+ ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000
36
+ BELOW_NORMAL_PRIORITY_CLASS = 0x00004000
37
+ HIGH_PRIORITY_CLASS = 0x00000080
38
+ IDLE_PRIORITY_CLASS = 0x00000040
39
+ NORMAL_PRIORITY_CLASS = 0x00000020
40
+ REALTIME_PRIORITY_CLASS = 0x00000100
41
+
42
+ # Process creation flags
43
+
44
+ CREATE_BREAKAWAY_FROM_JOB = 0x01000000
45
+ CREATE_DEFAULT_ERROR_MODE = 0x04000000
46
+ CREATE_NEW_CONSOLE = 0x00000010
47
+ CREATE_NEW_PROCESS_GROUP = 0x00000200
48
+ CREATE_NO_WINDOW = 0x08000000
49
+ CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000
50
+ CREATE_SEPARATE_WOW_VDM = 0x00000800
51
+ CREATE_SHARED_WOW_VDM = 0x00001000
52
+ CREATE_SUSPENDED = 0x00000004
53
+ CREATE_UNICODE_ENVIRONMENT = 0x00000400
54
+ DEBUG_ONLY_THIS_PROCESS = 0x00000002
55
+ DEBUG_PROCESS = 0x00000001
56
+ DETACHED_PROCESS = 0x00000008
57
+
58
+ STARTF_USESHOWWINDOW = 0x00000001
59
+ STARTF_USESIZE = 0x00000002
60
+ STARTF_USEPOSITION = 0x00000004
61
+ STARTF_USECOUNTCHARS = 0x00000008
62
+ STARTF_USEFILLATTRIBUTE = 0x00000010
63
+ STARTF_RUNFULLSCREEN = 0x00000020
64
+ STARTF_FORCEONFEEDBACK = 0x00000040
65
+ STARTF_FORCEOFFFEEDBACK = 0x00000080
66
+ STARTF_USESTDHANDLES = 0x00000100
67
+ STARTF_USEHOTKEY = 0x00000200
68
+
69
+ LOGON_WITH_PROFILE = 0x00000001
70
+ LOGON_NETCREDENTIALS_ONLY = 0x00000002
71
+
72
+ SHUTDOWN_NORETRY = 0x00000001
73
+
74
+ # Job Object Classes
75
+
76
+ JobObjectBasicLimitInformation = 2
77
+ JobObjectBasicUIRestrictions = 4
78
+ JobObjectSecurityLimitInformation = 5
79
+ JobObjectEndOfJobTimeInformation = 6
80
+ JobObjectAssociateCompletionPortInformation = 7
81
+ JobObjectExtendedLimitInformation = 9
82
+ JobObjectGroupInformation = 11
83
+
84
+ # Job Limit Flags
85
+
86
+ JOB_OBJECT_LIMIT_WORKINGSET = 0x00000001
87
+ JOB_OBJECT_LIMIT_PROCESS_TIME = 0x00000002
88
+ JOB_OBJECT_LIMIT_JOB_TIME = 0x00000004
89
+ JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x00000008
90
+ JOB_OBJECT_LIMIT_AFFINITY = 0x00000010
91
+ JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x00000020
92
+ JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x00000040
93
+ JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x00000080
94
+ JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x00000100
95
+ JOB_OBJECT_LIMIT_JOB_MEMORY = 0x00000200
96
+ JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400
97
+ JOB_OBJECT_LIMIT_BREAKAWAY_OK = 0x00000800
98
+ JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = 0x00001000
99
+ JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000
100
+
101
+ # Job Access Rights
102
+
103
+ JOB_OBJECT_ASSIGN_PROCESS = 0x0001
104
+ JOB_OBJECT_SET_ATTRIBUTES = 0x0002
105
+ JOB_OBJECT_QUERY = 0x0004
106
+ JOB_OBJECT_TERMINATE = 0x0008
107
+ JOB_OBJECT_SET_SECURITY_ATTRIBUTES = 0x0010
108
+ JOB_OBJECT_ALL_ACCESS = 0x1F001F
109
+
110
+ # Functions
111
+
112
+ API.new('AssignProcessToJobObject', 'LL', 'B')
113
+ API.new('CreateJobObject', 'PS', 'L')
114
+ API.new('CreateProcess', 'SPPPLLLPPP', 'B')
115
+ API.new('CreateProcessAsUser', 'LSPLLILPPPP', 'B', 'advapi32')
116
+ API.new('CreateProcessWithLogonW', 'SSSLSPLLSPP', 'B', 'advapi32')
117
+ API.new('EnumProcesses', 'PLP', 'B', 'psapi')
118
+ API.new('ExitProcess', 'L', 'V')
119
+ API.new('FreeEnvironmentStrings', 'P', 'B')
120
+ API.new('GetCommandLine', 'V', 'P')
121
+ API.new('GetCurrentProcess', 'V', 'L')
122
+ API.new('GetCurrentProcessId', 'V', 'L')
123
+ API.new('GetEnvironmentStrings', 'V', 'L')
124
+ API.new('GetEnvironmentVariable', 'SPL', 'L')
125
+ API.new('GetExitCodeProcess', 'LP', 'B')
126
+ API.new('GetGuiResources', 'LL', 'L', 'user32')
127
+ API.new('GetPriorityClass', 'L', 'L')
128
+ API.new('GetProcessAffinityMask', 'LPP', 'B')
129
+ API.new('GetProcessIoCounters', 'LP', 'B')
130
+ API.new('GetProcessPriorityBoost', 'LP', 'B')
131
+ API.new('GetProcessShutdownParameters', 'PP', 'B')
132
+ API.new('GetProcessTimes', 'LPPPP', 'B')
133
+ API.new('GetProcessVersion', 'L', 'L')
134
+ API.new('GetProcessWorkingSetSize', 'LPP', 'B')
135
+ API.new('GetStartupInfo', 'P', 'V')
136
+ API.new('OpenJobObject', 'LIS', 'L')
137
+ API.new('OpenProcess', 'LIL', 'L')
138
+ API.new('QueryInformationJobObject', 'LLPLP', 'B')
139
+ API.new('SetEnvironmentVariable', 'SS', 'B')
140
+ API.new('SetInformationJobObject', 'LLPL', 'B')
141
+ API.new('SetPriorityClass', 'LL', 'B')
142
+ API.new('SetProcessAffinityMask', 'LL', 'B')
143
+ API.new('SetProcessPriorityBoost', 'LB', 'B')
144
+ API.new('SetProcessShutdownParameters', 'LL', 'B')
145
+ API.new('SetProcessWorkingSetSize', 'LLL', 'B')
146
+ API.new('TerminateJobObject', 'LL', 'B')
147
+ API.new('TerminateProcess', 'LL', 'B')
148
+ API.new('WaitForInputIdle', 'LL', 'L', 'user32')
149
+ API.new('WTSEnumerateProcesses', 'LLLPP', 'B', 'wtsapi32')
150
+
151
+ begin
152
+ API.new('GetProcessId', 'L', 'L')
153
+ API.new('GetProcessHandleCount', 'LP', 'B')
154
+ API.new('IsProcessInJob', 'LLP', 'B')
155
+ API.new('IsWow64Process', 'LP', 'B')
156
+ rescue Win32::API::LoadLibraryError
157
+ # Windows XP or later
158
+ end
159
+
160
+ # Helper method to determine if you're on a 64 bit version of Windows
161
+ def windows_64?
162
+ bool = false
163
+
164
+ if defined? IsWow64Process
165
+ buf = 0.chr * 4
166
+ if IsWow64Process(GetCurrentProcess(), buf)
167
+ if buf.unpack('I')[0] == 1
168
+ bool = true
169
+ end
170
+ end
171
+ end
172
+
173
+ bool
174
+ end
175
+ end
176
+ end
@@ -1,171 +1,171 @@
1
- require 'windows/file'
2
-
3
- module Windows
4
- module Registry
5
- API.auto_namespace = 'Windows::Registry'
6
- API.auto_constant = true
7
- API.auto_method = true
8
- API.auto_unicode = true
9
-
10
- private
11
-
12
- include Windows::File
13
-
14
- HKEY_CLASSES_ROOT = 0x80000000
15
- HKEY_CURRENT_USER = 0x80000001
16
- HKEY_LOCAL_MACHINE = 0x80000002
17
- HKEY_USERS = 0x80000003
18
- HKEY_PERFORMANCE_DATA = 0x80000004
19
- HKEY_PERFORMANCE_TEXT = 0x80000050
20
- HKEY_PERFORMANCE_NLSTEXT = 0x80000060
21
- HKEY_CURRENT_CONFIG = 0x80000005
22
- HKEY_DYN_DATA = 0x80000006
23
-
24
- KEY_QUERY_VALUE = 0x0001
25
- KEY_SET_VALUE = 0x0002
26
- KEY_CREATE_SUB_KEY = 0x0004
27
- KEY_ENUMERATE_SUB_KEYS = 0x0008
28
- KEY_NOTIFY = 0x0010
29
- KEY_CREATE_LINK = 0x0020
30
- KEY_WOW64_32KEY = 0x0200
31
- KEY_WOW64_64KEY = 0x0100
32
- KEY_WOW64_RES = 0x0300
33
-
34
- KEY_READ = (STANDARD_RIGHTS_READ|KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS|
35
- KEY_NOTIFY) & (~SYNCHRONIZE)
36
-
37
- KEY_WRITE = (STANDARD_RIGHTS_WRITE|KEY_SET_VALUE|
38
- KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE)
39
-
40
- KEY_EXECUTE = KEY_READ & (~SYNCHRONIZE)
41
-
42
- KEY_ALL_ACCESS = (STANDARD_RIGHTS_ALL|KEY_QUERY_VALUE|KEY_SET_VALUE|
43
- KEY_CREATE_SUB_KEY|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY|
44
- KEY_CREATE_LINK) & (~SYNCHRONIZE)
45
-
46
- REG_OPTION_RESERVED = 0
47
- REG_OPTION_NON_VOLATILE = 0
48
- REG_OPTION_VOLATILE = 1
49
- REG_OPTION_CREATE_LINK = 2
50
- REG_OPTION_BACKUP_RESTORE = 4
51
- REG_OPTION_OPEN_LINK = 8
52
-
53
- REG_LEGAL_OPTION = REG_OPTION_RESERVED|REG_OPTION_NON_VOLATILE|
54
- REG_OPTION_VOLATILE|REG_OPTION_CREATE_LINK|REG_OPTION_BACKUP_RESTORE|
55
- REG_OPTION_OPEN_LINK
56
-
57
- REG_CREATED_NEW_KEY = 1
58
- REG_OPENED_EXISTING_KEY = 2
59
-
60
- REG_STANDARD_FORMAT = 1
61
- REG_LATEST_FORMAT = 2
62
- REG_NO_COMPRESSION = 4
63
-
64
- REG_WHOLE_HIVE_VOLATILE = 1
65
- REG_REFRESH_HIVE = 2
66
- REG_NO_LAZY_FLUSH = 4
67
- REG_FORCE_RESTORE = 8
68
-
69
- REG_FORCE_UNLOAD = 1
70
-
71
- REG_NOTIFY_CHANGE_NAME = 1
72
- REG_NOTIFY_CHANGE_ATTRIBUTES = 2
73
- REG_NOTIFY_CHANGE_LAST_SET = 4
74
- REG_NOTIFY_CHANGE_SECURITY = 8
75
-
76
- REG_LEGAL_CHANGE_FILTER = REG_NOTIFY_CHANGE_NAME|
77
- REG_NOTIFY_CHANGE_ATTRIBUTES|REG_NOTIFY_CHANGE_LAST_SET|
78
- REG_NOTIFY_CHANGE_SECURITY
79
-
80
- REG_NONE = 0
81
- REG_SZ = 1
82
- REG_EXPAND_SZ = 2
83
- REG_BINARY = 3
84
- REG_DWORD = 4
85
- REG_DWORD_LITTLE_ENDIAN = 4
86
- REG_DWORD_BIG_ENDIAN = 5
87
- REG_LINK = 6
88
- REG_MULTI_SZ = 7
89
- REG_RESOURCE_LIST = 8
90
- REG_FULL_RESOURCE_DESCRIPTOR = 9
91
- REG_RESOURCE_REQUIREMENTS_LIST = 10
92
- REG_QWORD = 11
93
- REG_QWORD_LITTLE_ENDIAN = 11
94
-
95
- # Registry Routine Flags
96
-
97
- RRF_RT_REG_NONE = 0x00000001 # restrict type to REG_NONE
98
- RRF_RT_REG_SZ = 0x00000002 # restrict type to REG_SZ
99
- RRF_RT_REG_EXPAND_SZ = 0x00000004 # restrict type to REG_EXPAND_SZ
100
- RRF_RT_REG_BINARY = 0x00000008 # restrict type to REG_BINARY
101
- RRF_RT_REG_DWORD = 0x00000010 # restrict type to REG_DWORD
102
- RRF_RT_REG_MULTI_SZ = 0x00000020 # restrict type to REG_MULTI_SZ
103
- RRF_RT_REG_QWORD = 0x00000040 # restrict type to REG_QWORD
104
- RRF_RT_ANY = 0x0000ffff
105
- RRF_NOEXPAND = 0x10000000
106
- RRF_ZEROONFAILURE = 0x20000000
107
- RRF_RT_DWORD = (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)
108
- RRF_RT_QWORD = (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)
109
-
110
- API.new('RegCloseKey', 'L', 'L', 'advapi32')
111
- API.new('RegConnectRegistry', 'PLP', 'L', 'advapi32')
112
- API.new('RegCreateKey', 'LPP', 'L', 'advapi32')
113
- API.new('RegCreateKeyEx', 'LPLPLLPPP', 'L', 'advapi32')
114
- API.new('RegDeleteKey', 'LP', 'L', 'advapi32')
115
- API.new('RegDeleteValue', 'LP', 'L', 'advapi32')
116
- API.new('RegDisablePredefinedCache', 'V', 'L', 'advapi32')
117
- API.new('RegEnumKey', 'LLPL', 'L', 'advapi32')
118
- API.new('RegEnumKeyEx', 'LLPPPPPP', 'L', 'advapi32')
119
- API.new('RegEnumValue', 'LLPPPPPP', 'L', 'advapi32')
120
- API.new('RegFlushKey', 'L', 'L', 'advapi32')
121
- API.new('RegGetKeySecurity','LLPP','L','advapi32')
122
- API.new('RegLoadKey', 'LPP', 'L', 'advapi32')
123
- API.new('RegNotifyChangeKeyValue', 'LILLI', 'L', 'advapi32')
124
- API.new('RegOpenCurrentUser', 'LP', 'L', 'advapi32')
125
- API.new('RegOpenKey', 'LPP', 'L', 'advapi32')
126
- API.new('RegOpenKeyEx', 'LPLLP', 'L', 'advapi32')
127
- API.new('RegOpenUserClassesRoot', 'LLLP', 'L', 'advapi32')
128
- API.new('RegOverridePredefKey', 'LL', 'L', 'advapi32')
129
- API.new('RegQueryInfoKey', 'LPPPPPPPPPPP', 'L', 'advapi32')
130
- API.new('RegQueryMultipleValues', 'LPLPP', 'L', 'advapi32')
131
- API.new('RegQueryValueEx', 'LPPPPP', 'L', 'advapi32')
132
- API.new('RegReplaceKey', 'LPPP', 'L', 'advapi32')
133
- API.new('RegRestoreKey', 'LPL', 'L', 'advapi32')
134
- API.new('RegSaveKey', 'LPP', 'L', 'advapi32')
135
- API.new('RegSetKeySecurity','LLP','L','advapi32')
136
- API.new('RegSetValueEx', 'LPLLPL', 'L', 'advapi32')
137
- API.new('RegUnLoadKey', 'LP', 'L', 'advapi32')
138
-
139
- begin
140
- API.new('RegGetValue', 'LPPLPPP', 'L', 'advapi32')
141
- rescue Win32::API::LoadLibraryError
142
- # Windows XP 64 or later
143
- end
144
-
145
- begin
146
- API.new('RegSaveKeyEx', 'LPPL', 'L', 'advapi32')
147
- rescue Win32::API::LoadLibraryError
148
- # Windows XP or later
149
- end
150
-
151
- begin
152
- API.new('GetSystemRegistryQuota','LPLL','L')
153
- API.new('RegDeleteKeyEx','LPLL','L','advapi32')
154
- API.new('RegDisableReflectionKey', 'L', 'L', 'advapi32')
155
- API.new('RegEnableReflectionKey', 'L', 'L', 'advapi32')
156
- API.new('RegQueryReflectionKey','LB','L','advapi32')
157
- API.new('RegCopyTree','LPL','L','advapi32')
158
- API.new('RegCreateKeyTransacted','LPLPLLPPPLP','L','advapi32')
159
- API.new('RegDeleteKeyValue','LP','L','advapi32')
160
- API.new('RegDeleteTree','LP','L','advapi32')
161
- API.new('RegDeleteKeyTransacted','LPLLLP','L','advapi32')
162
- API.new('RegDisablePredefinedCacheEx', 'V', 'L', 'advapi32')
163
- API.new('RegLoadAppKey','PPLLL','L','advapi32')
164
- API.new('RegLoadMUIString', 'LPPLPLP', 'L', 'advapi32')
165
- API.new('RegOpenKeyTransacted','LPLLPLP','L','advapi32')
166
- API.new('RegSetKeyValue','LPPLPL','L','advapi32')
167
- rescue Win32::API::LoadLibraryError
168
- # Windows Vista or later
169
- end
170
- end
171
- end
1
+ require 'windows/file'
2
+
3
+ module Windows
4
+ module Registry
5
+ API.auto_namespace = 'Windows::Registry'
6
+ API.auto_constant = true
7
+ API.auto_method = true
8
+ API.auto_unicode = true
9
+
10
+ private
11
+
12
+ include Windows::File
13
+
14
+ HKEY_CLASSES_ROOT = 0x80000000
15
+ HKEY_CURRENT_USER = 0x80000001
16
+ HKEY_LOCAL_MACHINE = 0x80000002
17
+ HKEY_USERS = 0x80000003
18
+ HKEY_PERFORMANCE_DATA = 0x80000004
19
+ HKEY_PERFORMANCE_TEXT = 0x80000050
20
+ HKEY_PERFORMANCE_NLSTEXT = 0x80000060
21
+ HKEY_CURRENT_CONFIG = 0x80000005
22
+ HKEY_DYN_DATA = 0x80000006
23
+
24
+ KEY_QUERY_VALUE = 0x0001
25
+ KEY_SET_VALUE = 0x0002
26
+ KEY_CREATE_SUB_KEY = 0x0004
27
+ KEY_ENUMERATE_SUB_KEYS = 0x0008
28
+ KEY_NOTIFY = 0x0010
29
+ KEY_CREATE_LINK = 0x0020
30
+ KEY_WOW64_32KEY = 0x0200
31
+ KEY_WOW64_64KEY = 0x0100
32
+ KEY_WOW64_RES = 0x0300
33
+
34
+ KEY_READ = (STANDARD_RIGHTS_READ|KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS|
35
+ KEY_NOTIFY) & (~SYNCHRONIZE)
36
+
37
+ KEY_WRITE = (STANDARD_RIGHTS_WRITE|KEY_SET_VALUE|
38
+ KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE)
39
+
40
+ KEY_EXECUTE = KEY_READ & (~SYNCHRONIZE)
41
+
42
+ KEY_ALL_ACCESS = (STANDARD_RIGHTS_ALL|KEY_QUERY_VALUE|KEY_SET_VALUE|
43
+ KEY_CREATE_SUB_KEY|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY|
44
+ KEY_CREATE_LINK) & (~SYNCHRONIZE)
45
+
46
+ REG_OPTION_RESERVED = 0
47
+ REG_OPTION_NON_VOLATILE = 0
48
+ REG_OPTION_VOLATILE = 1
49
+ REG_OPTION_CREATE_LINK = 2
50
+ REG_OPTION_BACKUP_RESTORE = 4
51
+ REG_OPTION_OPEN_LINK = 8
52
+
53
+ REG_LEGAL_OPTION = REG_OPTION_RESERVED|REG_OPTION_NON_VOLATILE|
54
+ REG_OPTION_VOLATILE|REG_OPTION_CREATE_LINK|REG_OPTION_BACKUP_RESTORE|
55
+ REG_OPTION_OPEN_LINK
56
+
57
+ REG_CREATED_NEW_KEY = 1
58
+ REG_OPENED_EXISTING_KEY = 2
59
+
60
+ REG_STANDARD_FORMAT = 1
61
+ REG_LATEST_FORMAT = 2
62
+ REG_NO_COMPRESSION = 4
63
+
64
+ REG_WHOLE_HIVE_VOLATILE = 1
65
+ REG_REFRESH_HIVE = 2
66
+ REG_NO_LAZY_FLUSH = 4
67
+ REG_FORCE_RESTORE = 8
68
+
69
+ REG_FORCE_UNLOAD = 1
70
+
71
+ REG_NOTIFY_CHANGE_NAME = 1
72
+ REG_NOTIFY_CHANGE_ATTRIBUTES = 2
73
+ REG_NOTIFY_CHANGE_LAST_SET = 4
74
+ REG_NOTIFY_CHANGE_SECURITY = 8
75
+
76
+ REG_LEGAL_CHANGE_FILTER = REG_NOTIFY_CHANGE_NAME|
77
+ REG_NOTIFY_CHANGE_ATTRIBUTES|REG_NOTIFY_CHANGE_LAST_SET|
78
+ REG_NOTIFY_CHANGE_SECURITY
79
+
80
+ REG_NONE = 0
81
+ REG_SZ = 1
82
+ REG_EXPAND_SZ = 2
83
+ REG_BINARY = 3
84
+ REG_DWORD = 4
85
+ REG_DWORD_LITTLE_ENDIAN = 4
86
+ REG_DWORD_BIG_ENDIAN = 5
87
+ REG_LINK = 6
88
+ REG_MULTI_SZ = 7
89
+ REG_RESOURCE_LIST = 8
90
+ REG_FULL_RESOURCE_DESCRIPTOR = 9
91
+ REG_RESOURCE_REQUIREMENTS_LIST = 10
92
+ REG_QWORD = 11
93
+ REG_QWORD_LITTLE_ENDIAN = 11
94
+
95
+ # Registry Routine Flags
96
+
97
+ RRF_RT_REG_NONE = 0x00000001 # restrict type to REG_NONE
98
+ RRF_RT_REG_SZ = 0x00000002 # restrict type to REG_SZ
99
+ RRF_RT_REG_EXPAND_SZ = 0x00000004 # restrict type to REG_EXPAND_SZ
100
+ RRF_RT_REG_BINARY = 0x00000008 # restrict type to REG_BINARY
101
+ RRF_RT_REG_DWORD = 0x00000010 # restrict type to REG_DWORD
102
+ RRF_RT_REG_MULTI_SZ = 0x00000020 # restrict type to REG_MULTI_SZ
103
+ RRF_RT_REG_QWORD = 0x00000040 # restrict type to REG_QWORD
104
+ RRF_RT_ANY = 0x0000ffff
105
+ RRF_NOEXPAND = 0x10000000
106
+ RRF_ZEROONFAILURE = 0x20000000
107
+ RRF_RT_DWORD = (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)
108
+ RRF_RT_QWORD = (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)
109
+
110
+ API.new('RegCloseKey', 'L', 'L', 'advapi32')
111
+ API.new('RegConnectRegistry', 'PLP', 'L', 'advapi32')
112
+ API.new('RegCreateKey', 'LPP', 'L', 'advapi32')
113
+ API.new('RegCreateKeyEx', 'LPLPLLPPP', 'L', 'advapi32')
114
+ API.new('RegDeleteKey', 'LP', 'L', 'advapi32')
115
+ API.new('RegDeleteValue', 'LP', 'L', 'advapi32')
116
+ API.new('RegDisablePredefinedCache', 'V', 'L', 'advapi32')
117
+ API.new('RegEnumKey', 'LLPL', 'L', 'advapi32')
118
+ API.new('RegEnumKeyEx', 'LLPPPPPP', 'L', 'advapi32')
119
+ API.new('RegEnumValue', 'LLPPPPPP', 'L', 'advapi32')
120
+ API.new('RegFlushKey', 'L', 'L', 'advapi32')
121
+ API.new('RegGetKeySecurity','LLPP','L','advapi32')
122
+ API.new('RegLoadKey', 'LPP', 'L', 'advapi32')
123
+ API.new('RegNotifyChangeKeyValue', 'LILLI', 'L', 'advapi32')
124
+ API.new('RegOpenCurrentUser', 'LP', 'L', 'advapi32')
125
+ API.new('RegOpenKey', 'LPP', 'L', 'advapi32')
126
+ API.new('RegOpenKeyEx', 'LPLLP', 'L', 'advapi32')
127
+ API.new('RegOpenUserClassesRoot', 'LLLP', 'L', 'advapi32')
128
+ API.new('RegOverridePredefKey', 'LL', 'L', 'advapi32')
129
+ API.new('RegQueryInfoKey', 'LPPPPPPPPPPP', 'L', 'advapi32')
130
+ API.new('RegQueryMultipleValues', 'LPLPP', 'L', 'advapi32')
131
+ API.new('RegQueryValueEx', 'LPPPPP', 'L', 'advapi32')
132
+ API.new('RegReplaceKey', 'LPPP', 'L', 'advapi32')
133
+ API.new('RegRestoreKey', 'LPL', 'L', 'advapi32')
134
+ API.new('RegSaveKey', 'LPP', 'L', 'advapi32')
135
+ API.new('RegSetKeySecurity','LLP','L','advapi32')
136
+ API.new('RegSetValueEx', 'LPLLPL', 'L', 'advapi32')
137
+ API.new('RegUnLoadKey', 'LP', 'L', 'advapi32')
138
+
139
+ begin
140
+ API.new('RegGetValue', 'LPPLPPP', 'L', 'advapi32')
141
+ rescue Win32::API::LoadLibraryError
142
+ # Windows XP 64 or later
143
+ end
144
+
145
+ begin
146
+ API.new('RegSaveKeyEx', 'LPPL', 'L', 'advapi32')
147
+ rescue Win32::API::LoadLibraryError
148
+ # Windows XP or later
149
+ end
150
+
151
+ begin
152
+ API.new('GetSystemRegistryQuota','LPLL','L')
153
+ API.new('RegDeleteKeyEx','LPLL','L','advapi32')
154
+ API.new('RegDisableReflectionKey', 'L', 'L', 'advapi32')
155
+ API.new('RegEnableReflectionKey', 'L', 'L', 'advapi32')
156
+ API.new('RegQueryReflectionKey','LB','L','advapi32')
157
+ API.new('RegCopyTree','LPL','L','advapi32')
158
+ API.new('RegCreateKeyTransacted','LPLPLLPPPLP','L','advapi32')
159
+ API.new('RegDeleteKeyValue','LP','L','advapi32')
160
+ API.new('RegDeleteTree','LP','L','advapi32')
161
+ API.new('RegDeleteKeyTransacted','LPLLLP','L','advapi32')
162
+ API.new('RegDisablePredefinedCacheEx', 'V', 'L', 'advapi32')
163
+ API.new('RegLoadAppKey','PPLLL','L','advapi32')
164
+ API.new('RegLoadMUIString', 'LPPLPLP', 'L', 'advapi32')
165
+ API.new('RegOpenKeyTransacted','LPLLPLP','L','advapi32')
166
+ API.new('RegSetKeyValue','LPPLPL','L','advapi32')
167
+ rescue Win32::API::LoadLibraryError
168
+ # Windows Vista or later
169
+ end
170
+ end
171
+ end