chef 0.10.10 → 10.12.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +6 -0
- data/distro/common/html/chef-client.8.html +4 -3
- data/distro/common/html/chef-expander.8.html +3 -3
- data/distro/common/html/chef-expanderctl.8.html +3 -3
- data/distro/common/html/chef-server-webui.8.html +3 -3
- data/distro/common/html/chef-server.8.html +3 -3
- data/distro/common/html/chef-solo.8.html +3 -3
- data/distro/common/html/chef-solr.8.html +3 -3
- data/distro/common/html/knife-bootstrap.1.html +3 -3
- data/distro/common/html/knife-client.1.html +3 -3
- data/distro/common/html/knife-configure.1.html +3 -3
- data/distro/common/html/knife-cookbook-site.1.html +3 -3
- data/distro/common/html/knife-cookbook.1.html +3 -3
- data/distro/common/html/knife-data-bag.1.html +3 -3
- data/distro/common/html/knife-environment.1.html +3 -3
- data/distro/common/html/knife-exec.1.html +3 -3
- data/distro/common/html/knife-index.1.html +3 -3
- data/distro/common/html/knife-node.1.html +3 -3
- data/distro/common/html/knife-role.1.html +3 -3
- data/distro/common/html/knife-search.1.html +3 -3
- data/distro/common/html/knife-ssh.1.html +3 -3
- data/distro/common/html/knife-status.1.html +3 -3
- data/distro/common/html/knife-tag.1.html +3 -3
- data/distro/common/html/knife.1.html +3 -3
- data/distro/common/html/shef.1.html +3 -3
- data/distro/common/man/man1/knife-bootstrap.1 +1 -1
- data/distro/common/man/man1/knife-client.1 +1 -1
- data/distro/common/man/man1/knife-configure.1 +1 -1
- data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
- data/distro/common/man/man1/knife-cookbook.1 +1 -1
- data/distro/common/man/man1/knife-data-bag.1 +1 -1
- data/distro/common/man/man1/knife-environment.1 +1 -1
- data/distro/common/man/man1/knife-exec.1 +1 -1
- data/distro/common/man/man1/knife-index.1 +1 -1
- data/distro/common/man/man1/knife-node.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +1 -1
- data/distro/common/man/man1/knife-search.1 +1 -1
- data/distro/common/man/man1/knife-ssh.1 +1 -1
- data/distro/common/man/man1/knife-status.1 +1 -1
- data/distro/common/man/man1/knife-tag.1 +1 -1
- data/distro/common/man/man1/knife.1 +1 -1
- data/distro/common/man/man1/shef.1 +1 -1
- data/distro/common/man/man8/chef-client.8 +5 -1
- data/distro/common/man/man8/chef-expander.8 +1 -1
- data/distro/common/man/man8/chef-expanderctl.8 +1 -1
- data/distro/common/man/man8/chef-server-webui.8 +1 -1
- data/distro/common/man/man8/chef-server.8 +1 -1
- data/distro/common/man/man8/chef-solo.8 +1 -1
- data/distro/common/man/man8/chef-solr.8 +1 -1
- data/distro/common/markdown/man8/chef-client.mkd +2 -0
- data/lib/chef/application/client.rb +1 -1
- data/lib/chef/application/solo.rb +1 -1
- data/lib/chef/application/windows_service.rb +1 -1
- data/lib/chef/config.rb +1 -1
- data/lib/chef/exceptions.rb +3 -0
- data/lib/chef/file_access_control/unix.rb +21 -6
- data/lib/chef/file_access_control/windows.rb +7 -7
- data/lib/chef/knife/ssh.rb +4 -2
- data/lib/chef/mixin/enforce_ownership_and_permissions.rb +1 -1
- data/lib/chef/provider/link.rb +49 -45
- data/lib/chef/provider/mdadm.rb +4 -1
- data/lib/chef/provider/package/rubygems.rb +2 -1
- data/lib/chef/provider/remote_file.rb +17 -1
- data/lib/chef/reserved_names.rb +9 -0
- data/lib/chef/resource/link.rb +1 -17
- data/lib/chef/resource/mdadm.rb +1 -1
- data/lib/chef/resource_platform_map.rb +1 -3
- data/lib/chef/rest.rb +48 -17
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api.rb +16 -1
- data/lib/chef/win32/api/error.rb +9 -9
- data/lib/chef/win32/api/file.rb +263 -17
- data/lib/chef/win32/api/memory.rb +12 -12
- data/lib/chef/win32/api/process.rb +5 -5
- data/lib/chef/win32/api/psapi.rb +3 -3
- data/lib/chef/win32/api/security.rb +41 -41
- data/lib/chef/win32/api/system.rb +8 -8
- data/lib/chef/win32/api/unicode.rb +6 -6
- data/lib/chef/win32/error.rb +4 -4
- data/lib/chef/win32/file.rb +65 -15
- data/lib/chef/win32/file/info.rb +7 -7
- data/lib/chef/win32/handle.rb +3 -3
- data/lib/chef/win32/memory.rb +8 -8
- data/lib/chef/win32/process.rb +8 -8
- data/lib/chef/win32/security.rb +49 -49
- data/lib/chef/win32/security/ace.rb +11 -11
- data/lib/chef/win32/security/acl.rb +10 -10
- data/lib/chef/win32/security/securable_object.rb +13 -13
- data/lib/chef/win32/security/security_descriptor.rb +12 -12
- data/lib/chef/win32/security/sid.rb +8 -8
- data/lib/chef/win32/security/token.rb +8 -8
- data/lib/chef/win32/unicode.rb +5 -5
- data/lib/chef/win32/version.rb +4 -4
- metadata +374 -370
data/lib/chef/version.rb
CHANGED
data/lib/chef/win32/api.rb
CHANGED
@@ -18,11 +18,26 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'ffi'
|
21
|
+
require 'chef/reserved_names'
|
22
|
+
require 'chef/exceptions'
|
21
23
|
|
22
24
|
class Chef
|
23
|
-
module Win32
|
25
|
+
module ReservedNames::Win32
|
24
26
|
module API
|
25
27
|
|
28
|
+
# Attempts to use FFI's attach_function method to link a native Win32
|
29
|
+
# function into the calling module. If this fails a dummy method is
|
30
|
+
# defined which when called, raises a helpful exception to the end-user.
|
31
|
+
def safe_attach_function(win32_func, *args)
|
32
|
+
begin
|
33
|
+
attach_function(win32_func.to_sym, *args)
|
34
|
+
rescue FFI::NotFoundError
|
35
|
+
define_method(win32_func.to_sym) do |*margs|
|
36
|
+
raise Chef::Exceptions::Win32APIFunctionNotImplemented, "This version of Windows does not implement the Win32 function [#{win32_func}]."
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
26
41
|
# put shared stuff (like constants) for all raw Win32 API calls
|
27
42
|
def self.extended(host)
|
28
43
|
host.extend FFI::Library
|
data/lib/chef/win32/api/error.rb
CHANGED
@@ -19,10 +19,10 @@
|
|
19
19
|
require 'chef/win32/api'
|
20
20
|
|
21
21
|
class Chef
|
22
|
-
module Win32
|
22
|
+
module ReservedNames::Win32
|
23
23
|
module API
|
24
24
|
module Error
|
25
|
-
extend Chef::Win32::API
|
25
|
+
extend Chef::ReservedNames::Win32::API
|
26
26
|
|
27
27
|
###############################################
|
28
28
|
# Win32 API Constants
|
@@ -890,30 +890,30 @@ DWORD WINAPI FormatMessage(
|
|
890
890
|
__in_opt va_list *Arguments
|
891
891
|
);
|
892
892
|
=end
|
893
|
-
|
894
|
-
|
893
|
+
safe_attach_function :FormatMessageA, [:DWORD, :LPCVOID, :DWORD, :DWORD, :LPTSTR, :DWORD, :varargs], :DWORD
|
894
|
+
safe_attach_function :FormatMessageW, [:DWORD, :LPCVOID, :DWORD, :DWORD, :LPWSTR, :DWORD, :varargs], :DWORD
|
895
895
|
|
896
896
|
=begin
|
897
897
|
DWORD WINAPI GetLastError(void);
|
898
898
|
=end
|
899
|
-
|
899
|
+
safe_attach_function :GetLastError, [], :DWORD
|
900
900
|
=begin
|
901
901
|
void WINAPI SetLastError(
|
902
902
|
__in DWORD dwErrCode
|
903
903
|
);
|
904
904
|
=end
|
905
|
-
|
906
|
-
|
905
|
+
safe_attach_function :SetLastError, [:DWORD], :void
|
906
|
+
safe_attach_function :SetLastErrorEx, [:DWORD, :DWORD], :void
|
907
907
|
=begin
|
908
908
|
UINT WINAPI GetErrorMode(void);s
|
909
909
|
=end
|
910
|
-
|
910
|
+
safe_attach_function :GetErrorMode, [], :uint
|
911
911
|
=begin
|
912
912
|
UINT WINAPI SetErrorMode(
|
913
913
|
__in UINT uMode
|
914
914
|
);
|
915
915
|
=end
|
916
|
-
|
916
|
+
safe_attach_function :SetErrorMode, [:UINT], :UINT
|
917
917
|
|
918
918
|
end
|
919
919
|
end
|
data/lib/chef/win32/api/file.rb
CHANGED
@@ -22,12 +22,12 @@ require 'chef/win32/api/security'
|
|
22
22
|
require 'chef/win32/api/system'
|
23
23
|
|
24
24
|
class Chef
|
25
|
-
module Win32
|
25
|
+
module ReservedNames::Win32
|
26
26
|
module API
|
27
27
|
module File
|
28
|
-
extend Chef::Win32::API
|
29
|
-
include Chef::Win32::API::Security
|
30
|
-
include Chef::Win32::API::System
|
28
|
+
extend Chef::ReservedNames::Win32::API
|
29
|
+
include Chef::ReservedNames::Win32::API::Security
|
30
|
+
include Chef::ReservedNames::Win32::API::System
|
31
31
|
|
32
32
|
###############################################
|
33
33
|
# Win32 API Constants
|
@@ -50,7 +50,18 @@ class Chef
|
|
50
50
|
FILE_ATTRIBUTE_VIRTUAL = 0x00010000
|
51
51
|
INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF
|
52
52
|
|
53
|
-
|
53
|
+
FILE_FLAG_WRITE_THROUGH = 0x80000000
|
54
|
+
FILE_FLAG_OVERLAPPED = 0x40000000
|
55
|
+
FILE_FLAG_NO_BUFFERING = 0x20000000
|
56
|
+
FILE_FLAG_RANDOM_ACCESS = 0x10000000
|
57
|
+
FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000
|
58
|
+
FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
|
59
|
+
FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
|
60
|
+
FILE_FLAG_POSIX_SEMANTICS = 0x01000000
|
61
|
+
FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
|
62
|
+
FILE_FLAG_OPEN_NO_RECALL = 0x00100000
|
63
|
+
FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000
|
64
|
+
|
54
65
|
INVALID_HANDLE_VALUE = 0xFFFFFFFF
|
55
66
|
MAX_PATH = 260
|
56
67
|
|
@@ -63,6 +74,109 @@ class Chef
|
|
63
74
|
FILE_SHARE_READ = 0x00000001
|
64
75
|
OPEN_EXISTING = 3
|
65
76
|
|
77
|
+
# DeviceIoControl control codes
|
78
|
+
# -----------------------------
|
79
|
+
FILE_DEVICE_BEEP = 0x00000001
|
80
|
+
FILE_DEVICE_CD_ROM = 0x00000002
|
81
|
+
FILE_DEVICE_CD_ROM_FILE_SYSTEM = 0x00000003
|
82
|
+
FILE_DEVICE_CONTROLLER = 0x00000004
|
83
|
+
FILE_DEVICE_DATALINK = 0x00000005
|
84
|
+
FILE_DEVICE_DFS = 0x00000006
|
85
|
+
FILE_DEVICE_DISK = 0x00000007
|
86
|
+
FILE_DEVICE_DISK_FILE_SYSTEM = 0x00000008
|
87
|
+
FILE_DEVICE_FILE_SYSTEM = 0x00000009
|
88
|
+
FILE_DEVICE_INPORT_PORT = 0x0000000a
|
89
|
+
FILE_DEVICE_KEYBOARD = 0x0000000b
|
90
|
+
FILE_DEVICE_MAILSLOT = 0x0000000c
|
91
|
+
FILE_DEVICE_MIDI_IN = 0x0000000d
|
92
|
+
FILE_DEVICE_MIDI_OUT = 0x0000000e
|
93
|
+
FILE_DEVICE_MOUSE = 0x0000000f
|
94
|
+
FILE_DEVICE_MULTI_UNC_PROVIDER = 0x00000010
|
95
|
+
FILE_DEVICE_NAMED_PIPE = 0x00000011
|
96
|
+
FILE_DEVICE_NETWORK = 0x00000012
|
97
|
+
FILE_DEVICE_NETWORK_BROWSER = 0x00000013
|
98
|
+
FILE_DEVICE_NETWORK_FILE_SYSTEM = 0x00000014
|
99
|
+
FILE_DEVICE_NULL = 0x00000015
|
100
|
+
FILE_DEVICE_PARALLEL_PORT = 0x00000016
|
101
|
+
FILE_DEVICE_PHYSICAL_NETCARD = 0x00000017
|
102
|
+
FILE_DEVICE_PRINTER = 0x00000018
|
103
|
+
FILE_DEVICE_SCANNER = 0x00000019
|
104
|
+
FILE_DEVICE_SERIAL_MOUSE_PORT = 0x0000001a
|
105
|
+
FILE_DEVICE_SERIAL_PORT = 0x0000001b
|
106
|
+
FILE_DEVICE_SCREEN = 0x0000001c
|
107
|
+
FILE_DEVICE_SOUND = 0x0000001d
|
108
|
+
FILE_DEVICE_STREAMS = 0x0000001e
|
109
|
+
FILE_DEVICE_TAPE = 0x0000001f
|
110
|
+
FILE_DEVICE_TAPE_FILE_SYSTEM = 0x00000020
|
111
|
+
FILE_DEVICE_TRANSPORT = 0x00000021
|
112
|
+
FILE_DEVICE_UNKNOWN = 0x00000022
|
113
|
+
FILE_DEVICE_VIDEO = 0x00000023
|
114
|
+
FILE_DEVICE_VIRTUAL_DISK = 0x00000024
|
115
|
+
FILE_DEVICE_WAVE_IN = 0x00000025
|
116
|
+
FILE_DEVICE_WAVE_OUT = 0x00000026
|
117
|
+
FILE_DEVICE_8042_PORT = 0x00000027
|
118
|
+
FILE_DEVICE_NETWORK_REDIRECTOR = 0x00000028
|
119
|
+
FILE_DEVICE_BATTERY = 0x00000029
|
120
|
+
FILE_DEVICE_BUS_EXTENDER = 0x0000002a
|
121
|
+
FILE_DEVICE_MODEM = 0x0000002b
|
122
|
+
FILE_DEVICE_VDM = 0x0000002c
|
123
|
+
FILE_DEVICE_MASS_STORAGE = 0x0000002d
|
124
|
+
FILE_DEVICE_SMB = 0x0000002e
|
125
|
+
FILE_DEVICE_KS = 0x0000002f
|
126
|
+
FILE_DEVICE_CHANGER = 0x00000030
|
127
|
+
FILE_DEVICE_SMARTCARD = 0x00000031
|
128
|
+
FILE_DEVICE_ACPI = 0x00000032
|
129
|
+
FILE_DEVICE_DVD = 0x00000033
|
130
|
+
FILE_DEVICE_FULLSCREEN_VIDEO = 0x00000034
|
131
|
+
FILE_DEVICE_DFS_FILE_SYSTEM = 0x00000035
|
132
|
+
FILE_DEVICE_DFS_VOLUME = 0x00000036
|
133
|
+
FILE_DEVICE_SERENUM = 0x00000037
|
134
|
+
FILE_DEVICE_TERMSRV = 0x00000038
|
135
|
+
FILE_DEVICE_KSEC = 0x00000039
|
136
|
+
FILE_DEVICE_FIPS = 0x0000003A
|
137
|
+
FILE_DEVICE_INFINIBAND = 0x0000003B
|
138
|
+
FILE_DEVICE_VMBUS = 0x0000003E
|
139
|
+
FILE_DEVICE_CRYPT_PROVIDER = 0x0000003F
|
140
|
+
FILE_DEVICE_WPD = 0x00000040
|
141
|
+
FILE_DEVICE_BLUETOOTH = 0x00000041
|
142
|
+
FILE_DEVICE_MT_COMPOSITE = 0x00000042
|
143
|
+
FILE_DEVICE_MT_TRANSPORT = 0x00000043
|
144
|
+
FILE_DEVICE_BIOMETRIC = 0x00000044
|
145
|
+
FILE_DEVICE_PMI = 0x00000045
|
146
|
+
|
147
|
+
# Methods
|
148
|
+
METHOD_BUFFERED = 0
|
149
|
+
METHOD_IN_DIRECT = 1
|
150
|
+
METHOD_OUT_DIRECT = 2
|
151
|
+
METHOD_NEITHER = 3
|
152
|
+
METHOD_DIRECT_TO_HARDWARE = METHOD_IN_DIRECT
|
153
|
+
METHOD_DIRECT_FROM_HARDWARE = METHOD_OUT_DIRECT
|
154
|
+
|
155
|
+
# Access
|
156
|
+
FILE_ANY_ACCESS = 0
|
157
|
+
FILE_SPECIAL_ACCESS = FILE_ANY_ACCESS
|
158
|
+
FILE_READ_ACCESS = 0x0001
|
159
|
+
FILE_WRITE_ACCESS = 0x0002
|
160
|
+
|
161
|
+
def self.CTL_CODE( device_type, function, method, access )
|
162
|
+
(device_type << 16) | (access << 14) | (function << 2) | method
|
163
|
+
end
|
164
|
+
|
165
|
+
FSCTL_GET_REPARSE_POINT = CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
166
|
+
|
167
|
+
# Reparse point tags
|
168
|
+
IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003
|
169
|
+
IO_REPARSE_TAG_HSM = 0xC0000004
|
170
|
+
IO_REPARSE_TAG_HSM2 = 0x80000006
|
171
|
+
IO_REPARSE_TAG_SIS = 0x80000007
|
172
|
+
IO_REPARSE_TAG_WIM = 0x80000008
|
173
|
+
IO_REPARSE_TAG_CSV = 0x80000009
|
174
|
+
IO_REPARSE_TAG_DFS = 0x8000000A
|
175
|
+
IO_REPARSE_TAG_SYMLINK = 0xA000000C
|
176
|
+
IO_REPARSE_TAG_DFSR = 0x80000012
|
177
|
+
|
178
|
+
MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16*1024
|
179
|
+
|
66
180
|
###############################################
|
67
181
|
# Win32 API Bindings
|
68
182
|
###############################################
|
@@ -147,6 +261,92 @@ typedef struct _BY_HANDLE_FILE_INFORMATION {
|
|
147
261
|
:n_file_index_low, :DWORD
|
148
262
|
end
|
149
263
|
|
264
|
+
=begin
|
265
|
+
typedef struct _REPARSE_DATA_BUFFER {
|
266
|
+
ULONG ReparseTag;
|
267
|
+
USHORT ReparseDataLength;
|
268
|
+
USHORT Reserved;
|
269
|
+
union {
|
270
|
+
struct {
|
271
|
+
USHORT SubstituteNameOffset;
|
272
|
+
USHORT SubstituteNameLength;
|
273
|
+
USHORT PrintNameOffset;
|
274
|
+
USHORT PrintNameLength;
|
275
|
+
ULONG Flags;
|
276
|
+
WCHAR PathBuffer[1];
|
277
|
+
} SymbolicLinkReparseBuffer;
|
278
|
+
struct {
|
279
|
+
USHORT SubstituteNameOffset;
|
280
|
+
USHORT SubstituteNameLength;
|
281
|
+
USHORT PrintNameOffset;
|
282
|
+
USHORT PrintNameLength;
|
283
|
+
WCHAR PathBuffer[1];
|
284
|
+
} MountPointReparseBuffer;
|
285
|
+
struct {
|
286
|
+
UCHAR DataBuffer[1];
|
287
|
+
} GenericReparseBuffer;
|
288
|
+
};
|
289
|
+
} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
|
290
|
+
=end
|
291
|
+
|
292
|
+
class REPARSE_DATA_BUFFER_SYMBOLIC_LINK < FFI::Struct
|
293
|
+
layout :SubstituteNameOffset, :ushort,
|
294
|
+
:SubstituteNameLength, :ushort,
|
295
|
+
:PrintNameOffset, :ushort,
|
296
|
+
:PrintNameLength, :ushort,
|
297
|
+
:Flags, :uint32,
|
298
|
+
:PathBuffer, :ushort
|
299
|
+
|
300
|
+
def substitute_name
|
301
|
+
string_pointer = FFI::Pointer.new(pointer.address) + offset_of(:PathBuffer) + self[:SubstituteNameOffset]
|
302
|
+
string_pointer.read_wstring(self[:SubstituteNameLength]/2)
|
303
|
+
end
|
304
|
+
def print_name
|
305
|
+
string_pointer = FFI::Pointer.new(pointer.address) + offset_of(:PathBuffer) + self[:PrintNameOffset]
|
306
|
+
string_pointer.read_wstring(self[:PrintNameLength]/2)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
class REPARSE_DATA_BUFFER_MOUNT_POINT < FFI::Struct
|
310
|
+
layout :SubstituteNameOffset, :ushort,
|
311
|
+
:SubstituteNameLength, :ushort,
|
312
|
+
:PrintNameOffset, :ushort,
|
313
|
+
:PrintNameLength, :ushort,
|
314
|
+
:PathBuffer, :ushort
|
315
|
+
|
316
|
+
def substitute_name
|
317
|
+
string_pointer = FFI::Pointer.new(pointer.address) + offset_of(:PathBuffer) + self[:SubstituteNameOffset]
|
318
|
+
string_pointer.read_wstring(self[:SubstituteNameLength]/2)
|
319
|
+
end
|
320
|
+
def print_name
|
321
|
+
string_pointer = FFI::Pointer.new(pointer.address) + offset_of(:PathBuffer) + self[:PrintNameOffset]
|
322
|
+
string_pointer.read_wstring(self[:PrintNameLength]/2)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
class REPARSE_DATA_BUFFER_GENERIC < FFI::Struct
|
326
|
+
layout :DataBuffer, :uchar
|
327
|
+
end
|
328
|
+
class REPARSE_DATA_BUFFER_UNION < FFI::Union
|
329
|
+
layout :SymbolicLinkReparseBuffer, REPARSE_DATA_BUFFER_SYMBOLIC_LINK,
|
330
|
+
:MountPointReparseBuffer, REPARSE_DATA_BUFFER_MOUNT_POINT,
|
331
|
+
:GenericReparseBuffer, REPARSE_DATA_BUFFER_GENERIC
|
332
|
+
end
|
333
|
+
class REPARSE_DATA_BUFFER < FFI::Struct
|
334
|
+
layout :ReparseTag, :uint32,
|
335
|
+
:ReparseDataLength, :ushort,
|
336
|
+
:Reserved, :ushort,
|
337
|
+
:ReparseBuffer, REPARSE_DATA_BUFFER_UNION
|
338
|
+
|
339
|
+
def reparse_buffer
|
340
|
+
if self[:ReparseTag] == IO_REPARSE_TAG_SYMLINK
|
341
|
+
self[:ReparseBuffer][:SymbolicLinkReparseBuffer]
|
342
|
+
elsif self[:ReparseTag] == IO_REPARSE_TAG_MOUNT_POINT
|
343
|
+
self[:ReparseBuffer][:MountPointReparseBuffer]
|
344
|
+
else
|
345
|
+
self[:ReparseBuffer][:GenericReparseBuffer]
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
150
350
|
=begin
|
151
351
|
HANDLE WINAPI CreateFile(
|
152
352
|
__in LPCTSTR lpFileName,
|
@@ -158,21 +358,21 @@ HANDLE WINAPI CreateFile(
|
|
158
358
|
__in_opt HANDLE hTemplateFile
|
159
359
|
);
|
160
360
|
=end
|
161
|
-
|
361
|
+
safe_attach_function :CreateFileW, [:LPCTSTR, :DWORD, :DWORD, :LPSECURITY_ATTRIBUTES, :DWORD, :DWORD, :pointer], :HANDLE
|
162
362
|
|
163
363
|
=begin
|
164
364
|
BOOL WINAPI FindClose(
|
165
365
|
__inout HANDLE hFindFile
|
166
366
|
);
|
167
367
|
=end
|
168
|
-
|
368
|
+
safe_attach_function :FindClose, [:HANDLE], :BOOL
|
169
369
|
|
170
370
|
=begin
|
171
371
|
DWORD WINAPI GetFileAttributes(
|
172
372
|
__in LPCTSTR lpFileName
|
173
373
|
);
|
174
374
|
=end
|
175
|
-
|
375
|
+
safe_attach_function :GetFileAttributesW, [:LPCWSTR], :DWORD
|
176
376
|
|
177
377
|
=begin
|
178
378
|
DWORD WINAPI GetFinalPathNameByHandle(
|
@@ -182,7 +382,7 @@ DWORD WINAPI GetFinalPathNameByHandle(
|
|
182
382
|
__in DWORD dwFlags
|
183
383
|
);
|
184
384
|
=end
|
185
|
-
|
385
|
+
safe_attach_function :GetFinalPathNameByHandleW, [:HANDLE, :LPTSTR, :DWORD, :DWORD], :DWORD
|
186
386
|
|
187
387
|
=begin
|
188
388
|
BOOL WINAPI GetFileInformationByHandle(
|
@@ -190,7 +390,7 @@ BOOL WINAPI GetFileInformationByHandle(
|
|
190
390
|
__out LPBY_HANDLE_FILE_INFORMATION lpFileInformation
|
191
391
|
);
|
192
392
|
=end
|
193
|
-
|
393
|
+
safe_attach_function :GetFileInformationByHandle, [:HANDLE, :LPBY_HANDLE_FILE_INFORMATION], :BOOL
|
194
394
|
|
195
395
|
=begin
|
196
396
|
HANDLE WINAPI FindFirstFile(
|
@@ -198,7 +398,7 @@ HANDLE WINAPI FindFirstFile(
|
|
198
398
|
__out LPWIN32_FIND_DATA lpFindFileData
|
199
399
|
);
|
200
400
|
=end
|
201
|
-
|
401
|
+
safe_attach_function :FindFirstFileW, [:LPCTSTR, :LPWIN32_FIND_DATA], :HANDLE
|
202
402
|
|
203
403
|
=begin
|
204
404
|
BOOL WINAPI CreateHardLink(
|
@@ -207,7 +407,7 @@ BOOL WINAPI CreateHardLink(
|
|
207
407
|
__reserved LPSECURITY_ATTRIBUTES lpSecurityAttributes
|
208
408
|
);
|
209
409
|
=end
|
210
|
-
|
410
|
+
safe_attach_function :CreateHardLinkW, [:LPCTSTR, :LPCTSTR, :LPSECURITY_ATTRIBUTES], :BOOLEAN
|
211
411
|
|
212
412
|
=begin
|
213
413
|
BOOLEAN WINAPI CreateSymbolicLink(
|
@@ -216,8 +416,39 @@ BOOLEAN WINAPI CreateSymbolicLink(
|
|
216
416
|
__in DWORD dwFlags
|
217
417
|
);
|
218
418
|
=end
|
219
|
-
|
419
|
+
safe_attach_function :CreateSymbolicLinkW, [:LPTSTR, :LPTSTR, :DWORD], :BOOLEAN
|
420
|
+
|
421
|
+
=begin
|
422
|
+
DWORD WINAPI GetLongPathName(
|
423
|
+
__in LPCTSTR lpszShortPath,
|
424
|
+
__out LPTSTR lpszLongPath,
|
425
|
+
__in DWORD cchBuffer
|
426
|
+
);
|
427
|
+
=end
|
428
|
+
safe_attach_function :GetLongPathNameW, [:LPCTSTR, :LPTSTR, :DWORD], :DWORD
|
220
429
|
|
430
|
+
=begin
|
431
|
+
DWORD WINAPI GetShortPathName(
|
432
|
+
__in LPCTSTR lpszLongPath,
|
433
|
+
__out LPTSTR lpszShortPath,
|
434
|
+
__in DWORD cchBuffer
|
435
|
+
);
|
436
|
+
=end
|
437
|
+
safe_attach_function :GetShortPathNameW, [:LPCTSTR, :LPTSTR, :DWORD], :DWORD
|
438
|
+
|
439
|
+
=begin
|
440
|
+
BOOL WINAPI DeviceIoControl(
|
441
|
+
__in HANDLE hDevice,
|
442
|
+
__in DWORD dwIoControlCode,
|
443
|
+
__in_opt LPVOID lpInBuffer,
|
444
|
+
__in DWORD nInBufferSize,
|
445
|
+
__out_opt LPVOID lpOutBuffer,
|
446
|
+
__in DWORD nOutBufferSize,
|
447
|
+
__out_opt LPDWORD lpBytesReturned,
|
448
|
+
__inout_opt LPOVERLAPPED lpOverlapped
|
449
|
+
);
|
450
|
+
=end
|
451
|
+
safe_attach_function :DeviceIoControl, [:HANDLE, :DWORD, :LPVOID, :DWORD, :LPVOID, :DWORD, :LPDWORD, :pointer], :BOOL
|
221
452
|
|
222
453
|
###############################################
|
223
454
|
# Helpers
|
@@ -245,7 +476,7 @@ BOOLEAN WINAPI CreateSymbolicLink(
|
|
245
476
|
find_data = WIN32_FIND_DATA.new
|
246
477
|
handle = FindFirstFileW(path, find_data)
|
247
478
|
if handle == INVALID_HANDLE_VALUE
|
248
|
-
Chef::Win32::Error.raise!
|
479
|
+
Chef::ReservedNames::Win32::Error.raise!
|
249
480
|
end
|
250
481
|
block.call(handle, find_data)
|
251
482
|
ensure
|
@@ -260,10 +491,25 @@ BOOLEAN WINAPI CreateSymbolicLink(
|
|
260
491
|
begin
|
261
492
|
path = encode_path(path)
|
262
493
|
handle = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ,
|
263
|
-
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nil)
|
494
|
+
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, nil)
|
495
|
+
|
496
|
+
if handle == INVALID_HANDLE_VALUE
|
497
|
+
Chef::ReservedNames::Win32::Error.raise!
|
498
|
+
end
|
499
|
+
block.call(handle)
|
500
|
+
ensure
|
501
|
+
CloseHandle(handle) if handle && handle != INVALID_HANDLE_VALUE
|
502
|
+
end
|
503
|
+
end
|
504
|
+
|
505
|
+
def symlink_file_handle(path, &block)
|
506
|
+
begin
|
507
|
+
path = encode_path(path)
|
508
|
+
handle = CreateFileW(path, FILE_READ_EA, FILE_SHARE_READ,
|
509
|
+
nil, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, nil)
|
264
510
|
|
265
511
|
if handle == INVALID_HANDLE_VALUE
|
266
|
-
Chef::Win32::Error.raise!
|
512
|
+
Chef::ReservedNames::Win32::Error.raise!
|
267
513
|
end
|
268
514
|
block.call(handle)
|
269
515
|
ensure
|
@@ -277,7 +523,7 @@ BOOLEAN WINAPI CreateSymbolicLink(
|
|
277
523
|
file_information = BY_HANDLE_FILE_INFORMATION.new
|
278
524
|
success = GetFileInformationByHandle(handle, file_information)
|
279
525
|
if success == 0
|
280
|
-
Chef::Win32::Error.raise!
|
526
|
+
Chef::ReservedNames::Win32::Error.raise!
|
281
527
|
end
|
282
528
|
end
|
283
529
|
file_information
|