windows-pr 1.1.3 → 1.2.0

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 (123) hide show
  1. data/CHANGES +15 -0
  2. data/MANIFEST +65 -65
  3. data/README +149 -149
  4. data/Rakefile +37 -52
  5. data/doc/conversion_guide.txt +37 -37
  6. data/lib/windows/clipboard.rb +2 -0
  7. data/lib/windows/com.rb +2 -0
  8. data/lib/windows/com/accessibility.rb +12 -10
  9. data/lib/windows/com/automation.rb +149 -147
  10. data/lib/windows/com/variant.rb +24 -22
  11. data/lib/windows/console.rb +114 -112
  12. data/lib/windows/debug.rb +35 -33
  13. data/lib/windows/device_io.rb +248 -246
  14. data/lib/windows/directory.rb +2 -0
  15. data/lib/windows/error.rb +2 -0
  16. data/lib/windows/eventlog.rb +2 -0
  17. data/lib/windows/file.rb +264 -262
  18. data/lib/windows/file_mapping.rb +25 -23
  19. data/lib/windows/filesystem.rb +2 -0
  20. data/lib/windows/gdi/bitmap.rb +65 -63
  21. data/lib/windows/gdi/device_context.rb +46 -44
  22. data/lib/windows/gdi/metafile.rb +40 -38
  23. data/lib/windows/gdi/painting_drawing.rb +115 -113
  24. data/lib/windows/handle.rb +2 -0
  25. data/lib/windows/library.rb +2 -0
  26. data/lib/windows/limits.rb +34 -31
  27. data/lib/windows/mailslot.rb +2 -0
  28. data/lib/windows/memory.rb +2 -0
  29. data/lib/windows/msvcrt/buffer.rb +75 -73
  30. data/lib/windows/msvcrt/directory.rb +31 -29
  31. data/lib/windows/msvcrt/file.rb +47 -45
  32. data/lib/windows/msvcrt/io.rb +62 -60
  33. data/lib/windows/msvcrt/string.rb +2 -0
  34. data/lib/windows/msvcrt/time.rb +169 -167
  35. data/lib/windows/national.rb +580 -578
  36. data/lib/windows/network/management.rb +525 -523
  37. data/lib/windows/network/snmp.rb +92 -90
  38. data/lib/windows/network/winsock.rb +128 -126
  39. data/lib/windows/nio.rb +2 -0
  40. data/lib/windows/ntfs/winternl.rb +96 -82
  41. data/lib/windows/path.rb +143 -141
  42. data/lib/windows/pipe.rb +42 -40
  43. data/lib/windows/process.rb +2 -0
  44. data/lib/windows/registry.rb +171 -126
  45. data/lib/windows/security.rb +479 -477
  46. data/lib/windows/security/authentication.rb +32 -30
  47. data/lib/windows/service.rb +142 -140
  48. data/lib/windows/shell.rb +171 -169
  49. data/lib/windows/socket.rb +86 -0
  50. data/lib/windows/sound.rb +39 -37
  51. data/lib/windows/synchronize.rb +133 -131
  52. data/lib/windows/system_info.rb +4 -2
  53. data/lib/windows/thread.rb +2 -0
  54. data/lib/windows/time.rb +48 -46
  55. data/lib/windows/tool_helper.rb +36 -34
  56. data/lib/windows/unicode.rb +2 -0
  57. data/lib/windows/volume.rb +61 -59
  58. data/lib/windows/window.rb +81 -79
  59. data/lib/windows/window/classes.rb +59 -57
  60. data/lib/windows/window/dialog.rb +91 -89
  61. data/lib/windows/window/menu.rb +102 -100
  62. data/lib/windows/window/message.rb +297 -295
  63. data/lib/windows/window/properties.rb +20 -18
  64. data/lib/windows/window/timer.rb +19 -17
  65. data/lib/windows/wsa.rb +102 -0
  66. data/test/tc_clipboard.rb +41 -41
  67. data/test/tc_com.rb +32 -32
  68. data/test/tc_com_automation.rb +15 -15
  69. data/test/tc_console.rb +108 -108
  70. data/test/tc_debug.rb +48 -48
  71. data/test/tc_device_io.rb +29 -29
  72. data/test/tc_directory.rb +25 -25
  73. data/test/tc_error.rb +38 -50
  74. data/test/tc_eventlog.rb +58 -58
  75. data/test/tc_file.rb +67 -67
  76. data/test/tc_file_mapping.rb +38 -38
  77. data/test/tc_filesystem.rb +27 -27
  78. data/test/tc_gdi_bitmap.rb +25 -25
  79. data/test/tc_gdi_metafile.rb +23 -23
  80. data/test/tc_handle.rb +36 -36
  81. data/test/tc_library.rb +37 -37
  82. data/test/tc_limits.rb +34 -34
  83. data/test/tc_mailslot.rb +22 -22
  84. data/test/tc_memory.rb +44 -44
  85. data/test/tc_msvcrt_buffer.rb +59 -68
  86. data/test/tc_msvcrt_directory.rb +96 -98
  87. data/test/tc_msvcrt_file.rb +80 -80
  88. data/test/tc_msvcrt_io.rb +48 -48
  89. data/test/tc_msvcrt_string.rb +94 -93
  90. data/test/tc_msvcrt_time.rb +19 -29
  91. data/test/tc_national.rb +38 -38
  92. data/test/tc_network_management.rb +32 -32
  93. data/test/tc_network_snmp.rb +31 -31
  94. data/test/tc_network_winsock.rb +34 -34
  95. data/test/tc_nio.rb +32 -32
  96. data/test/tc_ntfs_winternl.rb +33 -18
  97. data/test/tc_path.rb +90 -90
  98. data/test/tc_pipe.rb +53 -53
  99. data/test/tc_process.rb +24 -24
  100. data/test/tc_registry.rb +29 -29
  101. data/test/tc_security.rb +104 -104
  102. data/test/tc_security_authentication.rb +34 -34
  103. data/test/tc_service.rb +57 -57
  104. data/test/tc_shell.rb +34 -34
  105. data/test/tc_socket.rb +20 -0
  106. data/test/tc_sound.rb +37 -37
  107. data/test/tc_synchronize.rb +75 -75
  108. data/test/tc_system_info.rb +33 -43
  109. data/test/tc_thread.rb +29 -29
  110. data/test/tc_time.rb +32 -32
  111. data/test/tc_tool_helper.rb +29 -29
  112. data/test/tc_unicode.rb +62 -62
  113. data/test/tc_volume.rb +47 -47
  114. data/test/tc_window.rb +45 -45
  115. data/test/tc_window_classes.rb +33 -33
  116. data/test/tc_window_dialog.rb +33 -33
  117. data/test/tc_window_menu.rb +29 -29
  118. data/test/tc_window_message.rb +33 -33
  119. data/test/tc_window_properties.rb +29 -29
  120. data/test/tc_window_timer.rb +29 -29
  121. data/test/tc_wsa.rb +19 -0
  122. data/windows-pr.gemspec +1 -1
  123. metadata +13 -7
