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

Win32 API Constants

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_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_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

Public Class Methods

CTL_CODE( device_type, function, method, access ) click to toggle source
# 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

canonical_encode_path(path) click to toggle source

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
encode_path(path) click to toggle source

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
file_handle(path) { |handle| ... } click to toggle source

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
file_search_handle(path) { |handle, find_data| ... } click to toggle source

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
path_prepender() click to toggle source
# File lib/chef/win32/api/file.rb, line 532
def path_prepender
  "\\\\?\\"
end
retrieve_file_info(file_name) click to toggle source
# 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
retrieve_file_version_info(file_name) click to toggle source
# 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