windows-pr 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
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