windows-pr 1.1.2 → 1.1.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 (115) hide show
  1. data/CHANGES +408 -404
  2. data/MANIFEST +65 -65
  3. data/README +149 -149
  4. data/Rakefile +52 -52
  5. data/doc/conversion_guide.txt +37 -37
  6. data/lib/windows/clipboard.rb +59 -59
  7. data/lib/windows/com.rb +190 -189
  8. data/lib/windows/com/automation.rb +147 -147
  9. data/lib/windows/com/variant.rb +22 -22
  10. data/lib/windows/console.rb +112 -112
  11. data/lib/windows/debug.rb +33 -33
  12. data/lib/windows/device_io.rb +246 -246
  13. data/lib/windows/directory.rb +25 -25
  14. data/lib/windows/error.rb +482 -482
  15. data/lib/windows/eventlog.rb +78 -78
  16. data/lib/windows/file.rb +262 -262
  17. data/lib/windows/file_mapping.rb +23 -23
  18. data/lib/windows/filesystem.rb +13 -13
  19. data/lib/windows/gdi/bitmap.rb +63 -63
  20. data/lib/windows/gdi/device_context.rb +44 -44
  21. data/lib/windows/gdi/metafile.rb +38 -38
  22. data/lib/windows/gdi/painting_drawing.rb +113 -113
  23. data/lib/windows/handle.rb +21 -21
  24. data/lib/windows/library.rb +42 -42
  25. data/lib/windows/limits.rb +31 -31
  26. data/lib/windows/mailslot.rb +22 -22
  27. data/lib/windows/memory.rb +126 -126
  28. data/lib/windows/msvcrt/buffer.rb +73 -73
  29. data/lib/windows/msvcrt/directory.rb +29 -29
  30. data/lib/windows/msvcrt/file.rb +45 -45
  31. data/lib/windows/msvcrt/io.rb +71 -71
  32. data/lib/windows/msvcrt/time.rb +167 -167
  33. data/lib/windows/national.rb +578 -578
  34. data/lib/windows/network/management.rb +523 -523
  35. data/lib/windows/network/snmp.rb +90 -90
  36. data/lib/windows/network/winsock.rb +126 -126
  37. data/lib/windows/nio.rb +48 -47
  38. data/lib/windows/ntfs/winternl.rb +96 -96
  39. data/lib/windows/path.rb +141 -141
  40. data/lib/windows/pipe.rb +40 -40
  41. data/lib/windows/process.rb +174 -174
  42. data/lib/windows/registry.rb +126 -126
  43. data/lib/windows/security.rb +477 -477
  44. data/lib/windows/security/authentication.rb +30 -30
  45. data/lib/windows/service.rb +140 -140
  46. data/lib/windows/shell.rb +169 -169
  47. data/lib/windows/sound.rb +37 -37
  48. data/lib/windows/synchronize.rb +131 -131
  49. data/lib/windows/system_info.rb +227 -222
  50. data/lib/windows/thread.rb +62 -62
  51. data/lib/windows/time.rb +46 -46
  52. data/lib/windows/tool_helper.rb +34 -34
  53. data/lib/windows/volume.rb +59 -59
  54. data/lib/windows/window.rb +79 -79
  55. data/lib/windows/window/classes.rb +57 -57
  56. data/lib/windows/window/dialog.rb +89 -89
  57. data/lib/windows/window/menu.rb +100 -100
  58. data/lib/windows/window/message.rb +295 -295
  59. data/lib/windows/window/properties.rb +18 -18
  60. data/lib/windows/window/timer.rb +17 -17
  61. data/test/tc_clipboard.rb +41 -41
  62. data/test/tc_com.rb +32 -32
  63. data/test/tc_com_automation.rb +15 -15
  64. data/test/tc_console.rb +108 -108
  65. data/test/tc_debug.rb +48 -48
  66. data/test/tc_device_io.rb +29 -29
  67. data/test/tc_directory.rb +25 -25
  68. data/test/tc_error.rb +49 -49
  69. data/test/tc_eventlog.rb +58 -58
  70. data/test/tc_file.rb +67 -67
  71. data/test/tc_file_mapping.rb +38 -38
  72. data/test/tc_filesystem.rb +27 -27
  73. data/test/tc_gdi_bitmap.rb +25 -25
  74. data/test/tc_gdi_metafile.rb +23 -23
  75. data/test/tc_handle.rb +36 -36
  76. data/test/tc_library.rb +37 -37
  77. data/test/tc_limits.rb +34 -34
  78. data/test/tc_mailslot.rb +22 -22
  79. data/test/tc_memory.rb +44 -44
  80. data/test/tc_msvcrt_buffer.rb +68 -68
  81. data/test/tc_msvcrt_directory.rb +98 -98
  82. data/test/tc_msvcrt_file.rb +80 -80
  83. data/test/tc_msvcrt_io.rb +48 -48
  84. data/test/tc_msvcrt_string.rb +93 -93
  85. data/test/tc_msvcrt_time.rb +29 -29
  86. data/test/tc_national.rb +38 -38
  87. data/test/tc_network_management.rb +32 -32
  88. data/test/tc_network_snmp.rb +31 -31
  89. data/test/tc_network_winsock.rb +34 -34
  90. data/test/tc_nio.rb +32 -32
  91. data/test/tc_ntfs_winternl.rb +29 -29
  92. data/test/tc_path.rb +90 -90
  93. data/test/tc_pipe.rb +53 -53
  94. data/test/tc_process.rb +24 -24
  95. data/test/tc_registry.rb +29 -29
  96. data/test/tc_security.rb +104 -104
  97. data/test/tc_security_authentication.rb +34 -34
  98. data/test/tc_service.rb +57 -57
  99. data/test/tc_shell.rb +34 -34
  100. data/test/tc_sound.rb +37 -37
  101. data/test/tc_synchronize.rb +75 -75
  102. data/test/tc_system_info.rb +43 -43
  103. data/test/tc_thread.rb +29 -29
  104. data/test/tc_time.rb +32 -32
  105. data/test/tc_tool_helper.rb +29 -29
  106. data/test/tc_volume.rb +47 -47
  107. data/test/tc_window.rb +45 -45
  108. data/test/tc_window_classes.rb +33 -33
  109. data/test/tc_window_dialog.rb +33 -33
  110. data/test/tc_window_menu.rb +29 -29
  111. data/test/tc_window_message.rb +33 -33
  112. data/test/tc_window_properties.rb +29 -29
  113. data/test/tc_window_timer.rb +29 -29
  114. data/windows-pr.gemspec +34 -34
  115. metadata +4 -4
