Class: Msf::WindowsError

Inherits:
Object
  • Object
show all
Defined in:
lib/msf/windows_error.rb

Constant Summary collapse

SUCCESS =

Constants

0
INVALID_FUNCTION =
1
FILE_NOT_FOUND =
2
PATH_NOT_FOUND =
3
TOO_MANY_OPEN_FILES =
4
ACCESS_DENIED =
5
INVALID_HANDLE =
6
ARENA_TRASHED =
7
NOT_ENOUGH_MEMORY =
8
INVALID_BLOCK =
9
BAD_ENVIRONMENT =
10
BAD_FORMAT =
11
INVALID_ACCESS =
12
INVALID_DATA =
13
OUTOFMEMORY =
14
INVALID_DRIVE =
15
CURRENT_DIRECTORY =
16
NOT_SAME_DEVICE =
17
NO_MORE_FILES =
18
WRITE_PROTECT =
19
BAD_UNIT =
20
NOT_READY =
21
BAD_COMMAND =
22
CRC =
23
BAD_LENGTH =
24
SEEK =
25
NOT_DOS_DISK =
26
SECTOR_NOT_FOUND =
27
OUT_OF_PAPER =
28
WRITE_FAULT =
29
READ_FAULT =
30
GEN_FAILURE =
31
SHARING_VIOLATION =
32
LOCK_VIOLATION =
33
WRONG_DISK =
34
SHARING_BUFFER_EXCEEDED =
36
HANDLE_EOF =
38
HANDLE_DISK_FULL =
39
NOT_SUPPORTED =
50
REM_NOT_LIST =
51
DUP_NAME =
52
BAD_NETPATH =
53
NETWORK_BUSY =
54
DEV_NOT_EXIST =
55
TOO_MANY_CMDS =
56
ADAP_HDW_ERR =
57
BAD_NET_RESP =
58
UNEXP_NET_ERR =
59
BAD_REM_ADAP =
60
PRINTQ_FULL =
61
NO_SPOOL_SPACE =
62
63
NETNAME_DELETED =
64
NETWORK_ACCESS_DENIED =
65
BAD_DEV_TYPE =
66
BAD_NET_NAME =
67
TOO_MANY_NAMES =
68
TOO_MANY_SESS =
69
SHARING_PAUSED =
70
REQ_NOT_ACCEP =
71
REDIR_PAUSED =
72
FILE_EXISTS =
80
CANNOT_MAKE =
82
FAIL_I24 =
83
OUT_OF_STRUCTURES =
84
ALREADY_ASSIGNED =
85
INVALID_PASSWORD =
86
INVALID_PARAMETER =
87
NET_WRITE_FAULT =
88
NO_PROC_SLOTS =
89
TOO_MANY_SEMAPHORES =
100
EXCL_SEM_ALREADY_OWNED =
101
SEM_IS_SET =
102
TOO_MANY_SEM_REQUESTS =
103
INVALID_AT_INTERRUPT_TIME =
104
SEM_OWNER_DIED =
105
SEM_USER_LIMIT =
106
DISK_CHANGE =
107
DRIVE_LOCKED =
108
BROKEN_PIPE =
109
OPEN_FAILED =
110
BUFFER_OVERFLOW =
111
DISK_FULL =
112
NO_MORE_SEARCH_HANDLES =
113
INVALID_TARGET_HANDLE =
114
INVALID_CATEGORY =
117
INVALID_VERIFY_SWITCH =
118
BAD_DRIVER_LEVEL =
119
CALL_NOT_IMPLEMENTED =
120
SEM_TIMEOUT =
121
INSUFFICIENT_BUFFER =
122
INVALID_NAME =
123
INVALID_LEVEL =
124
NO_VOLUME_LABEL =
125
MOD_NOT_FOUND =
126
PROC_NOT_FOUND =
127
WAIT_NO_CHILDREN =
128
CHILD_NOT_COMPLETE =
129
DIRECT_ACCESS_HANDLE =
130
NEGATIVE_SEEK =
131
SEEK_ON_DEVICE =
132
IS_JOIN_TARGET =
133
IS_JOINED =
134
IS_SUBSTED =
135
NOT_JOINED =
136
NOT_SUBSTED =
137
JOIN_TO_JOIN =
138
SUBST_TO_SUBST =
139
JOIN_TO_SUBST =
140
SUBST_TO_JOIN =
141
BUSY_DRIVE =
142
SAME_DRIVE =
143
DIR_NOT_ROOT =
144
DIR_NOT_EMPTY =
145
IS_SUBST_PATH =
146
IS_JOIN_PATH =
147
PATH_BUSY =
148
IS_SUBST_TARGET =
149
SYSTEM_TRACE =
150
INVALID_EVENT_COUNT =
151
TOO_MANY_MUXWAITERS =
152
INVALID_LIST_FORMAT =
153
LABEL_TOO_LONG =
154
TOO_MANY_TCBS =
155
SIGNAL_REFUSED =
156
DISCARDED =
157
NOT_LOCKED =
158
BAD_THREADID_ADDR =
159
BAD_ARGUMENTS =
160
BAD_PATHNAME =
161
SIGNAL_PENDING =
162
MAX_THRDS_REACHED =
164
LOCK_FAILED =
167
BUSY =
170
CANCEL_VIOLATION =
173
ATOMIC_LOCKS_NOT_SUPPORTED =
174
INVALID_SEGMENT_NUMBER =
180
INVALID_ORDINAL =
182
ALREADY_EXISTS =
183
INVALID_FLAG_NUMBER =
186
SEM_NOT_FOUND =
187
INVALID_STARTING_CODESEG =
188
INVALID_STACKSEG =
189
INVALID_MODULETYPE =
190
INVALID_EXE_SIGNATURE =
191
EXE_MARKED_INVALID =
192
BAD_EXE_FORMAT =
193
ITERATED_DATA_EXCEEDS_64k =
194
INVALID_MINALLOCSIZE =
195
196
IOPL_NOT_ENABLED =
197
INVALID_SEGDPL =
198
AUTODATASEG_EXCEEDS_64k =
199
RING2SEG_MUST_BE_MOVABLE =
200
RELOC_CHAIN_XEEDS_SEGLIM =
201
INFLOOP_IN_RELOC_CHAIN =
202
ENVVAR_NOT_FOUND =
203
NO_SIGNAL_SENT =
205
FILENAME_EXCED_RANGE =
206
RING2_STACK_IN_USE =
207
META_EXPANSION_TOO_LONG =
208
INVALID_SIGNAL_NUMBER =
209
THREAD_1_INACTIVE =
210
LOCKED =
212
TOO_MANY_MODULES =
214
NESTING_NOT_ALLOWED =
215
EXE_MACHINE_TYPE_MISMATCH =
216
EXE_CANNOT_MODIFY_SIGNED_BINARY =
217
EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY =
218
FILE_CHECKED_OUT =
220
CHECKOUT_REQUIRED =
221
BAD_FILE_TYPE =
222
FILE_TOO_LARGE =
223
FORMS_AUTH_REQUIRED =
224
VIRUS_INFECTED =
225
VIRUS_DELETED =
226
PIPE_LOCAL =
229
BAD_PIPE =
230
PIPE_BUSY =
231
NO_DATA =
232
PIPE_NOT_CONNECTED =
233
MORE_DATA =
234
VC_DISCONNECTED =
240
INVALID_EA_NAME =
254
EA_LIST_INCONSISTENT =
255
WAIT_TIMEOUT =
258
NO_MORE_ITEMS =
259
CANNOT_COPY =
266
DIRECTORY =
267
EAS_DIDNT_FIT =
275
EA_FILE_CORRUPT =
276
EA_TABLE_FULL =
277
INVALID_EA_HANDLE =
278
EAS_NOT_SUPPORTED =
282
NOT_OWNER =
288
TOO_MANY_POSTS =
298
PARTIAL_COPY =
299
OPLOCK_NOT_GRANTED =
300
INVALID_OPLOCK_PROTOCOL =
301
DISK_TOO_FRAGMENTED =
302
DELETE_PENDING =
303
INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING =
304
SHORT_NAMES_NOT_ENABLED_ON_VOLUME =
305
SECURITY_STREAM_IS_INCONSISTENT =
306
INVALID_LOCK_RANGE =
307
IMAGE_SUBSYSTEM_NOT_PRESENT =
308
NOTIFICATION_GUID_ALREADY_DEFINED =
309
MR_MID_NOT_FOUND =
317
SCOPE_NOT_FOUND =
318
FAIL_NOACTION_REBOOT =
350
FAIL_SHUTDOWN =
351
FAIL_RESTART =
352
MAX_SESSIONS_REACHED =
353
THREAD_MODE_ALREADY_BACKGROUND =
400
THREAD_MODE_NOT_BACKGROUND =
401
PROCESS_MODE_ALREADY_BACKGROUND =
402
PROCESS_MODE_NOT_BACKGROUND =
403
INVALID_ADDRESS =
487

