windows-pr 1.1.3 → 1.2.0

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