module Chef::ReservedNames::Win32::API::File
Constants
- FILE_ANY_ACCESS
Access
- FILE_ATTRIBUTE_ARCHIVE
- FILE_ATTRIBUTE_COMPRESSED
- FILE_ATTRIBUTE_DEVICE
- FILE_ATTRIBUTE_DIRECTORY
- FILE_ATTRIBUTE_ENCRYPTED
- FILE_ATTRIBUTE_HIDDEN
- FILE_ATTRIBUTE_NORMAL
- FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
- FILE_ATTRIBUTE_OFFLINE
- FILE_ATTRIBUTE_READONLY
- FILE_ATTRIBUTE_REPARSE_POINT
- FILE_ATTRIBUTE_SPARSE_FILE
- FILE_ATTRIBUTE_SYSTEM
- FILE_ATTRIBUTE_TEMPORARY
- FILE_ATTRIBUTE_VIRTUAL
- FILE_DEVICE_8042_PORT
- FILE_DEVICE_ACPI
- FILE_DEVICE_BATTERY
- FILE_DEVICE_BEEP
DeviceIoControl control codes
- FILE_DEVICE_BIOMETRIC
- FILE_DEVICE_BLUETOOTH
- FILE_DEVICE_BUS_EXTENDER
- FILE_DEVICE_CD_ROM
- FILE_DEVICE_CD_ROM_FILE_SYSTEM
- FILE_DEVICE_CHANGER
- FILE_DEVICE_CONTROLLER
- FILE_DEVICE_CRYPT_PROVIDER
- FILE_DEVICE_DATALINK
- FILE_DEVICE_DFS
- FILE_DEVICE_DFS_FILE_SYSTEM
- FILE_DEVICE_DFS_VOLUME
- FILE_DEVICE_DISK
- FILE_DEVICE_DISK_FILE_SYSTEM
- FILE_DEVICE_DVD
- FILE_DEVICE_FILE_SYSTEM
- FILE_DEVICE_FIPS
- FILE_DEVICE_FULLSCREEN_VIDEO
- FILE_DEVICE_INFINIBAND
- FILE_DEVICE_INPORT_PORT
- FILE_DEVICE_KEYBOARD
- FILE_DEVICE_KS
- FILE_DEVICE_KSEC
- FILE_DEVICE_MAILSLOT
- FILE_DEVICE_MASS_STORAGE
- FILE_DEVICE_MIDI_IN
- FILE_DEVICE_MIDI_OUT
- FILE_DEVICE_MODEM
- FILE_DEVICE_MOUSE
- FILE_DEVICE_MT_COMPOSITE
- FILE_DEVICE_MT_TRANSPORT
- FILE_DEVICE_MULTI_UNC_PROVIDER
- FILE_DEVICE_NAMED_PIPE
- FILE_DEVICE_NETWORK
- FILE_DEVICE_NETWORK_BROWSER
- FILE_DEVICE_NETWORK_FILE_SYSTEM
- FILE_DEVICE_NETWORK_REDIRECTOR
- FILE_DEVICE_NULL
- FILE_DEVICE_PARALLEL_PORT
- FILE_DEVICE_PHYSICAL_NETCARD
- FILE_DEVICE_PMI
- FILE_DEVICE_PRINTER
- FILE_DEVICE_SCANNER
- FILE_DEVICE_SCREEN
- FILE_DEVICE_SERENUM
- FILE_DEVICE_SERIAL_MOUSE_PORT
- FILE_DEVICE_SERIAL_PORT
- FILE_DEVICE_SMARTCARD
- FILE_DEVICE_SMB
- FILE_DEVICE_SOUND
- FILE_DEVICE_STREAMS
- FILE_DEVICE_TAPE
- FILE_DEVICE_TAPE_FILE_SYSTEM
- FILE_DEVICE_TERMSRV
- FILE_DEVICE_TRANSPORT
- FILE_DEVICE_UNKNOWN
- FILE_DEVICE_VDM
- FILE_DEVICE_VIDEO
- FILE_DEVICE_VIRTUAL_DISK
- FILE_DEVICE_VMBUS
- FILE_DEVICE_WAVE_IN
- FILE_DEVICE_WAVE_OUT
- FILE_DEVICE_WPD
- FILE_FLAG_BACKUP_SEMANTICS
- FILE_FLAG_DELETE_ON_CLOSE
- FILE_FLAG_FIRST_PIPE_INSTANCE
- FILE_FLAG_NO_BUFFERING
- FILE_FLAG_OPEN_NO_RECALL
- FILE_FLAG_OPEN_REPARSE_POINT
- FILE_FLAG_OVERLAPPED
- FILE_FLAG_POSIX_SEMANTICS
- FILE_FLAG_RANDOM_ACCESS
- FILE_FLAG_SEQUENTIAL_SCAN
- FILE_FLAG_WRITE_THROUGH
- FILE_NAME_NORMALIZED
- FILE_NAME_OPENED
- FILE_READ_ACCESS
- FILE_SHARE_READ
TODO add the rest of these CONSTS
- FILE_SPECIAL_ACCESS
- FILE_WRITE_ACCESS
- FSCTL_GET_REPARSE_POINT
- INVALID_FILE_ATTRIBUTES
- INVALID_HANDLE_VALUE
- IO_REPARSE_TAG_CSV
- IO_REPARSE_TAG_DFS
- IO_REPARSE_TAG_DFSR
- IO_REPARSE_TAG_HSM
- IO_REPARSE_TAG_HSM2
- IO_REPARSE_TAG_MOUNT_POINT
Reparse point tags
- IO_REPARSE_TAG_SIS
- IO_REPARSE_TAG_SYMLINK
- IO_REPARSE_TAG_WIM
- MAXIMUM_REPARSE_DATA_BUFFER_SIZE
- MAX_PATH
- METHOD_BUFFERED
Methods
- METHOD_DIRECT_FROM_HARDWARE
- METHOD_DIRECT_TO_HARDWARE
- METHOD_IN_DIRECT
- METHOD_NEITHER
- METHOD_OUT_DIRECT
- OPEN_EXISTING
- SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
- SYMBOLIC_LINK_FLAG_DIRECTORY
Public Class Methods
# File lib/chef/win32/api/file.rb, line 163 def self.CTL_CODE( device_type, function, method, access ) (device_type << 16) | (access << 14) | (function << 2) | method end
Public Instance Methods
Expands the path, prepends “\?" and UTF-16LE encodes it. This function is used by the ”File“ resources where we need convert relative paths to fully qualified paths.
# File lib/chef/win32/api/file.rb, line 528 def canonical_encode_path(path) Chef::Util::PathHelper.canonical_path(path).to_wstring end
takes the given path pre-pends “\?" and UTF-16LE encodes it. Used to prepare paths to be passed to the *W vesion of WinAPI File functions. This function is used by the ”Link“ resources where we need preserve relative paths because symbolic links can actually point to a relative path (relative to the link itself).
# File lib/chef/win32/api/file.rb, line 521 def encode_path(path) (path_prepender << path.gsub(::File::SEPARATOR, ::File::ALT_SEPARATOR)).to_wstring end
retrieves a file handle and passes it to +&block+ along with the find_data. also ensures the handle is closed on exit of the block FIXME: yard with @yield
# File lib/chef/win32/api/file.rb, line 563 def file_handle(path) path = canonical_encode_path(path) handle = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, nil) if handle == INVALID_HANDLE_VALUE Chef::ReservedNames::Win32::Error.raise! end yield(handle) ensure CloseHandle(handle) if handle && handle != INVALID_HANDLE_VALUE end
retrieves a file search handle and passes it to +&block+ along with the find_data. also ensures the handle is closed on exit of the block FIXME: yard with @yield
# File lib/chef/win32/api/file.rb, line 540 def file_search_handle(path) # Workaround for CHEF-4419: # Make sure paths starting with "/" has a drive letter # assigned from the current working diretory. # Note: With CHEF-4427 this issue will be fixed with a # broader fix to map all the paths starting with "/" to # SYSTEM_DRIVE on windows. path = ::File.expand_path(path) if path.start_with? "/" path = canonical_encode_path(path) find_data = WIN32_FIND_DATA.new handle = FindFirstFileW(path, find_data) if handle == INVALID_HANDLE_VALUE Chef::ReservedNames::Win32::Error.raise! end yield(handle, find_data) ensure FindClose(handle) if handle && handle != INVALID_HANDLE_VALUE end
# File lib/chef/win32/api/file.rb, line 532 def path_prepender "\\\\?\\" end
# File lib/chef/win32/api/file.rb, line 590 def retrieve_file_info(file_name) file_information = nil file_handle(file_name) do |handle| file_information = BY_HANDLE_FILE_INFORMATION.new success = GetFileInformationByHandle(handle, file_information) if success == 0 Chef::ReservedNames::Win32::Error.raise! end end file_information end
# File lib/chef/win32/api/file.rb, line 602 def retrieve_file_version_info(file_name) file_name = encode_path(file_name) file_size = GetFileVersionInfoSizeW(file_name, nil) if file_size == 0 Chef::ReservedNames::Win32::Error.raise! end version_info = FFI::MemoryPointer.new(file_size) unless GetFileVersionInfoW(file_name, 0, file_size, version_info) Chef::ReservedNames::Win32::Error.raise! end version_info end
FIXME: yard with @yield
# File lib/chef/win32/api/file.rb, line 577 def symlink_file_handle(path) path = encode_path(path) handle = CreateFileW(path, FILE_READ_EA, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, nil) if handle == INVALID_HANDLE_VALUE Chef::ReservedNames::Win32::Error.raise! end yield(handle) ensure CloseHandle(handle) if handle && handle != INVALID_HANDLE_VALUE end