Class Method Summary collapse

Class Method Details

.const_name(code) ⇒ Object

Return a string representation of the constant for a number


242
243
244
245
246
247
# File 'lib/msf/windows_error.rb', line 242

def self.const_name(code)
  self.constants.each { |c|
    return c.to_s if self.const_get(c) == code
  }
  return nil
end

.description(code) ⇒ Object

Return the description of an error code


251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
# File 'lib/msf/windows_error.rb', line 251

def self.description(code)

  case code
  when SUCCESS
    "The operation completed successfully."
  when INVALID_FUNCTION
    "Incorrect function."
  when FILE_NOT_FOUND
    "The system cannot find the file specified."
  when PATH_NOT_FOUND
    "The system cannot find the path specified."
  when TOO_MANY_OPEN_FILES
    "The system cannot open the file."
  when ACCESS_DENIED
    "Access is denied."
  when INVALID_HANDLE
    "The handle is invalid."
  when ARENA_TRASHED
    "The storage control blocks were destroyed."
  when NOT_ENOUGH_MEMORY
    "Not enough storage is available to process this command."
  when INVALID_BLOCK
    "The storage control block address is invalid."
  when BAD_ENVIRONMENT
    "The environment is incorrect."
  when BAD_FORMAT
    "An attempt was made to load a program with an incorrect format."
  when INVALID_ACCESS
    "The access code is invalid."
  when INVALID_DATA
    "The data is invalid."
  when OUTOFMEMORY
    "Not enough storage is available to complete this operation."
  when INVALID_DRIVE
    "The system cannot find the drive specified."
  when CURRENT_DIRECTORY
    "The directory cannot be removed."
  when NOT_SAME_DEVICE
    "The system cannot move the file to a different disk drive."
  when NO_MORE_FILES
    "There are no more files."
  when WRITE_PROTECT
    "The media is write protected."
  when BAD_UNIT
    "The system cannot find the device specified."
  when NOT_READY
    "The device is not ready."
  when BAD_COMMAND
    "The device does not recognize the command."
  when CRC
    "Data error ;."
  when BAD_LENGTH
    "The program issued a command but the command length is incorrect."
  when SEEK
    "The drive cannot locate a specific area or track on the disk."
  when NOT_DOS_DISK
    "The specified disk or diskette cannot be accessed."
  when SECTOR_NOT_FOUND
    "The drive cannot find the sector requested."
  when OUT_OF_PAPER
    "The printer is out of paper."
  when WRITE_FAULT
    "The system cannot write to the specified device."
  when READ_FAULT
    "The system cannot read from the specified device."
  when GEN_FAILURE
    "A device attached to the system is not functioning."
  when SHARING_VIOLATION
    "The process cannot access the file because it is being used by another process."
  when LOCK_VIOLATION
    "The process cannot access the file because another process has locked a portion of the file."
  when WRONG_DISK
    "The wrong diskette is in the drive. Insert %2 ; into drive %1."
  when SHARING_BUFFER_EXCEEDED
    "Too many files opened for sharing."
  when HANDLE_EOF
    "Reached the end of the file."
  when HANDLE_DISK_FULL
    "The disk is full."
  when NOT_SUPPORTED
    "The request is not supported."
  when REM_NOT_LIST
    "Windows cannot find the network path. Verify that the network path is correct and the destination computer is not busy or turned off. If Windows still cannot find the network path, contact your network administrator."
  when DUP_NAME
    "You were not connected because a duplicate name exists on the network. If joining a domain, go to System in Control Panel to change the computer name and try again. If joining a workgroup, choose another workgroup name."
  when BAD_NETPATH
    "The network path was not found."
  when NETWORK_BUSY
    "The network is busy."
  when DEV_NOT_EXIST
    "The specified network resource or device is no longer available."
  when TOO_MANY_CMDS
    "The network BIOS command limit has been reached."
  when ADAP_HDW_ERR
    "A network adapter hardware error occurred."
  when BAD_NET_RESP
    "The specified server cannot perform the requested operation."
  when UNEXP_NET_ERR
    "An unexpected network error occurred."
  when BAD_REM_ADAP
    "The remote adapter is not compatible."
  when PRINTQ_FULL
    "The printer queue is full."
  when NO_SPOOL_SPACE
    "Space to store the file waiting to be printed is not available on the server."
  when PRINT_CANCELLED
    "Your file waiting to be printed was deleted."
  when NETNAME_DELETED
    "The specified network name is no longer available."
  when NETWORK_ACCESS_DENIED
    "Network access is denied."
  when BAD_DEV_TYPE
    "The network resource type is not correct."
  when BAD_NET_NAME
    "The network name cannot be found."
  when TOO_MANY_NAMES
    "The name limit for the local computer network adapter card was exceeded."
  when TOO_MANY_SESS
    "The network BIOS session limit was exceeded."
  when SHARING_PAUSED
    "The remote server has been paused or is in the process of being started."
  when REQ_NOT_ACCEP
    "No more connections can be made to this remote computer at this time because there are already as many connections as the computer can accept."
  when REDIR_PAUSED
    "The specified printer or disk device has been paused."
  when FILE_EXISTS
    "The file exists."
  when CANNOT_MAKE
    "The directory or file cannot be created."
  when FAIL_I24
    "Fail on INT 24."
  when OUT_OF_STRUCTURES
    "Storage to process this request is not available."
  when ALREADY_ASSIGNED
    "The local device name is already in use."
  when INVALID_PASSWORD
    "The specified network password is not correct."
  when INVALID_PARAMETER
    "The parameter is incorrect."
  when NET_WRITE_FAULT
    "A write fault occurred on the network."
  when NO_PROC_SLOTS
    "The system cannot start another process at this time."
  when TOO_MANY_SEMAPHORES
    "Cannot create another system semaphore."
  when EXCL_SEM_ALREADY_OWNED
    "The exclusive semaphore is owned by another process."
  when SEM_IS_SET
    "The semaphore is set and cannot be closed."
  when TOO_MANY_SEM_REQUESTS
    "The semaphore cannot be set again."
  when INVALID_AT_INTERRUPT_TIME
    "Cannot request exclusive semaphores at interrupt time."
  when SEM_OWNER_DIED
    "The previous ownership of this semaphore has ended."
  when SEM_USER_LIMIT
    "Insert the diskette for drive %1."
  when DISK_CHANGE
    "The program stopped because an alternate diskette was not inserted."
  when DRIVE_LOCKED
    "The disk is in use or locked by another process."
  when BROKEN_PIPE
    "The pipe has been ended."
  when OPEN_FAILED
    "The system cannot open the device or file specified."
  when BUFFER_OVERFLOW
    "The file name is too long."
  when DISK_FULL
    "There is not enough space on the disk."
  when NO_MORE_SEARCH_HANDLES
    "No more internal file identifiers available."
  when INVALID_TARGET_HANDLE
    "The target internal file identifier is incorrect."
  when INVALID_CATEGORY
    "The IOCTL call made by the application program is not correct."
  when INVALID_VERIFY_SWITCH
    "The verify-on-write switch parameter value is not correct."
  when BAD_DRIVER_LEVEL
    "The system does not support the command requested."
  when CALL_NOT_IMPLEMENTED
    "This function is not supported on this system."
  when SEM_TIMEOUT
    "The semaphore timeout period has expired."
  when INSUFFICIENT_BUFFER
    "The data area passed to a system call is too small."
  when INVALID_NAME
    "The filename, directory name, or volume label syntax is incorrect."
  when INVALID_LEVEL
    "The system call level is not correct."
  when NO_VOLUME_LABEL
    "The disk has no volume label."
  when MOD_NOT_FOUND
    "The specified module could not be found."
  when PROC_NOT_FOUND
    "The specified procedure could not be found."
  when WAIT_NO_CHILDREN
    "There are no child processes to wait for."
  when CHILD_NOT_COMPLETE
    "The %1 application cannot be run in Win32 mode."
  when DIRECT_ACCESS_HANDLE
    "Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O."
  when NEGATIVE_SEEK
    "An attempt was made to move the file pointer before the beginning of the file."
  when SEEK_ON_DEVICE
    "The file pointer cannot be set on the specified device or file."
  when IS_JOIN_TARGET
    "A JOIN or SUBST command cannot be used for a drive that contains previously joined drives."
  when IS_JOINED
    "An attempt was made to use a JOIN or SUBST command on a drive that has already been joined."
  when IS_SUBSTED
    "An attempt was made to use a JOIN or SUBST command on a drive that has already been substituted."
  when NOT_JOINED
    "The system tried to delete the JOIN of a drive that is not joined."
  when NOT_SUBSTED
    "The system tried to delete the substitution of a drive that is not substituted."
  when JOIN_TO_JOIN
    "The system tried to join a drive to a directory on a joined drive."
  when SUBST_TO_SUBST
    "The system tried to substitute a drive to a directory on a substituted drive."
  when JOIN_TO_SUBST
    "The system tried to join a drive to a directory on a substituted drive."
  when SUBST_TO_JOIN
    "The system tried to SUBST a drive to a directory on a joined drive."
  when BUSY_DRIVE
    "The system cannot perform a JOIN or SUBST at this time."
  when SAME_DRIVE
    "The system cannot join or substitute a drive to or for a directory on the same drive."
  when DIR_NOT_ROOT
    "The directory is not a subdirectory of the root directory."
  when DIR_NOT_EMPTY
    "The directory is not empty."
  when IS_SUBST_PATH
    "The path specified is being used in a substitute."
  when IS_JOIN_PATH
    "Not enough resources are available to process this command."
  when PATH_BUSY
    "The path specified cannot be used at this time."
  when IS_SUBST_TARGET
    "An attempt was made to join or substitute a drive for which a directory on the drive is the target of a previous substitute."
  when SYSTEM_TRACE
    "System trace information was not specified in your CONFIG.SYS file, or tracing is disallowed."
  when INVALID_EVENT_COUNT
    "The number of specified semaphore events for DosMuxSemWait is not correct."
  when TOO_MANY_MUXWAITERS
    "DosMuxSemWait did not execute; too many semaphores are already set."
  when INVALID_LIST_FORMAT
    "The DosMuxSemWait list is not correct."
  when LABEL_TOO_LONG
    "The volume label you entered exceeds the label character limit of the target file system."
  when TOO_MANY_TCBS
    "Cannot create another thread."
  when SIGNAL_REFUSED
    "The recipient process has refused the signal."
  when DISCARDED
    "The segment is already discarded and cannot be locked."
  when NOT_LOCKED
    "The segment is already unlocked."
  when BAD_THREADID_ADDR
    "The address for the thread ID is not correct."
  when BAD_ARGUMENTS
    "One or more arguments are not correct."
  when BAD_PATHNAME
    "The specified path is invalid."
  when SIGNAL_PENDING
    "A signal is already pending."
  when MAX_THRDS_REACHED
    "No more threads can be created in the system."
  when LOCK_FAILED
    "Unable to lock a region of a file."
  when BUSY
    "The requested resource is in use."
  when CANCEL_VIOLATION
    "A lock request was not outstanding for the supplied cancel region."
  when ATOMIC_LOCKS_NOT_SUPPORTED
    "The file system does not support atomic changes to the lock type."
  when INVALID_SEGMENT_NUMBER
    "The system detected a segment number that was not correct."
  when INVALID_ORDINAL
    "The operating system cannot run %1."
  when ALREADY_EXISTS
    "Cannot create a file when that file already exists."
  when INVALID_FLAG_NUMBER
    "The flag passed is not correct."
  when SEM_NOT_FOUND
    "The specified system semaphore name was not found."
  when INVALID_STARTING_CODESEG
    "The operating system cannot run %1."
  when INVALID_STACKSEG
    "The operating system cannot run %1."
  when INVALID_MODULETYPE
    "The operating system cannot run %1."
  when INVALID_EXE_SIGNATURE
    "Cannot run %1 in Win32 mode."
  when EXE_MARKED_INVALID
    "The operating system cannot run %1."
  when BAD_EXE_FORMAT
    "is not a valid Win32 application."
  when ITERATED_DATA_EXCEEDS_64k
    "The operating system cannot run %1."
  when INVALID_MINALLOCSIZE
    "The operating system cannot run %1."
  when DYNLINK_FROM_INVALID_RING
    "The operating system cannot run this application program."
  when IOPL_NOT_ENABLED
    "The operating system is not presently configured to run this application."
  when INVALID_SEGDPL
    "The operating system cannot run %1."
  when AUTODATASEG_EXCEEDS_64k
    "The operating system cannot run this application program."
  when RING2SEG_MUST_BE_MOVABLE
    "The code segment cannot be greater than or equal to 64K."
  when RELOC_CHAIN_XEEDS_SEGLIM
    "The operating system cannot run %1."
  when INFLOOP_IN_RELOC_CHAIN
    "The operating system cannot run %1."
  when ENVVAR_NOT_FOUND
    "The system could not find the environment option that was entered."
  when NO_SIGNAL_SENT
    "No process in the command subtree has a signal handler."
  when FILENAME_EXCED_RANGE
    "The filename or extension is too long."
  when RING2_STACK_IN_USE
    "The ring 2 stack is in use."
  when META_EXPANSION_TOO_LONG
    "The global filename characters, * or ?, are entered incorrectly or too many global filename characters are specified."
  when INVALID_SIGNAL_NUMBER
    "The signal being posted is not correct."
  when THREAD_1_INACTIVE
    "The signal handler cannot be set."
  when LOCKED
    "The segment is locked and cannot be reallocated."
  when TOO_MANY_MODULES
    "Too many dynamic-link modules are attached to this program or dynamic-link module."
  when NESTING_NOT_ALLOWED
    "Cannot nest calls to LoadModule."
  when EXE_MACHINE_TYPE_MISMATCH
    "The version of %1 is not compatible with the version you're running. Check your computer's system information to see whether you need a x86 ; or x64 ; version of the program, and then contact the software publisher."
  when EXE_CANNOT_MODIFY_SIGNED_BINARY
    "The image file %1 is signed, unable to modify."
  when EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY
    "The image file %1 is strong signed, unable to modify."
  when FILE_CHECKED_OUT
    "This file is checked out or locked for editing by another user."
  when CHECKOUT_REQUIRED
    "The file must be checked out before saving changes."
  when BAD_FILE_TYPE
    "The file type being saved or retrieved has been blocked."
  when FILE_TOO_LARGE
    "The file size exceeds the limit allowed and cannot be saved."
  when FORMS_AUTH_REQUIRED
    "Access Denied. Before opening files in this location, you must first add the web site to your trusted sites list, browse to the web site, and select the option to login automatically."
  when VIRUS_INFECTED
    "Operation did not complete successfully because the file contains a virus."
  when VIRUS_DELETED
    "This file contains a virus and cannot be opened. Due to the nature of this virus, the file has been removed from this location."
  when PIPE_LOCAL
    "The pipe is local."
  when BAD_PIPE
    "The pipe state is invalid."
  when PIPE_BUSY
    "All pipe instances are busy."
  when NO_DATA
    "The pipe is being closed."
  when PIPE_NOT_CONNECTED
    "No process is on the other end of the pipe."
  when MORE_DATA
    "More data is available."
  when VC_DISCONNECTED
    "The session was canceled."
  when INVALID_EA_NAME
    "The specified extended attribute name was invalid."
  when EA_LIST_INCONSISTENT
    "The extended attributes are inconsistent."
  when WAIT_TIMEOUT
    "The wait operation timed out."
  when NO_MORE_ITEMS
    "No more data is available."
  when CANNOT_COPY
    "The copy functions cannot be used."
  when DIRECTORY
    "The directory name is invalid."
  when EAS_DIDNT_FIT
    "The extended attributes did not fit in the buffer."
  when EA_FILE_CORRUPT
    "The extended attribute file on the mounted file system is corrupt."
  when EA_TABLE_FULL
    "The extended attribute table file is full."
  when INVALID_EA_HANDLE
    "The specified extended attribute handle is invalid."
  when EAS_NOT_SUPPORTED
    "The mounted file system does not support extended attributes."
  when NOT_OWNER
    "Attempt to release mutex not owned by caller."
  when TOO_MANY_POSTS
    "Too many posts were made to a semaphore."
  when PARTIAL_COPY
    "Only part of a ReadProcessMemory or WriteProcessMemory request was completed."
  when OPLOCK_NOT_GRANTED
    "The oplock request is denied."
  when INVALID_OPLOCK_PROTOCOL
    "An invalid oplock acknowledgment was received by the system."
  when DISK_TOO_FRAGMENTED
    "The volume is too fragmented to complete this operation."
  when DELETE_PENDING
    "The file cannot be opened because it is in the process of being deleted."
  when INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING
    "Short name settings may not be changed on this volume due to the global registry setting."
  when SHORT_NAMES_NOT_ENABLED_ON_VOLUME
    "Short names are not enabled on this volume."
  when SECURITY_STREAM_IS_INCONSISTENT
    "The security stream for the given volume is in an inconsistent state. Please run CHKDSK on the volume."
  when INVALID_LOCK_RANGE
    "A requested file lock operation cannot be processed due to an invalid byte range."
  when IMAGE_SUBSYSTEM_NOT_PRESENT
    "The subsystem needed to support the image type is not present."
  when NOTIFICATION_GUID_ALREADY_DEFINED
    "The specified file already has a notification GUID associated with it."
  when MR_MID_NOT_FOUND
    "The system cannot find message text for message number 0x%1 in the message file for %2."
  when SCOPE_NOT_FOUND
    "The scope specified was not found."
  when FAIL_NOACTION_REBOOT
    "No action was taken as a system reboot is required."
  when FAIL_SHUTDOWN
    "The shutdown operation failed."
  when FAIL_RESTART
    "The restart operation failed."
  when MAX_SESSIONS_REACHED
    "The maximum number of sessions has been reached."
  when THREAD_MODE_ALREADY_BACKGROUND
    "The thread is already in background processing mode."
  when THREAD_MODE_NOT_BACKGROUND
    "The thread is not in background processing mode."
  when PROCESS_MODE_ALREADY_BACKGROUND
    "The process is already in background processing mode."
  when PROCESS_MODE_NOT_BACKGROUND
    "The process is not in background processing mode."
  when INVALID_ADDRESS
    "Attempt to access invalid address."
  else
    "#{code}"
  end
end