@@ -1,25 +1,25 @@
1
- require 'windows/api'
2
-
3
- # The Windows::Directory module contains functions that are used in directory
4
- # management. Note that functions that could be applied to files or
5
- # directories, such as CreateFile(), are probably in the Windows::File
6
- # module.
7
- #
8
- module Windows
9
- module Directory
10
- API.auto_namespace = 'Windows::Directory'
11
- API.auto_constant = true
12
- API.auto_method = true
13
- API.auto_unicode = true
14
-
15
- API.new('CreateDirectory', 'PP', 'B')
16
- API.new('CreateDirectoryEx', 'PPP', 'B')
17
- API.new('FindCloseChangeNotification', 'L', 'B')
18
- API.new('FindFirstChangeNotification', 'PIL', 'L')
19
- API.new('FindNextChangeNotification', 'PIL', 'B')
20
- API.new('GetCurrentDirectory', 'LP', 'L')
21
- API.new('ReadDirectoryChangesW', 'LPLILPPP', 'B') # No ANSI equivalent
22
- API.new('RemoveDirectory', 'P', 'B')
23
- API.new('SetCurrentDirectory', 'P', 'B')
24
- end
25
- end
1
+ require 'windows/api'
2
+
3
+ # The Windows::Directory module contains functions that are used in directory
4
+ # management. Note that functions that could be applied to files or
5
+ # directories, such as CreateFile(), are probably in the Windows::File
6
+ # module.
7
+ #
8
+ module Windows
9
+ module Directory
10
+ API.auto_namespace = 'Windows::Directory'
11
+ API.auto_constant = true
12
+ API.auto_method = true
13
+ API.auto_unicode = true
14
+
15
+ API.new('CreateDirectory', 'PP', 'B')
16
+ API.new('CreateDirectoryEx', 'PPP', 'B')
17
+ API.new('FindCloseChangeNotification', 'L', 'B')
18
+ API.new('FindFirstChangeNotification', 'PIL', 'L')
19
+ API.new('FindNextChangeNotification', 'PIL', 'B')
20
+ API.new('GetCurrentDirectory', 'LP', 'L')
21
+ API.new('ReadDirectoryChangesW', 'LPLILPPP', 'B') # No ANSI equivalent
22
+ API.new('RemoveDirectory', 'P', 'B')
23
+ API.new('SetCurrentDirectory', 'P', 'B')
24
+ end
25
+ end
data/lib/windows/error.rb CHANGED
@@ -1,482 +1,482 @@
1
- ############################################################################
2
- # error.rb
3
- #
4
- # Includes all of the error codes in error.h, msterr.h and some from
5
- # winerror.h.
6
- #
7
- # Adds the following convenience methods:
8
- #
9
- # get_last_error - Returns a human readable string for the error returned
10
- # by the GetLastError() function.
11
- ############################################################################
12
- require 'windows/api'
13
-
14
- module Windows
15
- module Error
16
- API.auto_namespace = 'Windows::Error'
17
- API.auto_method = true
18
- API.auto_constant = true
19
- API.auto_unicode = true
20
-
21
- FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100
22
- FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200
23
- FORMAT_MESSAGE_FROM_STRING = 0x00000400
24
- FORMAT_MESSAGE_FROM_HMODULE = 0x00000800
25
- FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000
26
- FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000
27
- FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF
28
-
29
- SEM_FAILCRITICALERRORS = 0x0001
30
- SEM_NOALIGNMENTFAULTEXCEPT = 0x0004
31
- SEM_NOGPFAULTERRORBOX = 0x0002
32
- SEM_NOOPENFILEERRORBOX = 0x8000
33
-
34
- S_OK = 0
35
- NO_ERROR = 0
36
- ERROR_SUCCESS = 0
37
- ERROR_INVALID_FUNCTION = 1
38
- ERROR_FILE_NOT_FOUND = 2
39
- ERROR_PATH_NOT_FOUND = 3
40
- ERROR_TOO_MANY_OPEN_FILES = 4
41
- ERROR_ACCESS_DENIED = 5
42
- ERROR_INVALID_HANDLE = 6
43
- ERROR_ARENA_TRASHED = 7
44
- ERROR_NOT_ENOUGH_MEMORY = 8
45
- ERROR_INVALID_BLOCK = 9
46
- ERROR_BAD_ENVIRONMENT = 10
47
- ERROR_BAD_FORMAT = 11
48
- ERROR_INVALID_ACCESS = 12
49
- ERROR_INVALID_DATA = 13
50
- ERROR_INVALID_DRIVE = 15
51
- ERROR_CURRENT_DIRECTORY = 16
52
- ERROR_NOT_SAME_DEVICE = 17
53
- ERROR_NO_MORE_FILES = 18
54
-
55
- ERROR_WRITE_PROTECT = 19
56
- ERROR_BAD_UNIT = 20
57
- ERROR_NOT_READY = 21
58
- ERROR_BAD_COMMAND = 22
59
- ERROR_CRC = 23
60
- ERROR_BAD_LENGTH = 24
61
- ERROR_SEEK = 25
62
- ERROR_NOT_DOS_DISK = 26
63
- ERROR_SECTOR_NOT_FOUND = 27
64
- ERROR_OUT_OF_PAPER = 28
65
- ERROR_WRITE_FAULT = 29
66
- ERROR_READ_FAULT = 30
67
- ERROR_GEN_FAILURE = 31
68
-
69
- ERROR_SHARING_VIOLATION = 32
70
- ERROR_LOCK_VIOLATION = 33
71
- ERROR_WRONG_DISK = 34
72
- ERROR_FCB_UNAVAILABLE = 35
73
- ERROR_SHARING_BUFFER_EXCEEDED = 36
74
- ERROR_HANDLE_EOF = 38
75
- ERROR_HANDLE_DISK_FULL = 39
76
-
77
- ERROR_NOT_SUPPORTED = 50
78
-
79
- ERROR_FILE_EXISTS = 80
80
- ERROR_DUP_FCB = 81
81
- ERROR_CANNOT_MAKE = 82
82
- ERROR_FAIL_I24 = 83
83
-
84
- ERROR_OUT_OF_STRUCTURES = 84
85
- ERROR_ALREADY_ASSIGNED = 85
86
- ERROR_INVALID_PASSWORD = 86
87
- ERROR_INVALID_PARAMETER = 87
88
- ERROR_NET_WRITE_FAULT = 88
89
-
90
- ERROR_NO_PROC_SLOTS = 89 # no process slots available
91
- ERROR_NOT_FROZEN = 90
92
- ERR_TSTOVFL = 91 # timer service table overflow
93
- ERR_TSTDUP = 92 # timer service table duplicate
94
- ERROR_NO_ITEMS = 93 # There were no items to operate upon
95
- ERROR_INTERRUPT = 95 # interrupted system call
96
-
97
- ERROR_TOO_MANY_SEMAPHORES = 100
98
- ERROR_EXCL_SEM_ALREADY_OWNED = 101
99
- ERROR_SEM_IS_SET = 102
100
- ERROR_TOO_MANY_SEM_REQUESTS = 103
101
- ERROR_INVALID_AT_INTERRUPT_TIME = 104
102
-
103
- ERROR_SEM_OWNER_DIED = 105 # waitsem found owner died
104
- ERROR_SEM_USER_LIMIT = 106 # too many procs have this sem
105
- ERROR_DISK_CHANGE = 107 # insert disk b into drive a
106
- ERROR_DRIVE_LOCKED = 108 # drive locked by another process
107
- ERROR_BROKEN_PIPE = 109 # write on pipe with no reader
108
-
109
- ERROR_OPEN_FAILED = 110 # open/created failed
110
- ERROR_DISK_FULL = 112 # not enough space
111
- ERROR_NO_MORE_SEARCH_HANDLES = 113 # can't allocate
112
- ERROR_INVALID_TARGET_HANDLE = 114 # handle in DOSDUPHANDLE is invalid
113
- ERROR_PROTECTION_VIOLATION = 115 # bad user virtual address
114
- ERROR_VIOKBD_REQUEST = 116
115
- ERROR_INVALID_CATEGORY = 117 # category for DEVIOCTL not defined
116
- ERROR_INVALID_VERIFY_SWITCH = 118 # invalid value
117
- ERROR_BAD_DRIVER_LEVEL = 119 # DosDevIOCTL not level four
118
- ERROR_CALL_NOT_IMPLEMENTED = 120
119
- ERROR_SEM_TIMEOUT = 121 # timeout from semaphore function
120
- ERROR_INSUFFICIENT_BUFFER = 122
121
-
122
- ERROR_INVALID_NAME = 123 # illegal char or malformed file system name
123
- ERROR_INVALID_LEVEL = 124 # unimplemented level for info retrieval
124
- ERROR_NO_VOLUME_LABEL = 125 # no volume label found
125
- ERROR_MOD_NOT_FOUND = 126 # w_getprocaddr, w_getmodhandle
126
- ERROR_PROC_NOT_FOUND = 127 # w_getprocaddr
127
-
128
- ERROR_WAIT_NO_CHILDREN = 128 # CWait finds to children
129
- ERROR_CHILD_NOT_COMPLETE = 129 # CWait children not dead yet
130
-
131
- ERROR_DIRECT_ACCESS_HANDLE = 130 # invalid for direct disk access
132
- ERROR_NEGATIVE_SEEK = 131 # tried to seek negative offset
133
- ERROR_SEEK_ON_DEVICE = 132 # tried to seek on device or pipe
134
-
135
- ERROR_IS_JOIN_TARGET = 133
136
- ERROR_IS_JOINED = 134
137
- ERROR_IS_SUBSTED = 135
138
- ERROR_NOT_JOINED = 136
139
- ERROR_NOT_SUBSTED = 137
140
- ERROR_JOIN_TO_JOIN = 138
141
- ERROR_SUBST_TO_SUBST = 139
142
- ERROR_JOIN_TO_SUBST = 140
143
- ERROR_SUBST_TO_JOIN = 141
144
- ERROR_BUSY_DRIVE = 142
145
- ERROR_SAME_DRIVE = 143
146
- ERROR_DIR_NOT_ROOT = 144
147
- ERROR_DIR_NOT_EMPTY = 145
148
- ERROR_IS_SUBST_PATH = 146
149
- ERROR_IS_JOIN_PATH = 147
150
- ERROR_PATH_BUSY = 148
151
- ERROR_IS_SUBST_TARGET = 149
152
- ERROR_SYSTEM_TRACE = 150 # system trace error
153
- ERROR_INVALID_EVENT_COUNT = 151 # DosMuxSemWait errors
154
- ERROR_TOO_MANY_MUXWAITERS = 152
155
- ERROR_INVALID_LIST_FORMAT = 153
156
- ERROR_LABEL_TOO_LONG = 154
157
- ERROR_TOO_MANY_TCBS = 155
158
- ERROR_SIGNAL_REFUSED = 156
159
- ERROR_DISCARDED = 157
160
- ERROR_NOT_LOCKED = 158
161
- ERROR_BAD_THREADID_ADDR = 159
162
- ERROR_BAD_ARGUMENTS = 160
163
- ERROR_BAD_PATHNAME = 161
164
- ERROR_SIGNAL_PENDING = 162
165
- ERROR_UNCERTAIN_MEDIA = 163
166
- ERROR_MAX_THRDS_REACHED = 164
167
- ERROR_MONITORS_NOT_SUPPORTED = 165
168
-
169
- ERROR_INVALID_SEGMENT_NUMBER = 180
170
- ERROR_INVALID_CALLGATE = 181
171
- ERROR_INVALID_ORDINAL = 182
172
- ERROR_ALREADY_EXISTS = 183
173
- ERROR_NO_CHILD_PROCESS = 184
174
- ERROR_CHILD_ALIVE_NOWAIT = 185
175
- ERROR_INVALID_FLAG_NUMBER = 186
176
- ERROR_SEM_NOT_FOUND = 187
177
-
178
- ERROR_INVALID_STARTING_CODESEG = 188
179
- ERROR_INVALID_STACKSEG = 189
180
- ERROR_INVALID_MODULETYPE = 190
181
- ERROR_INVALID_EXE_SIGNATURE = 191
182
- ERROR_EXE_MARKED_INVALID = 192
183
- ERROR_BAD_EXE_FORMAT = 193
184
- ERROR_ITERATED_DATA_EXCEEDS_64k = 194
185
- ERROR_INVALID_MINALLOCSIZE = 195
186
- ERROR_DYNLINK_FROM_INVALID_RING = 196
187
- ERROR_IOPL_NOT_ENABLED = 197
188
- ERROR_INVALID_SEGDPL = 198
189
- ERROR_AUTODATASEG_EXCEEDS_64k = 199
190
- ERROR_RING2SEG_MUST_BE_MOVABLE = 200
191
- ERROR_RELOC_CHAIN_XEEDS_SEGLIM = 201
192
- ERROR_INFLOOP_IN_RELOC_CHAIN = 202
193
-
194
- ERROR_ENVVAR_NOT_FOUND = 203
195
- ERROR_NOT_CURRENT_CTRY = 204
196
- ERROR_NO_SIGNAL_SENT = 205
197
- ERROR_FILENAME_EXCED_RANGE = 206 # if filename > 8.3
198
- ERROR_RING2_STACK_IN_USE = 207 # for FAPI
199
- ERROR_META_EXPANSION_TOO_LONG = 208 # if "*a" > 8.3
200
-
201
- ERROR_INVALID_SIGNAL_NUMBER = 209
202
- ERROR_THREAD_1_INACTIVE = 210
203
- ERROR_INFO_NOT_AVAIL = 211 #@@ PTM 5550
204
- ERROR_LOCKED = 212
205
- ERROR_BAD_DYNALINK = 213 #@@ PTM 5760
206
- ERROR_TOO_MANY_MODULES = 214
207
- ERROR_NESTING_NOT_ALLOWED = 215
208
- ERROR_BAD_PIPE = 230
209
- ERROR_PIPE_BUSY = 231
210
- ERROR_NO_DATA = 232
211
- ERROR_PIPE_NOT_CONNECTED = 233
212
- ERROR_MORE_DATA = 234
213
-
214
- ERROR_PIPE_CONNECTED = 535
215
- ERROR_PIPE_LISTENING = 536
216
-
217
- ERROR_OPERATION_ABORTED = 995
218
- ERROR_IO_INCOMPLETE = 996
219
- ERROR_IO_PENDING = 997
220
-
221
- ERROR_USER_DEFINED_BASE = 0xF000
222
-
223
- ERROR_I24_WRITE_PROTECT = 0
224
- ERROR_I24_BAD_UNIT = 1
225
- ERROR_I24_NOT_READY = 2
226
- ERROR_I24_BAD_COMMAND = 3
227
- ERROR_I24_CRC = 4
228
- ERROR_I24_BAD_LENGTH = 5
229
- ERROR_I24_SEEK = 6
230
- ERROR_I24_NOT_DOS_DISK = 7
231
- ERROR_I24_SECTOR_NOT_FOUND = 8
232
- ERROR_I24_OUT_OF_PAPER = 9
233
- ERROR_I24_WRITE_FAULT = 0x0A
234
- ERROR_I24_READ_FAULT = 0x0B
235
- ERROR_I24_GEN_FAILURE = 0x0C
236
- ERROR_I24_DISK_CHANGE = 0x0D
237
- ERROR_I24_WRONG_DISK = 0x0F
238
- ERROR_I24_UNCERTAIN_MEDIA = 0x10
239
- ERROR_I24_CHAR_CALL_INTERRUPTED = 0x11
240
- ERROR_I24_NO_MONITOR_SUPPORT = 0x12
241
- ERROR_I24_INVALID_PARAMETER = 0x13
242
-
243
- APPLICATION_ERROR_MASK = 0x20000000
244
- ERROR_SEVERITY_SUCCESS = 0x00000000
245
- ERROR_SEVERITY_INFORMATIONAL = 0x40000000
246
- ERROR_SEVERITY_WARNING = 0x80000000
247
- ERROR_SEVERITY_ERROR = 0xc0000000
248
-
249
- ALLOWED_FAIL = 0x0001
250
- ALLOWED_ABORT = 0x0002
251
- ALLOWED_RETRY = 0x0004
252
- ALLOWED_IGNORE = 0x0008
253
-
254
- I24_OPERATION = 0x1
255
- I24_AREA = 0x6
256
- I24_CLASS = 0x80
257
-
258
- ERRCLASS_OUTRES = 1 # Out of Resource
259
- ERRCLASS_TEMPSIT = 2 # Temporary Situation
260
- ERRCLASS_AUTH = 3 # Permission problem
261
- ERRCLASS_INTRN = 4 # Internal System Error
262
- ERRCLASS_HRDFAIL = 5 # Hardware Failure
263
- ERRCLASS_SYSFAIL = 6 # System Failure
264
- ERRCLASS_APPERR = 7 # Application Error
265
- ERRCLASS_NOTFND = 8 # Not Found
266
- ERRCLASS_BADFMT = 9 # Bad Format
267
- ERRCLASS_LOCKED = 10 # Locked
268
- ERRCLASS_MEDIA = 11 # Media Failure
269
- ERRCLASS_ALREADY = 12 # Collision with Existing Item
270
- ERRCLASS_UNK = 13 # Unknown/other
271
- ERRCLASS_CANT = 14
272
- ERRCLASS_TIME = 15
273
-
274
- ERRACT_RETRY = 1 # Retry
275
- ERRACT_DLYRET = 2 # Delay Retry, retry after pause
276
- ERRACT_USER = 3 # Ask user to regive info
277
- ERRACT_ABORT = 4 # abort with clean up
278
- ERRACT_PANIC = 5 # abort immediately
279
- ERRACT_IGNORE = 6 # ignore
280
- ERRACT_INTRET = 7 # Retry after User Intervention
281
-
282
- ERRLOC_UNK = 1 # No appropriate value
283
- ERRLOC_DISK = 2 # Random Access Mass Storage
284
- ERRLOC_NET = 3 # Network
285
- ERRLOC_SERDEV = 4 # Serial Device
286
- ERRLOC_MEM = 5 # Memory
287
-
288
- TC_NORMAL = 0
289
- TC_HARDERR = 1
290
- TC_GP_TRAP = 2
291
- TC_SIGNAL = 3
292
-
293
- # From WinError.h
294
-
295
- ERROR_INVALID_FLAGS = 0x1004
296
- ERROR_NO_UNICODE_TRANSLATION = 0x1113
297
-
298
- E_INVALIDARG = 0x80070057
299
- E_NOINTERFACE = 0x80004002
300
- E_NOTIMPL = 0x80004001
301
- E_OUTOFMEMORY = 0x8007000E
302
- E_UNEXPECTED = 0x8000FFFF
303
-
304
- RPC_E_TIMEOUT = 0x8001011F
305
-
306
- CO_E_NOT_SUPPORTED = 0x80004021
307
-
308
- CLASS_E_NOAGGREGATION = 0x80040110
309
-
310
- DISP_E_BADINDEX = 0x8002000B
311
- DISP_E_PARAMNOTFOUND = 0x80020004
312
- DISP_E_EXCEPTION = 0x80020009
313
- DISP_E_MEMBERNOTFOUND = 0x80020003
314
-
315
- # Registry errors
316
-
317
- REGDB_E_CLASSNOTREG = 0x80040154
318
-
319
- # msterr.h
320
-
321
- SCHED_S_TASK_READY = 0x00041300
322
- SCHED_S_TASK_RUNNING = 0x00041301
323
- SCHED_S_TASK_DISABLED = 0x00041302
324
- SCHED_S_TASK_HAS_NOT_RUN = 0x00041303
325
- SCHED_S_TASK_HAS_NO_MORE_RUNS = 0x00041304
326
- SCHED_S_TASK_NOT_SCHEDULED = 0x00041305
327
- SCHED_S_TASK_TERMINATED = 0x00041306
328
- SCHED_S_TASK_NO_VALID_TRIGGERS = 0x00041307
329
- SCHED_S_EVENT_TRIGGER = 0x00041308
330
- SCHED_E_TRIGGER_NOT_FOUND = 0x00041309
331
- SCHED_E_TASK_NOT_READY = 0x0004130A
332
- SCHED_E_TASK_NOT_RUNNING = 0x0004130B
333
- SCHED_E_SERVICE_NOT_INSTALLED = 0x0004130C
334
- SCHED_E_CANNOT_OPEN_TASK = 0x0004130D
335
- SCHED_E_INVALID_TASK = 0x0004130E
336
- SCHED_E_ACCOUNT_INFORMATION_NOT_SET = 0x0004130F
337
- SCHED_E_ACCOUNT_NAME_NOT_FOUND = 0x00041310
338
- SCHED_E_ACCOUNT_DBASE_CORRUPT = 0x00041311
339
- SCHED_E_NO_SECURITY_SERVICES = 0x00041312
340
- SCHED_E_UNKNOWN_OBJECT_VERSION = 0x00041313
341
-
342
- # Socket errors
343
-
344
- WSA_INVALID_HANDLE = 6
345
- WSA_NOT_ENOUGH_MEMORY = 8
346
- WSA_INVALID_PARAMETER = 87
347
- WSA_OPERATION_ABORTED = 995
348
- WSA_IO_INCOMPLETE = 996
349
- WSA_IO_PENDING = 997
350
- WSAEINTR = 10004
351
- WSAEBADF = 10009
352
- WSAEACCESS = 10013
353
- WSAEFAULT = 10014
354
- WSAEINVAL = 10022
355
- WSAEMFILE = 10024
356
- WSAEWOULDBLOCK = 10035
357
- WSAEINPROGRESS = 10036
358
- WSAEALREADY = 10037
359
- WSAENOTSOCK = 10038
360
- WSAEDESTADDRREQ = 10039
361
- WSAEMSGSIZE = 10040
362
- WSAEPROTOTYPE = 10041
363
- WSAENOPROTOOPT = 10042
364
- WSAEPROTONOSUPPORT = 10043
365
- WSAESOCKTNOSUPPORT = 10044
366
- WSAEOPNOTSUPP = 10045
367
- WSAEPFNOSUPPORT = 10046
368
- WSAEAFNOSUPPORT = 10047
369
- WSAEADDRINUSE = 10048
370
- WSAEADDRNOTAVAIL = 10049
371
- WSAENETDOWN = 10050
372
- WSAENETUNREACH = 10051
373
- WSAENETRESET = 10052
374
- WSAECONNABORTED = 10053
375
- WSAECONNRESET = 10054
376
- WSAENOBUFS = 10055
377
- WSAEISCONN = 10056
378
- WSAENOTCONN = 10057
379
- WSAESHUTDOWN = 10058
380
- WSAETOOMANYREFS = 10059
381
- WSATIMEDOUT = 10060
382
- WSAECONNREFUSED = 10061
383
- WSAELOOP = 10062
384
- WSAENAMETOOLONG = 10063
385
- WSAEHOSTDOWN = 10064
386
- WSAEHOSTUNREACH = 10065
387
- WSAENOEMPTY = 10066
388
- WSAEPROCLIM = 10067
389
- WSAEUSERS = 10068
390
- WSAEDQUOT = 10069
391
- WSAESTALE = 10070
392
- WSAEREMOTE = 10071
393
- WSASYSNOTREADY = 10091
394
- WSAVERNOTSUPPORTED = 10092
395
- WSANOTINITIALISED = 10093
396
- WSAEDISCON = 10101
397
- WSAENOMORE = 10102
398
- WSAECANCELLED = 10103
399
- WSAEINVALIDPROCTABLE = 10104
400
- WSAEINVALIDPROVIDER = 10105
401
- WSAEPROVIDERFAILEDINIT = 10106
402
- WSASYSCALLFAILURE = 10107
403
- WSASERVICE_NOT_FOUND = 10108
404
- WSATYPE_NOT_FOUND = 10109
405
- WSA_E_NO_MORE = 10110
406
- WSA_E_CANCELLED = 10111
407
- WSAEREFUSED = 10112
408
- WSAHOST_NOT_FOUND = 11001
409
- WSATRY_AGAIN = 11002
410
- WSANO_RECOVERY = 11003
411
- WSANO_DATA = 11004
412
- WSA_QOS_RECEIVERS = 11005
413
- WSA_QOS_SENDERS = 11006
414
-
415
- API.new('GetLastError', 'V', 'L')
416
- API.new('SetLastError', 'L', 'V')
417
- API.new('SetErrorMode', 'I', 'I')
418
- API.new('FormatMessage', 'LLLLPLP', 'L')
419
-
420
- begin
421
- API.new('SetLastErrorEx', 'LL', 'V', 'user32')
422
- rescue Win32::API::LoadLibraryError
423
- # VC++ 7.0 or later
424
- end
425
-
426
- # Convenience method that wraps FormatMessage with some sane defaults and
427
- # returns a human readable string.
428
- #
429
- def get_last_error(err_num = GetLastError.call)
430
- buf = 0.chr * 260
431
- flags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY
432
- FormatMessageA.call(flags, 0, err_num, 0, buf, buf.size, 0)
433
- buf.strip
434
- end
435
-
436
- # Macros from WinError.h
437
-
438
- def IS_ERROR(status)
439
- status >> 31 == 1
440
- end
441
-
442
- def MAKE_HRESULT(sev, fac, code)
443
- sev << 31 | fac << 16 | code
444
- end
445
-
446
- def MAKE_SCODE(sev, fac, code)
447
- sev << 31 | fac << 16 | code
448
- end
449
-
450
- def HRESULT_CODE(hr)
451
- hr & 0xFFFF
452
- end
453
-
454
- def HRESULT_FACILITY(hr)
455
- (hr >> 16) & 0x1fff
456
- end
457
-
458
- def HRESULT_FROM_NT(x)
459
- x | 0x10000000 # FACILITY_NT_BIT
460
- end
461
-
462
- def HRESULT_FROM_WIN32(x)
463
- if x <= 0
464
- x
465
- else
466
- (x & 0x0000FFFF) | (7 << 16) | 0x80000000
467
- end
468
- end
469
-
470
- def HRESULT_SEVERITY(hr)
471
- (hr >> 31) & 0x1
472
- end
473
-
474
- def FAILED(status)
475
- status < 0
476
- end
477
-
478
- def SUCCEEDED(status)
479
- status >= 0
480
- end
481
- end
482
- end
1
+ ############################################################################
2
+ # error.rb
3
+ #
4
+ # Includes all of the error codes in error.h, msterr.h and some from
5
+ # winerror.h.
6
+ #
7
+ # Adds the following convenience methods:
8
+ #
9
+ # get_last_error - Returns a human readable string for the error returned
10
+ # by the GetLastError() function.
11
+ ############################################################################
12
+ require 'windows/api'
13
+
14
+ module Windows
15
+ module Error
16
+ API.auto_namespace = 'Windows::Error'
17
+ API.auto_method = true
18
+ API.auto_constant = true
19
+ API.auto_unicode = true
20
+
21
+ FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100
22
+ FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200
23
+ FORMAT_MESSAGE_FROM_STRING = 0x00000400
24
+ FORMAT_MESSAGE_FROM_HMODULE = 0x00000800
25
+ FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000
26
+ FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000
27
+ FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF
28
+
29
+ SEM_FAILCRITICALERRORS = 0x0001
30
+ SEM_NOALIGNMENTFAULTEXCEPT = 0x0004
31
+ SEM_NOGPFAULTERRORBOX = 0x0002
32
+ SEM_NOOPENFILEERRORBOX = 0x8000
33
+
34
+ S_OK = 0
35
+ NO_ERROR = 0
36
+ ERROR_SUCCESS = 0
37
+ ERROR_INVALID_FUNCTION = 1
38
+ ERROR_FILE_NOT_FOUND = 2
39
+ ERROR_PATH_NOT_FOUND = 3
40
+ ERROR_TOO_MANY_OPEN_FILES = 4
41
+ ERROR_ACCESS_DENIED = 5
42
+ ERROR_INVALID_HANDLE = 6
43
+ ERROR_ARENA_TRASHED = 7
44
+ ERROR_NOT_ENOUGH_MEMORY = 8
45
+ ERROR_INVALID_BLOCK = 9
46
+ ERROR_BAD_ENVIRONMENT = 10
47
+ ERROR_BAD_FORMAT = 11
48
+ ERROR_INVALID_ACCESS = 12
49
+ ERROR_INVALID_DATA = 13
50
+ ERROR_INVALID_DRIVE = 15
51
+ ERROR_CURRENT_DIRECTORY = 16
52
+ ERROR_NOT_SAME_DEVICE = 17
53
+ ERROR_NO_MORE_FILES = 18
54
+
55
+ ERROR_WRITE_PROTECT = 19
56
+ ERROR_BAD_UNIT = 20
57
+ ERROR_NOT_READY = 21
58
+ ERROR_BAD_COMMAND = 22
59
+ ERROR_CRC = 23
60
+ ERROR_BAD_LENGTH = 24
61
+ ERROR_SEEK = 25
62
+ ERROR_NOT_DOS_DISK = 26
63
+ ERROR_SECTOR_NOT_FOUND = 27
64
+ ERROR_OUT_OF_PAPER = 28
65
+ ERROR_WRITE_FAULT = 29
66
+ ERROR_READ_FAULT = 30
67
+ ERROR_GEN_FAILURE = 31
68
+
69
+ ERROR_SHARING_VIOLATION = 32
70
+ ERROR_LOCK_VIOLATION = 33
71
+ ERROR_WRONG_DISK = 34
72
+ ERROR_FCB_UNAVAILABLE = 35
73
+ ERROR_SHARING_BUFFER_EXCEEDED = 36
74
+ ERROR_HANDLE_EOF = 38
75
+ ERROR_HANDLE_DISK_FULL = 39
76
+
77
+ ERROR_NOT_SUPPORTED = 50
78
+
79
+ ERROR_FILE_EXISTS = 80
80
+ ERROR_DUP_FCB = 81
81
+ ERROR_CANNOT_MAKE = 82
82
+ ERROR_FAIL_I24 = 83
83
+
84
+ ERROR_OUT_OF_STRUCTURES = 84
85
+ ERROR_ALREADY_ASSIGNED = 85
86
+ ERROR_INVALID_PASSWORD = 86
87
+ ERROR_INVALID_PARAMETER = 87
88
+ ERROR_NET_WRITE_FAULT = 88
89
+
90
+ ERROR_NO_PROC_SLOTS = 89 # no process slots available
91
+ ERROR_NOT_FROZEN = 90
92
+ ERR_TSTOVFL = 91 # timer service table overflow
93
+ ERR_TSTDUP = 92 # timer service table duplicate
94
+ ERROR_NO_ITEMS = 93 # There were no items to operate upon
95
+ ERROR_INTERRUPT = 95 # interrupted system call
96
+
97
+ ERROR_TOO_MANY_SEMAPHORES = 100
98
+ ERROR_EXCL_SEM_ALREADY_OWNED = 101
99
+ ERROR_SEM_IS_SET = 102
100
+ ERROR_TOO_MANY_SEM_REQUESTS = 103
101
+ ERROR_INVALID_AT_INTERRUPT_TIME = 104
102
+
103
+ ERROR_SEM_OWNER_DIED = 105 # waitsem found owner died
104
+ ERROR_SEM_USER_LIMIT = 106 # too many procs have this sem
105
+ ERROR_DISK_CHANGE = 107 # insert disk b into drive a
106
+ ERROR_DRIVE_LOCKED = 108 # drive locked by another process
107
+ ERROR_BROKEN_PIPE = 109 # write on pipe with no reader
108
+
109
+ ERROR_OPEN_FAILED = 110 # open/created failed
110
+ ERROR_DISK_FULL = 112 # not enough space
111
+ ERROR_NO_MORE_SEARCH_HANDLES = 113 # can't allocate
112
+ ERROR_INVALID_TARGET_HANDLE = 114 # handle in DOSDUPHANDLE is invalid
113
+ ERROR_PROTECTION_VIOLATION = 115 # bad user virtual address
114
+ ERROR_VIOKBD_REQUEST = 116
115
+ ERROR_INVALID_CATEGORY = 117 # category for DEVIOCTL not defined
116
+ ERROR_INVALID_VERIFY_SWITCH = 118 # invalid value
117
+ ERROR_BAD_DRIVER_LEVEL = 119 # DosDevIOCTL not level four
118
+ ERROR_CALL_NOT_IMPLEMENTED = 120
119
+ ERROR_SEM_TIMEOUT = 121 # timeout from semaphore function
120
+ ERROR_INSUFFICIENT_BUFFER = 122
121
+
122
+ ERROR_INVALID_NAME = 123 # illegal char or malformed file system name
123
+ ERROR_INVALID_LEVEL = 124 # unimplemented level for info retrieval
124
+ ERROR_NO_VOLUME_LABEL = 125 # no volume label found
125
+ ERROR_MOD_NOT_FOUND = 126 # w_getprocaddr, w_getmodhandle
126
+ ERROR_PROC_NOT_FOUND = 127 # w_getprocaddr
127
+
128
+ ERROR_WAIT_NO_CHILDREN = 128 # CWait finds to children
129
+ ERROR_CHILD_NOT_COMPLETE = 129 # CWait children not dead yet
130
+
131
+ ERROR_DIRECT_ACCESS_HANDLE = 130 # invalid for direct disk access
132
+ ERROR_NEGATIVE_SEEK = 131 # tried to seek negative offset
133
+ ERROR_SEEK_ON_DEVICE = 132 # tried to seek on device or pipe
134
+
135
+ ERROR_IS_JOIN_TARGET = 133
136
+ ERROR_IS_JOINED = 134
137
+ ERROR_IS_SUBSTED = 135
138
+ ERROR_NOT_JOINED = 136
139
+ ERROR_NOT_SUBSTED = 137
140
+ ERROR_JOIN_TO_JOIN = 138
141
+ ERROR_SUBST_TO_SUBST = 139
142
+ ERROR_JOIN_TO_SUBST = 140
143
+ ERROR_SUBST_TO_JOIN = 141
144
+ ERROR_BUSY_DRIVE = 142
145
+ ERROR_SAME_DRIVE = 143
146
+ ERROR_DIR_NOT_ROOT = 144
147
+ ERROR_DIR_NOT_EMPTY = 145
148
+ ERROR_IS_SUBST_PATH = 146
149
+ ERROR_IS_JOIN_PATH = 147
150
+ ERROR_PATH_BUSY = 148
151
+ ERROR_IS_SUBST_TARGET = 149
152
+ ERROR_SYSTEM_TRACE = 150 # system trace error
153
+ ERROR_INVALID_EVENT_COUNT = 151 # DosMuxSemWait errors
154
+ ERROR_TOO_MANY_MUXWAITERS = 152
155
+ ERROR_INVALID_LIST_FORMAT = 153
156
+ ERROR_LABEL_TOO_LONG = 154
157
+ ERROR_TOO_MANY_TCBS = 155
158
+ ERROR_SIGNAL_REFUSED = 156
159
+ ERROR_DISCARDED = 157
160
+ ERROR_NOT_LOCKED = 158
161
+ ERROR_BAD_THREADID_ADDR = 159
162
+ ERROR_BAD_ARGUMENTS = 160
163
+ ERROR_BAD_PATHNAME = 161
164
+ ERROR_SIGNAL_PENDING = 162
165
+ ERROR_UNCERTAIN_MEDIA = 163
166
+ ERROR_MAX_THRDS_REACHED = 164
167
+ ERROR_MONITORS_NOT_SUPPORTED = 165
168
+
169
+ ERROR_INVALID_SEGMENT_NUMBER = 180
170
+ ERROR_INVALID_CALLGATE = 181
171
+ ERROR_INVALID_ORDINAL = 182
172
+ ERROR_ALREADY_EXISTS = 183
173
+ ERROR_NO_CHILD_PROCESS = 184
174
+ ERROR_CHILD_ALIVE_NOWAIT = 185
175
+ ERROR_INVALID_FLAG_NUMBER = 186
176
+ ERROR_SEM_NOT_FOUND = 187
177
+
178
+ ERROR_INVALID_STARTING_CODESEG = 188
179
+ ERROR_INVALID_STACKSEG = 189
180
+ ERROR_INVALID_MODULETYPE = 190
181
+ ERROR_INVALID_EXE_SIGNATURE = 191
182
+ ERROR_EXE_MARKED_INVALID = 192
183
+ ERROR_BAD_EXE_FORMAT = 193
184
+ ERROR_ITERATED_DATA_EXCEEDS_64k = 194
185
+ ERROR_INVALID_MINALLOCSIZE = 195
186
+ ERROR_DYNLINK_FROM_INVALID_RING = 196
187
+ ERROR_IOPL_NOT_ENABLED = 197
188
+ ERROR_INVALID_SEGDPL = 198
189
+ ERROR_AUTODATASEG_EXCEEDS_64k = 199
190
+ ERROR_RING2SEG_MUST_BE_MOVABLE = 200
191
+ ERROR_RELOC_CHAIN_XEEDS_SEGLIM = 201
192
+ ERROR_INFLOOP_IN_RELOC_CHAIN = 202
193
+
194
+ ERROR_ENVVAR_NOT_FOUND = 203
195
+ ERROR_NOT_CURRENT_CTRY = 204
196
+ ERROR_NO_SIGNAL_SENT = 205
197
+ ERROR_FILENAME_EXCED_RANGE = 206 # if filename > 8.3
198
+ ERROR_RING2_STACK_IN_USE = 207 # for FAPI
199
+ ERROR_META_EXPANSION_TOO_LONG = 208 # if "*a" > 8.3
200
+
201
+ ERROR_INVALID_SIGNAL_NUMBER = 209
202
+ ERROR_THREAD_1_INACTIVE = 210
203
+ ERROR_INFO_NOT_AVAIL = 211 #@@ PTM 5550
204
+ ERROR_LOCKED = 212
205
+ ERROR_BAD_DYNALINK = 213 #@@ PTM 5760
206
+ ERROR_TOO_MANY_MODULES = 214
207
+ ERROR_NESTING_NOT_ALLOWED = 215
208
+ ERROR_BAD_PIPE = 230
209
+ ERROR_PIPE_BUSY = 231
210
+ ERROR_NO_DATA = 232
211
+ ERROR_PIPE_NOT_CONNECTED = 233
212
+ ERROR_MORE_DATA = 234
213
+
214
+ ERROR_PIPE_CONNECTED = 535
215
+ ERROR_PIPE_LISTENING = 536
216
+
217
+ ERROR_OPERATION_ABORTED = 995
218
+ ERROR_IO_INCOMPLETE = 996
219
+ ERROR_IO_PENDING = 997
220
+
221
+ ERROR_USER_DEFINED_BASE = 0xF000
222
+
223
+ ERROR_I24_WRITE_PROTECT = 0
224
+ ERROR_I24_BAD_UNIT = 1
225
+ ERROR_I24_NOT_READY = 2
226
+ ERROR_I24_BAD_COMMAND = 3
227
+ ERROR_I24_CRC = 4
228
+ ERROR_I24_BAD_LENGTH = 5
229
+ ERROR_I24_SEEK = 6
230
+ ERROR_I24_NOT_DOS_DISK = 7
231
+ ERROR_I24_SECTOR_NOT_FOUND = 8
232
+ ERROR_I24_OUT_OF_PAPER = 9
233
+ ERROR_I24_WRITE_FAULT = 0x0A
234
+ ERROR_I24_READ_FAULT = 0x0B
235
+ ERROR_I24_GEN_FAILURE = 0x0C
236
+ ERROR_I24_DISK_CHANGE = 0x0D
237
+ ERROR_I24_WRONG_DISK = 0x0F
238
+ ERROR_I24_UNCERTAIN_MEDIA = 0x10
239
+ ERROR_I24_CHAR_CALL_INTERRUPTED = 0x11
240
+ ERROR_I24_NO_MONITOR_SUPPORT = 0x12
241
+ ERROR_I24_INVALID_PARAMETER = 0x13
242
+
243
+ APPLICATION_ERROR_MASK = 0x20000000
244
+ ERROR_SEVERITY_SUCCESS = 0x00000000
245
+ ERROR_SEVERITY_INFORMATIONAL = 0x40000000
246
+ ERROR_SEVERITY_WARNING = 0x80000000
247
+ ERROR_SEVERITY_ERROR = 0xc0000000
248
+
249
+ ALLOWED_FAIL = 0x0001
250
+ ALLOWED_ABORT = 0x0002
251
+ ALLOWED_RETRY = 0x0004
252
+ ALLOWED_IGNORE = 0x0008
253
+
254
+ I24_OPERATION = 0x1
255
+ I24_AREA = 0x6
256
+ I24_CLASS = 0x80
257
+
258
+ ERRCLASS_OUTRES = 1 # Out of Resource
259
+ ERRCLASS_TEMPSIT = 2 # Temporary Situation
260
+ ERRCLASS_AUTH = 3 # Permission problem
261
+ ERRCLASS_INTRN = 4 # Internal System Error
262
+ ERRCLASS_HRDFAIL = 5 # Hardware Failure
263
+ ERRCLASS_SYSFAIL = 6 # System Failure
264
+ ERRCLASS_APPERR = 7 # Application Error
265
+ ERRCLASS_NOTFND = 8 # Not Found
266
+ ERRCLASS_BADFMT = 9 # Bad Format
267
+ ERRCLASS_LOCKED = 10 # Locked
268
+ ERRCLASS_MEDIA = 11 # Media Failure
269
+ ERRCLASS_ALREADY = 12 # Collision with Existing Item
270
+ ERRCLASS_UNK = 13 # Unknown/other
271
+ ERRCLASS_CANT = 14
272
+ ERRCLASS_TIME = 15
273
+
274
+ ERRACT_RETRY = 1 # Retry
275
+ ERRACT_DLYRET = 2 # Delay Retry, retry after pause
276
+ ERRACT_USER = 3 # Ask user to regive info
277
+ ERRACT_ABORT = 4 # abort with clean up
278
+ ERRACT_PANIC = 5 # abort immediately
279
+ ERRACT_IGNORE = 6 # ignore
280
+ ERRACT_INTRET = 7 # Retry after User Intervention
281
+
282
+ ERRLOC_UNK = 1 # No appropriate value
283
+ ERRLOC_DISK = 2 # Random Access Mass Storage
284
+ ERRLOC_NET = 3 # Network
285
+ ERRLOC_SERDEV = 4 # Serial Device
286
+ ERRLOC_MEM = 5 # Memory
287
+
288
+ TC_NORMAL = 0
289
+ TC_HARDERR = 1
290
+ TC_GP_TRAP = 2
291
+ TC_SIGNAL = 3
292
+
293
+ # From WinError.h
294
+
295
+ ERROR_INVALID_FLAGS = 0x1004
296
+ ERROR_NO_UNICODE_TRANSLATION = 0x1113
297
+
298
+ E_INVALIDARG = 0x80070057
299
+ E_NOINTERFACE = 0x80004002
300
+ E_NOTIMPL = 0x80004001
301
+ E_OUTOFMEMORY = 0x8007000E
302
+ E_UNEXPECTED = 0x8000FFFF
303
+
304
+ RPC_E_TIMEOUT = 0x8001011F
305
+
306
+ CO_E_NOT_SUPPORTED = 0x80004021
307
+
308
+ CLASS_E_NOAGGREGATION = 0x80040110
309
+
310
+ DISP_E_BADINDEX = 0x8002000B
311
+ DISP_E_PARAMNOTFOUND = 0x80020004
312
+ DISP_E_EXCEPTION = 0x80020009
313
+ DISP_E_MEMBERNOTFOUND = 0x80020003
314
+
315
+ # Registry errors
316
+
317
+ REGDB_E_CLASSNOTREG = 0x80040154
318
+
319
+ # msterr.h
320
+
321
+ SCHED_S_TASK_READY = 0x00041300
322
+ SCHED_S_TASK_RUNNING = 0x00041301
323
+ SCHED_S_TASK_DISABLED = 0x00041302
324
+ SCHED_S_TASK_HAS_NOT_RUN = 0x00041303
325
+ SCHED_S_TASK_HAS_NO_MORE_RUNS = 0x00041304
326
+ SCHED_S_TASK_NOT_SCHEDULED = 0x00041305
327
+ SCHED_S_TASK_TERMINATED = 0x00041306
328
+ SCHED_S_TASK_NO_VALID_TRIGGERS = 0x00041307
329
+ SCHED_S_EVENT_TRIGGER = 0x00041308
330
+ SCHED_E_TRIGGER_NOT_FOUND = 0x00041309
331
+ SCHED_E_TASK_NOT_READY = 0x0004130A
332
+ SCHED_E_TASK_NOT_RUNNING = 0x0004130B
333
+ SCHED_E_SERVICE_NOT_INSTALLED = 0x0004130C
334
+ SCHED_E_CANNOT_OPEN_TASK = 0x0004130D
335
+ SCHED_E_INVALID_TASK = 0x0004130E
336
+ SCHED_E_ACCOUNT_INFORMATION_NOT_SET = 0x0004130F
337
+ SCHED_E_ACCOUNT_NAME_NOT_FOUND = 0x00041310
338
+ SCHED_E_ACCOUNT_DBASE_CORRUPT = 0x00041311
339
+ SCHED_E_NO_SECURITY_SERVICES = 0x00041312
340
+ SCHED_E_UNKNOWN_OBJECT_VERSION = 0x00041313
341
+
342
+ # Socket errors
343
+
344
+ WSA_INVALID_HANDLE = 6
345
+ WSA_NOT_ENOUGH_MEMORY = 8
346
+ WSA_INVALID_PARAMETER = 87
347
+ WSA_OPERATION_ABORTED = 995
348
+ WSA_IO_INCOMPLETE = 996
349
+ WSA_IO_PENDING = 997
350
+ WSAEINTR = 10004
351
+ WSAEBADF = 10009
352
+ WSAEACCESS = 10013
353
+ WSAEFAULT = 10014
354
+ WSAEINVAL = 10022
355
+ WSAEMFILE = 10024
356
+ WSAEWOULDBLOCK = 10035
357
+ WSAEINPROGRESS = 10036
358
+ WSAEALREADY = 10037
359
+ WSAENOTSOCK = 10038
360
+ WSAEDESTADDRREQ = 10039
361
+ WSAEMSGSIZE = 10040
362
+ WSAEPROTOTYPE = 10041
363
+ WSAENOPROTOOPT = 10042
364
+ WSAEPROTONOSUPPORT = 10043
365
+ WSAESOCKTNOSUPPORT = 10044
366
+ WSAEOPNOTSUPP = 10045
367
+ WSAEPFNOSUPPORT = 10046
368
+ WSAEAFNOSUPPORT = 10047
369
+ WSAEADDRINUSE = 10048
370
+ WSAEADDRNOTAVAIL = 10049
371
+ WSAENETDOWN = 10050
372
+ WSAENETUNREACH = 10051
373
+ WSAENETRESET = 10052
374
+ WSAECONNABORTED = 10053
375
+ WSAECONNRESET = 10054
376
+ WSAENOBUFS = 10055
377
+ WSAEISCONN = 10056
378
+ WSAENOTCONN = 10057
379
+ WSAESHUTDOWN = 10058
380
+ WSAETOOMANYREFS = 10059
381
+ WSATIMEDOUT = 10060
382
+ WSAECONNREFUSED = 10061
383
+ WSAELOOP = 10062
384
+ WSAENAMETOOLONG = 10063
385
+ WSAEHOSTDOWN = 10064
386
+ WSAEHOSTUNREACH = 10065
387
+ WSAENOEMPTY = 10066
388
+ WSAEPROCLIM = 10067
389
+ WSAEUSERS = 10068
390
+ WSAEDQUOT = 10069
391
+ WSAESTALE = 10070
392
+ WSAEREMOTE = 10071
393
+ WSASYSNOTREADY = 10091
394
+ WSAVERNOTSUPPORTED = 10092
395
+ WSANOTINITIALISED = 10093
396
+ WSAEDISCON = 10101
397
+ WSAENOMORE = 10102
398
+ WSAECANCELLED = 10103
399
+ WSAEINVALIDPROCTABLE = 10104
400
+ WSAEINVALIDPROVIDER = 10105
401
+ WSAEPROVIDERFAILEDINIT = 10106
402
+ WSASYSCALLFAILURE = 10107
403
+ WSASERVICE_NOT_FOUND = 10108
404
+ WSATYPE_NOT_FOUND = 10109
405
+ WSA_E_NO_MORE = 10110
406
+ WSA_E_CANCELLED = 10111
407
+ WSAEREFUSED = 10112
408
+ WSAHOST_NOT_FOUND = 11001
409
+ WSATRY_AGAIN = 11002
410
+ WSANO_RECOVERY = 11003
411
+ WSANO_DATA = 11004
412
+ WSA_QOS_RECEIVERS = 11005
413
+ WSA_QOS_SENDERS = 11006
414
+
415
+ API.new('GetLastError', 'V', 'L')
416
+ API.new('SetLastError', 'L', 'V')
417
+ API.new('SetErrorMode', 'I', 'I')
418
+ API.new('FormatMessage', 'LLLLPLP', 'L')
419
+
420
+ begin
421
+ API.new('SetLastErrorEx', 'LL', 'V', 'user32')
422
+ rescue Win32::API::LoadLibraryError
423
+ # VC++ 7.0 or later
424
+ end
425
+
426
+ # Convenience method that wraps FormatMessage with some sane defaults and
427
+ # returns a human readable string.
428
+ #
429
+ def get_last_error(err_num = GetLastError.call)
430
+ buf = 0.chr * 260
431
+ flags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY
432
+ FormatMessageA.call(flags, 0, err_num, 0, buf, buf.size, 0)
433
+ buf.strip
434
+ end
435
+
436
+ # Macros from WinError.h
437
+
438
+ def IS_ERROR(status)
439
+ status >> 31 == 1
440
+ end
441
+
442
+ def MAKE_HRESULT(sev, fac, code)
443
+ sev << 31 | fac << 16 | code
444
+ end
445
+
446
+ def MAKE_SCODE(sev, fac, code)
447
+ sev << 31 | fac << 16 | code
448
+ end
449
+
450
+ def HRESULT_CODE(hr)
451
+ hr & 0xFFFF
452
+ end
453
+
454
+ def HRESULT_FACILITY(hr)
455
+ (hr >> 16) & 0x1fff
456
+ end
457
+
458
+ def HRESULT_FROM_NT(x)
459
+ x | 0x10000000 # FACILITY_NT_BIT
460
+ end
461
+
462
+ def HRESULT_FROM_WIN32(x)
463
+ if x <= 0
464
+ x
465
+ else
466
+ (x & 0x0000FFFF) | (7 << 16) | 0x80000000
467
+ end
468
+ end
469
+
470
+ def HRESULT_SEVERITY(hr)
471
+ (hr >> 31) & 0x1
472
+ end
473
+
474
+ def FAILED(status)
475
+ status < 0
476
+ end
477
+
478
+ def SUCCEEDED(status)
479
+ status >= 0
480
+ end
481
+ end
482
+ end