@@ -12,6 +12,8 @@ module Windows
12
12
  API.auto_method = true
13
13
  API.auto_unicode = true
14
14
 
15
+ private
16
+
15
17
  API.new('CreateDirectory', 'PP', 'B')
16
18
  API.new('CreateDirectoryEx', 'PPP', 'B')
17
19
  API.new('FindCloseChangeNotification', 'L', 'B')
data/lib/windows/error.rb CHANGED
@@ -18,6 +18,8 @@ module Windows
18
18
  API.auto_constant = true
19
19
  API.auto_unicode = true
20
20
 
21
+ private
22
+
21
23
  FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100
22
24
  FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200
23
25
  FORMAT_MESSAGE_FROM_STRING = 0x00000400
@@ -7,6 +7,8 @@ module Windows
7
7
  API.auto_method = true
8
8
  API.auto_unicode = true
9
9
 
10
+ private
11
+
10
12
  EVENTLOG_SEQUENTIAL_READ = 0x0001
11
13
  EVENTLOG_SEEK_READ = 0x0002
12
14
  EVENTLOG_FORWARDS_READ = 0x0004
data/lib/windows/file.rb CHANGED
@@ -1,262 +1,264 @@
1
- require 'windows/unicode'
2
- require 'windows/security'
3
-
4
- module Windows
5
- module File
6
- include Windows::Unicode
7
- include Windows::Security
8
-
9
- API.auto_namespace = 'Windows::File'
10
- API.auto_constant = true
11
- API.auto_method = true
12
- API.auto_unicode = true
13
-
14
- FILE_BEGIN = 0
15
- FILE_CURRENT = 1
16
- FILE_END = 2
17
-
18
- # File Attributes
19
-
20
- FILE_ATTRIBUTE_READONLY = 0x00000001
21
- FILE_ATTRIBUTE_HIDDEN = 0x00000002
22
- FILE_ATTRIBUTE_SYSTEM = 0x00000004
23
- FILE_ATTRIBUTE_DIRECTORY = 0x00000010
24
- FILE_ATTRIBUTE_ARCHIVE = 0x00000020
25
- FILE_ATTRIBUTE_ENCRYPTED = 0x00000040
26
- FILE_ATTRIBUTE_NORMAL = 0x00000080
27
- FILE_ATTRIBUTE_TEMPORARY = 0x00000100
28
- FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200
29
- FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
30
- FILE_ATTRIBUTE_COMPRESSED = 0x00000800
31
- FILE_ATTRIBUTE_OFFLINE = 0x00001000
32
- FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000
33
-
34
- # File types
35
-
36
- FILE_TYPE_UNKNOWN = 0x0000
37
- FILE_TYPE_DISK = 0x0001
38
- FILE_TYPE_CHAR = 0x0002
39
- FILE_TYPE_PIPE = 0x0003
40
- FILE_TYPE_REMOTE = 0x8000
41
-
42
- # File compression constants
43
-
44
- COMPRESSION_FORMAT_NONE = 0
45
- COMPRESSION_FORMAT_DEFAULT = 1
46
- COMPRESSION_FORMAT_LZNT1 = 2
47
- COMPRESSION_ENGINE_STANDARD = 0
48
- COMPRESSION_ENGINE_MAXIMUM = 256
49
- ANYSIZE_ARRAY = 1
50
-
51
- # File security and access rights
52
-
53
- FILE_READ_DATA = 1
54
- FILE_LIST_DIRECTORY = 1
55
- FILE_WRITE_DATA = 2
56
- FILE_ADD_FILE = 2
57
- FILE_APPEND_DATA = 4
58
- FILE_ADD_SUBDIRECTORY = 4
59
- FILE_CREATE_PIPE_INSTANCE = 4
60
- FILE_READ_EA = 8
61
- FILE_READ_PROPERTIES = 8
62
- FILE_WRITE_EA = 16
63
- FILE_WRITE_PROPERTIES = 16
64
- FILE_EXECUTE = 32
65
- FILE_TRAVERSE = 32
66
- FILE_DELETE_CHILD = 64
67
- FILE_READ_ATTRIBUTES = 128
68
- FILE_WRITE_ATTRIBUTES = 256
69
-
70
- FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF
71
-
72
- FILE_GENERIC_READ =
73
- STANDARD_RIGHTS_READ |
74
- FILE_READ_DATA |
75
- FILE_READ_ATTRIBUTES |
76
- FILE_READ_EA |
77
- SYNCHRONIZE
78
-
79
- FILE_GENERIC_WRITE =
80
- STANDARD_RIGHTS_WRITE |
81
- FILE_WRITE_DATA |
82
- FILE_WRITE_ATTRIBUTES |
83
- FILE_WRITE_EA |
84
- FILE_APPEND_DATA |
85
- SYNCHRONIZE
86
-
87
- FILE_GENERIC_EXECUTE =
88
- STANDARD_RIGHTS_EXECUTE |
89
- FILE_READ_ATTRIBUTES |
90
- FILE_EXECUTE |
91
- SYNCHRONIZE
92
-
93
- FILE_SHARE_READ = 1
94
- FILE_SHARE_WRITE = 2
95
- FILE_SHARE_DELETE = 4
96
- FILE_NOTIFY_CHANGE_FILE_NAME = 1
97
- FILE_NOTIFY_CHANGE_DIR_NAME = 2
98
- FILE_NOTIFY_CHANGE_ATTRIBUTES = 4
99
- FILE_NOTIFY_CHANGE_SIZE = 8
100
- FILE_NOTIFY_CHANGE_LAST_WRITE = 16
101
- FILE_NOTIFY_CHANGE_LAST_ACCESS = 32
102
- FILE_NOTIFY_CHANGE_CREATION = 64
103
- FILE_NOTIFY_CHANGE_SECURITY = 256
104
- FILE_CASE_SENSITIVE_SEARCH = 1
105
- FILE_CASE_PRESERVED_NAMES = 2
106
- FILE_UNICODE_ON_DISK = 4
107
- FILE_PERSISTENT_ACLS = 8
108
- FILE_FILE_COMPRESSION = 16
109
- FILE_VOLUME_QUOTAS = 32
110
- FILE_SUPPORTS_SPARSE_FILES = 64
111
- FILE_SUPPORTS_REPARSE_POINTS = 128
112
- FILE_SUPPORTS_REMOTE_STORAGE = 256
113
- FILE_VOLUME_IS_COMPRESSED = 0x8000
114
- FILE_SUPPORTS_OBJECT_IDS = 0x10000
115
- FILE_SUPPORTS_ENCRYPTION = 0x20000
116
-
117
- # File flags
118
-
119
- FILE_FLAG_WRITE_THROUGH = 0x80000000
120
- FILE_FLAG_OVERLAPPED = 0x40000000
121
- FILE_FLAG_NO_BUFFERING = 0x20000000
122
- FILE_FLAG_RANDOM_ACCESS = 0x10000000
123
- FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000
124
- FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
125
- FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
126
- FILE_FLAG_POSIX_SEMANTICS = 0x01000000
127
- FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
128
- FILE_FLAG_OPEN_NO_RECALL = 0x00100000
129
- FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000
130
-
131
- # File creation disposition
132
-
133
- CREATE_NEW = 1
134
- CREATE_ALWAYS = 2
135
- OPEN_EXISTING = 3
136
- OPEN_ALWAYS = 4
137
- TRUNCATE_EXISTING = 5
138
-
139
- SECTION_QUERY = 0x0001
140
- SECTION_MAP_WRITE = 0x0002
141
- SECTION_MAP_READ = 0x0004
142
- SECTION_MAP_EXECUTE = 0x0008
143
- SECTION_EXTEND_SIZE = 0x0010
144
-
145
- SECTION_ALL_ACCESS =
146
- STANDARD_RIGHTS_REQUIRED |
147
- SECTION_QUERY |
148
- SECTION_MAP_WRITE |
149
- SECTION_MAP_READ |
150
- SECTION_MAP_EXECUTE |
151
- SECTION_EXTEND_SIZE
152
-
153
- # Errors
154
-
155
- INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF
156
- INVALID_SET_FILE_POINTER = 0xFFFFFFFF
157
- INVALID_FILE_SIZE = 0xFFFFFFFF
158
-
159
- # Defined in Windows::Handle as well. Here for convenience.
160
-
161
- INVALID_HANDLE_VALUE = 0xFFFFFFFF unless defined? INVALID_HANDLE_VALUE
162
-
163
- # Misc
164
-
165
- LOCKFILE_EXCLUSIVE_LOCK = 0x00000001
166
- LOCKFILE_FAIL_IMMEDIATELY = 0x00000002
167
- MOVEFILE_REPLACE_EXISTING = 0x00000001
168
- MOVEFILE_COPY_ALLOWED = 0x00000002
169
- MOVEFILE_DELAY_UNTIL_REBOOT = 0x00000004
170
- MOVEFILE_WRITE_THROUGH = 0x00000008
171
- MOVEFILE_CREATE_HARDLINK = 0x00000010
172
- MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x00000020
173
- SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1
174
-
175
- # FILE_INFO_BY_HANDLE_CLASS enum
176
-
177
- FileBasicInfo = 0
178
- FileStandardInfo = 1
179
- FileNameInfo = 2
180
- FileRenameInfo = 3
181
- FileDispositionInfo = 4
182
- FileAllocationInfo = 5
183
- FileEndOfFileInfo = 6
184
- FileStreamInfo = 7
185
- FileCompressionInfo = 8
186
- FileAttributeTagInfo = 9
187
- FileIdBothDirectoryInfo = 10
188
- FileIdBothDirectoryRestartInfo = 11
189
- FileIoPriorityHintInfo = 12
190
- MaximumFileInfoByHandleClass = 13
191
-
192
- # Reparse point tags
193
-
194
- IO_REPARSE_TAG_DFS = 0x8000000A
195
- IO_REPARSE_TAG_DFSR = 0x80000012
196
- IO_REPARSE_TAG_HSM = 0xC0000004
197
- IO_REPARSE_TAG_HSM2 = 0x80000006
198
- IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003
199
- IO_REPARSE_TAG_SIS = 0x80000007
200
- IO_REPARSE_TAG_SYMLINK = 0xA000000C
201
-
202
- API.new('CopyFile', 'SSI', 'B')
203
- API.new('CopyFileEx', 'SSKPPL', 'B')
204
- API.new('CreateFile', 'SLLPLLL', 'L')
205
- API.new('CreateHardLink', 'SSP', 'B')
206
- API.new('DecryptFile', 'SL', 'B', 'advapi32')
207
- API.new('DeleteFile', 'S', 'B')
208
- API.new('EncryptFile', 'S', 'B', 'advapi32')
209
- API.new('FindClose', 'L', 'B')
210
- API.new('FindFirstFile', 'SP', 'L')
211
- API.new('FindFirstFileEx', 'SIPIII', 'L')
212
- API.new('FindNextFile', 'LP', 'B')
213
- API.new('FlushFileBuffers', 'L', 'B')
214
- API.new('GetBinaryType', 'SP', 'B')
215
- API.new('GetFileAttributes', 'S', 'L')
216
- API.new('GetFileAttributesEx', 'SPP', 'I')
217
- API.new('GetFileInformationByHandle', 'LP', 'B')
218
- API.new('GetFileSize', 'LP', 'L')
219
- API.new('GetFileSizeEx', 'LP', 'B')
220
- API.new('GetFileType', 'L', 'L')
221
- API.new('GetFullPathName', 'SLPP', 'L')
222
- API.new('GetLongPathName', 'SPL', 'L')
223
- API.new('GetShortPathName', 'SPL', 'L')
224
- API.new('LockFile', 'LLLLL', 'B')
225
- API.new('LockFileEx', 'LLLLLL', 'B')
226
- API.new('MoveFile', 'SS', 'B')
227
- API.new('MoveFileEx', 'SSL', 'B')
228
- API.new('ReadFile', 'LPLPP', 'B')
229
- API.new('ReadFileEx', 'LPLPK', 'B')
230
- API.new('SetEndOfFile', 'L', 'B')
231
- API.new('SetFileAttributes', 'SL', 'B')
232
- API.new('UnlockFile', 'LLLLL', 'B')
233
- API.new('UnlockFileEx', 'LLLLL', 'B')
234
- API.new('WriteFile', 'LPLPP', 'B')
235
- API.new('WriteFileEx', 'LPLPK', 'B')
236
-
237
- begin
238
- API.new('SetFileShortName', 'LP', 'B')
239
- API.new('SetFileValidData', 'LL', 'B')
240
- rescue Win32::API::LoadLibraryError
241
- # Windows XP or later
242
- end
243
-
244
- begin
245
- API.new('Wow64DisableWow64FsRedirection', 'P', 'B')
246
- API.new('Wow64EnableWow64FsRedirection', 'I', 'I')
247
- API.new('Wow64RevertWow64FsRedirection', 'L', 'B')
248
- rescue Win32::API::LoadLibraryError
249
- # Windows XP 64-bit and later
250
- end
251
-
252
- begin
253
- API.new('CreateSymbolicLink', 'SSL', 'B')
254
- API.new('CreateSymbolicLinkTransacted', 'SSLL', 'B')
255
- API.new('GetFileInformationByHandleEx', 'LLPL', 'B')
256
- API.new('GetFinalPathNameByHandle', 'LPLL', 'L')
257
- API.new('SetFileInformationByHandle', 'LLPL', 'B')
258
- rescue Win32::API::LoadLibraryError
259
- # Windows Vista
260
- end
261
- end
262
- end
1
+ require 'windows/unicode'
2
+ require 'windows/security'
3
+
4
+ module Windows
5
+ module File
6
+ include Windows::Unicode
7
+ include Windows::Security
8
+
9
+ API.auto_namespace = 'Windows::File'
10
+ API.auto_constant = true
11
+ API.auto_method = true
12
+ API.auto_unicode = true
13
+
14
+ private
15
+
16
+ FILE_BEGIN = 0
17
+ FILE_CURRENT = 1
18
+ FILE_END = 2
19
+
20
+ # File Attributes
21
+
22
+ FILE_ATTRIBUTE_READONLY = 0x00000001
23
+ FILE_ATTRIBUTE_HIDDEN = 0x00000002
24
+ FILE_ATTRIBUTE_SYSTEM = 0x00000004
25
+ FILE_ATTRIBUTE_DIRECTORY = 0x00000010
26
+ FILE_ATTRIBUTE_ARCHIVE = 0x00000020
27
+ FILE_ATTRIBUTE_ENCRYPTED = 0x00000040
28
+ FILE_ATTRIBUTE_NORMAL = 0x00000080
29
+ FILE_ATTRIBUTE_TEMPORARY = 0x00000100
30
+ FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200
31
+ FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
32
+ FILE_ATTRIBUTE_COMPRESSED = 0x00000800
33
+ FILE_ATTRIBUTE_OFFLINE = 0x00001000
34
+ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000
35
+
36
+ # File types
37
+
38
+ FILE_TYPE_UNKNOWN = 0x0000
39
+ FILE_TYPE_DISK = 0x0001
40
+ FILE_TYPE_CHAR = 0x0002
41
+ FILE_TYPE_PIPE = 0x0003
42
+ FILE_TYPE_REMOTE = 0x8000
43
+
44
+ # File compression constants
45
+
46
+ COMPRESSION_FORMAT_NONE = 0
47
+ COMPRESSION_FORMAT_DEFAULT = 1
48
+ COMPRESSION_FORMAT_LZNT1 = 2
49
+ COMPRESSION_ENGINE_STANDARD = 0
50
+ COMPRESSION_ENGINE_MAXIMUM = 256
51
+ ANYSIZE_ARRAY = 1
52
+
53
+ # File security and access rights
54
+
55
+ FILE_READ_DATA = 1
56
+ FILE_LIST_DIRECTORY = 1
57
+ FILE_WRITE_DATA = 2
58
+ FILE_ADD_FILE = 2
59
+ FILE_APPEND_DATA = 4
60
+ FILE_ADD_SUBDIRECTORY = 4
61
+ FILE_CREATE_PIPE_INSTANCE = 4
62
+ FILE_READ_EA = 8
63
+ FILE_READ_PROPERTIES = 8
64
+ FILE_WRITE_EA = 16
65
+ FILE_WRITE_PROPERTIES = 16
66
+ FILE_EXECUTE = 32
67
+ FILE_TRAVERSE = 32
68
+ FILE_DELETE_CHILD = 64
69
+ FILE_READ_ATTRIBUTES = 128
70
+ FILE_WRITE_ATTRIBUTES = 256
71
+
72
+ FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF
73
+
74
+ FILE_GENERIC_READ =
75
+ STANDARD_RIGHTS_READ |
76
+ FILE_READ_DATA |
77
+ FILE_READ_ATTRIBUTES |
78
+ FILE_READ_EA |
79
+ SYNCHRONIZE
80
+
81
+ FILE_GENERIC_WRITE =
82
+ STANDARD_RIGHTS_WRITE |
83
+ FILE_WRITE_DATA |
84
+ FILE_WRITE_ATTRIBUTES |
85
+ FILE_WRITE_EA |
86
+ FILE_APPEND_DATA |
87
+ SYNCHRONIZE
88
+
89
+ FILE_GENERIC_EXECUTE =
90
+ STANDARD_RIGHTS_EXECUTE |
91
+ FILE_READ_ATTRIBUTES |
92
+ FILE_EXECUTE |
93
+ SYNCHRONIZE
94
+
95
+ FILE_SHARE_READ = 1
96
+ FILE_SHARE_WRITE = 2
97
+ FILE_SHARE_DELETE = 4
98
+ FILE_NOTIFY_CHANGE_FILE_NAME = 1
99
+ FILE_NOTIFY_CHANGE_DIR_NAME = 2
100
+ FILE_NOTIFY_CHANGE_ATTRIBUTES = 4
101
+ FILE_NOTIFY_CHANGE_SIZE = 8
102
+ FILE_NOTIFY_CHANGE_LAST_WRITE = 16
103
+ FILE_NOTIFY_CHANGE_LAST_ACCESS = 32
104
+ FILE_NOTIFY_CHANGE_CREATION = 64
105
+ FILE_NOTIFY_CHANGE_SECURITY = 256
106
+ FILE_CASE_SENSITIVE_SEARCH = 1
107
+ FILE_CASE_PRESERVED_NAMES = 2
108
+ FILE_UNICODE_ON_DISK = 4
109
+ FILE_PERSISTENT_ACLS = 8
110
+ FILE_FILE_COMPRESSION = 16
111
+ FILE_VOLUME_QUOTAS = 32
112
+ FILE_SUPPORTS_SPARSE_FILES = 64
113
+ FILE_SUPPORTS_REPARSE_POINTS = 128
114
+ FILE_SUPPORTS_REMOTE_STORAGE = 256
115
+ FILE_VOLUME_IS_COMPRESSED = 0x8000
116
+ FILE_SUPPORTS_OBJECT_IDS = 0x10000
117
+ FILE_SUPPORTS_ENCRYPTION = 0x20000
118
+
119
+ # File flags
120
+
121
+ FILE_FLAG_WRITE_THROUGH = 0x80000000
122
+ FILE_FLAG_OVERLAPPED = 0x40000000
123
+ FILE_FLAG_NO_BUFFERING = 0x20000000
124
+ FILE_FLAG_RANDOM_ACCESS = 0x10000000
125
+ FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000
126
+ FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
127
+ FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
128
+ FILE_FLAG_POSIX_SEMANTICS = 0x01000000
129
+ FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
130
+ FILE_FLAG_OPEN_NO_RECALL = 0x00100000
131
+ FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000
132
+
133
+ # File creation disposition
134
+
135
+ CREATE_NEW = 1
136
+ CREATE_ALWAYS = 2
137
+ OPEN_EXISTING = 3
138
+ OPEN_ALWAYS = 4
139
+ TRUNCATE_EXISTING = 5
140
+
141
+ SECTION_QUERY = 0x0001
142
+ SECTION_MAP_WRITE = 0x0002
143
+ SECTION_MAP_READ = 0x0004
144
+ SECTION_MAP_EXECUTE = 0x0008
145
+ SECTION_EXTEND_SIZE = 0x0010
146
+
147
+ SECTION_ALL_ACCESS =
148
+ STANDARD_RIGHTS_REQUIRED |
149
+ SECTION_QUERY |
150
+ SECTION_MAP_WRITE |
151
+ SECTION_MAP_READ |
152
+ SECTION_MAP_EXECUTE |
153
+ SECTION_EXTEND_SIZE
154
+
155
+ # Errors
156
+
157
+ INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF
158
+ INVALID_SET_FILE_POINTER = 0xFFFFFFFF
159
+ INVALID_FILE_SIZE = 0xFFFFFFFF
160
+
161
+ # Defined in Windows::Handle as well. Here for convenience.
162
+
163
+ INVALID_HANDLE_VALUE = 0xFFFFFFFF unless defined? INVALID_HANDLE_VALUE
164
+
165
+ # Misc
166
+
167
+ LOCKFILE_EXCLUSIVE_LOCK = 0x00000001
168
+ LOCKFILE_FAIL_IMMEDIATELY = 0x00000002
169
+ MOVEFILE_REPLACE_EXISTING = 0x00000001
170
+ MOVEFILE_COPY_ALLOWED = 0x00000002
171
+ MOVEFILE_DELAY_UNTIL_REBOOT = 0x00000004
172
+ MOVEFILE_WRITE_THROUGH = 0x00000008
173
+ MOVEFILE_CREATE_HARDLINK = 0x00000010
174
+ MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x00000020
175
+ SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1
176
+
177
+ # FILE_INFO_BY_HANDLE_CLASS enum
178
+
179
+ FileBasicInfo = 0
180
+ FileStandardInfo = 1
181
+ FileNameInfo = 2
182
+ FileRenameInfo = 3
183
+ FileDispositionInfo = 4
184
+ FileAllocationInfo = 5
185
+ FileEndOfFileInfo = 6
186
+ FileStreamInfo = 7
187
+ FileCompressionInfo = 8
188
+ FileAttributeTagInfo = 9
189
+ FileIdBothDirectoryInfo = 10
190
+ FileIdBothDirectoryRestartInfo = 11
191
+ FileIoPriorityHintInfo = 12
192
+ MaximumFileInfoByHandleClass = 13
193
+
194
+ # Reparse point tags
195
+
196
+ IO_REPARSE_TAG_DFS = 0x8000000A
197
+ IO_REPARSE_TAG_DFSR = 0x80000012
198
+ IO_REPARSE_TAG_HSM = 0xC0000004
199
+ IO_REPARSE_TAG_HSM2 = 0x80000006
200
+ IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003
201
+ IO_REPARSE_TAG_SIS = 0x80000007
202
+ IO_REPARSE_TAG_SYMLINK = 0xA000000C
203
+
204
+ API.new('CopyFile', 'SSI', 'B')
205
+ API.new('CopyFileEx', 'SSKPPL', 'B')
206
+ API.new('CreateFile', 'SLLPLLL', 'L')
207
+ API.new('CreateHardLink', 'SSP', 'B')
208
+ API.new('DecryptFile', 'SL', 'B', 'advapi32')
209
+ API.new('DeleteFile', 'S', 'B')
210
+ API.new('EncryptFile', 'S', 'B', 'advapi32')
211
+ API.new('FindClose', 'L', 'B')
212
+ API.new('FindFirstFile', 'SP', 'L')
213
+ API.new('FindFirstFileEx', 'SIPIII', 'L')
214
+ API.new('FindNextFile', 'LP', 'B')
215
+ API.new('FlushFileBuffers', 'L', 'B')
216
+ API.new('GetBinaryType', 'SP', 'B')
217
+ API.new('GetFileAttributes', 'S', 'L')
218
+ API.new('GetFileAttributesEx', 'SPP', 'I')
219
+ API.new('GetFileInformationByHandle', 'LP', 'B')
220
+ API.new('GetFileSize', 'LP', 'L')
221
+ API.new('GetFileSizeEx', 'LP', 'B')
222
+ API.new('GetFileType', 'L', 'L')
223
+ API.new('GetFullPathName', 'SLPP', 'L')
224
+ API.new('GetLongPathName', 'SPL', 'L')
225
+ API.new('GetShortPathName', 'SPL', 'L')
226
+ API.new('LockFile', 'LLLLL', 'B')
227
+ API.new('LockFileEx', 'LLLLLL', 'B')
228
+ API.new('MoveFile', 'SS', 'B')
229
+ API.new('MoveFileEx', 'SSL', 'B')
230
+ API.new('ReadFile', 'LPLPP', 'B')
231
+ API.new('ReadFileEx', 'LPLPK', 'B')
232
+ API.new('SetEndOfFile', 'L', 'B')
233
+ API.new('SetFileAttributes', 'SL', 'B')
234
+ API.new('UnlockFile', 'LLLLL', 'B')
235
+ API.new('UnlockFileEx', 'LLLLL', 'B')
236
+ API.new('WriteFile', 'LPLPP', 'B')
237
+ API.new('WriteFileEx', 'LPLPK', 'B')
238
+
239
+ begin
240
+ API.new('SetFileShortName', 'LP', 'B')
241
+ API.new('SetFileValidData', 'LL', 'B')
242
+ rescue Win32::API::LoadLibraryError
243
+ # Windows XP or later
244
+ end
245
+
246
+ begin
247
+ API.new('Wow64DisableWow64FsRedirection', 'P', 'B')
248
+ API.new('Wow64EnableWow64FsRedirection', 'I', 'I')
249
+ API.new('Wow64RevertWow64FsRedirection', 'L', 'B')
250
+ rescue Win32::API::LoadLibraryError
251
+ # Windows XP 64-bit and later
252
+ end
253
+
254
+ begin
255
+ API.new('CreateSymbolicLink', 'SSL', 'B')
256
+ API.new('CreateSymbolicLinkTransacted', 'SSLL', 'B')
257
+ API.new('GetFileInformationByHandleEx', 'LLPL', 'B')
258
+ API.new('GetFinalPathNameByHandle', 'LPLL', 'L')
259
+ API.new('SetFileInformationByHandle', 'LLPL', 'B')
260
+ rescue Win32::API::LoadLibraryError
261
+ # Windows Vista
262
+ end
263
+ end
264
+ end