Class: Chef::Win32::File

Inherits:
Object show all
Extended by:
API::File
Includes:
API::File
Defined in:
lib/chef/win32/file.rb,
lib/chef/win32/file/info.rb

Defined Under Namespace

Classes: Info

Constant Summary

Constants included from API::File

API::File::FILE_ATTRIBUTE_ARCHIVE, API::File::FILE_ATTRIBUTE_COMPRESSED, API::File::FILE_ATTRIBUTE_DEVICE, API::File::FILE_ATTRIBUTE_DIRECTORY, API::File::FILE_ATTRIBUTE_ENCRYPTED, API::File::FILE_ATTRIBUTE_HIDDEN, API::File::FILE_ATTRIBUTE_NORMAL, API::File::FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, API::File::FILE_ATTRIBUTE_OFFLINE, API::File::FILE_ATTRIBUTE_READONLY, API::File::FILE_ATTRIBUTE_REPARSE_POINT, API::File::FILE_ATTRIBUTE_SPARSE_FILE, API::File::FILE_ATTRIBUTE_SYSTEM, API::File::FILE_ATTRIBUTE_TEMPORARY, API::File::FILE_ATTRIBUTE_VIRTUAL, API::File::FILE_NAME_NORMALIZED, API::File::FILE_NAME_OPENED, API::File::FILE_SHARE_READ, API::File::INVALID_FILE_ATTRIBUTES, API::File::INVALID_HANDLE_VALUE, API::File::IO_REPARSE_TAG_SYMLINK, API::File::MAX_PATH, API::File::OPEN_EXISTING, API::File::SYMBOLIC_LINK_FLAG_DIRECTORY

Constants included from API

API::WIN32_EPOC_MINUS_POSIX_EPOC

Constants included from API::System

API::System::PRODUCT_BUSINESS, API::System::PRODUCT_BUSINESS_N, API::System::PRODUCT_CLUSTER_SERVER, API::System::PRODUCT_DATACENTER_SERVER, API::System::PRODUCT_DATACENTER_SERVER_CORE, API::System::PRODUCT_DATACENTER_SERVER_CORE_V, API::System::PRODUCT_DATACENTER_SERVER_V, API::System::PRODUCT_ENTERPRISE, API::System::PRODUCT_ENTERPRISE_E, API::System::PRODUCT_ENTERPRISE_N, API::System::PRODUCT_ENTERPRISE_SERVER, API::System::PRODUCT_ENTERPRISE_SERVER_CORE, API::System::PRODUCT_ENTERPRISE_SERVER_CORE_V, API::System::PRODUCT_ENTERPRISE_SERVER_IA64, API::System::PRODUCT_ENTERPRISE_SERVER_V, API::System::PRODUCT_HOME_BASIC, API::System::PRODUCT_HOME_BASIC_E, API::System::PRODUCT_HOME_BASIC_N, API::System::PRODUCT_HOME_PREMIUM, API::System::PRODUCT_HOME_PREMIUM_E, API::System::PRODUCT_HOME_PREMIUM_N, API::System::PRODUCT_HOME_PREMIUM_SERVER, API::System::PRODUCT_HOME_SERVER, API::System::PRODUCT_HYPERV, API::System::PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT, API::System::PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING, API::System::PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY, API::System::PRODUCT_PROFESSIONAL, API::System::PRODUCT_PROFESSIONAL_E, API::System::PRODUCT_PROFESSIONAL_N, API::System::PRODUCT_SB_SOLUTION_SERVER, API::System::PRODUCT_SERVER_FOR_SMALLBUSINESS, API::System::PRODUCT_SERVER_FOR_SMALLBUSINESS_V, API::System::PRODUCT_SERVER_FOUNDATION, API::System::PRODUCT_SMALLBUSINESS_SERVER, API::System::PRODUCT_SOLUTION_EMBEDDEDSERVER, API::System::PRODUCT_STANDARD_SERVER, API::System::PRODUCT_STANDARD_SERVER_CORE, API::System::PRODUCT_STANDARD_SERVER_CORE_V, API::System::PRODUCT_STANDARD_SERVER_V, API::System::PRODUCT_STARTER, API::System::PRODUCT_STARTER_E, API::System::PRODUCT_STARTER_N, API::System::PRODUCT_STORAGE_ENTERPRISE_SERVER, API::System::PRODUCT_STORAGE_EXPRESS_SERVER, API::System::PRODUCT_STORAGE_STANDARD_SERVER, API::System::PRODUCT_STORAGE_WORKGROUP_SERVER, API::System::PRODUCT_ULTIMATE, API::System::PRODUCT_ULTIMATE_E, API::System::PRODUCT_ULTIMATE_N, API::System::PRODUCT_UNDEFINED, API::System::PRODUCT_WEB_SERVER, API::System::PRODUCT_WEB_SERVER_CORE, API::System::SM_SERVERR2, API::System::VER_NT_DOMAIN_CONTROLLER, API::System::VER_NT_SERVER, API::System::VER_NT_WORKSTATION, API::System::VER_SUITE_BACKOFFICE, API::System::VER_SUITE_BLADE, API::System::VER_SUITE_COMPUTE_SERVER, API::System::VER_SUITE_DATACENTER, API::System::VER_SUITE_EMBEDDEDNT, API::System::VER_SUITE_ENTERPRISE, API::System::VER_SUITE_PERSONAL, API::System::VER_SUITE_SINGLEUSERTS, API::System::VER_SUITE_SMALLBUSINESS, API::System::VER_SUITE_SMALLBUSINESS_RESTRICTED, API::System::VER_SUITE_STORAGE_SERVER, API::System::VER_SUITE_TERMINAL, API::System::VER_SUITE_WH_SERVER

Constants included from API::Security

API::Security::ACCESS_ALLOWED_ACE_TYPE, API::Security::ACCESS_ALLOWED_CALLBACK_ACE_TYPE, API::Security::ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE, API::Security::ACCESS_ALLOWED_COMPOUND_ACE_TYPE, API::Security::ACCESS_ALLOWED_OBJECT_ACE_TYPE, API::Security::ACCESS_DENIED_ACE_TYPE, API::Security::ACCESS_DENIED_CALLBACK_ACE_TYPE, API::Security::ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE, API::Security::ACCESS_DENIED_OBJECT_ACE_TYPE, API::Security::ACCESS_MAX_MS_ACE_TYPE, API::Security::ACCESS_MAX_MS_OBJECT_ACE_TYPE, API::Security::ACCESS_MAX_MS_V2_ACE_TYPE, API::Security::ACCESS_MAX_MS_V3_ACE_TYPE, API::Security::ACCESS_MAX_MS_V4_ACE_TYPE, API::Security::ACCESS_MAX_MS_V5_ACE_TYPE, API::Security::ACCESS_MIN_MS_ACE_TYPE, API::Security::ACCESS_MIN_MS_OBJECT_ACE_TYPE, API::Security::ACCESS_SYSTEM_SECURITY, API::Security::ACL_REVISION, API::Security::ACL_REVISION1, API::Security::ACL_REVISION2, API::Security::ACL_REVISION3, API::Security::ACL_REVISION4, API::Security::ACL_REVISION_DS, API::Security::CONTAINER_INHERIT_ACE, API::Security::DACL_SECURITY_INFORMATION, API::Security::DELETE, API::Security::FAILED_ACCESS_ACE_FLAG, API::Security::FILE_ADD_FILE, API::Security::FILE_ADD_SUBDIRECTORY, API::Security::FILE_ALL_ACCESS, API::Security::FILE_APPEND_DATA, API::Security::FILE_CREATE_PIPE_INSTANCE, API::Security::FILE_DELETE_CHILD, API::Security::FILE_EXECUTE, API::Security::FILE_GENERIC_EXECUTE, API::Security::FILE_GENERIC_READ, API::Security::FILE_GENERIC_WRITE, API::Security::FILE_LIST_DIRECTORY, API::Security::FILE_READ_ATTRIBUTES, API::Security::FILE_READ_DATA, API::Security::FILE_READ_EA, API::Security::FILE_TRAVERSE, API::Security::FILE_WRITE_ATTRIBUTES, API::Security::FILE_WRITE_DATA, API::Security::FILE_WRITE_EA, API::Security::GENERIC_ALL, API::Security::GENERIC_EXECUTE, API::Security::GENERIC_READ, API::Security::GENERIC_WRITE, API::Security::GROUP_SECURITY_INFORMATION, API::Security::INHERITED_ACE, API::Security::INHERIT_ONLY_ACE, API::Security::LABEL_SECURITY_INFORMATION, API::Security::MAXDWORD, API::Security::MAX_ACL_REVISION, API::Security::MIN_ACL_REVISION, API::Security::NO_PROPAGATE_INHERIT_ACE, API::Security::OBJECT_INHERIT_ACE, API::Security::OWNER_SECURITY_INFORMATION, API::Security::PROTECTED_DACL_SECURITY_INFORMATION, API::Security::PROTECTED_SACL_SECURITY_INFORMATION, API::Security::READ_CONTROL, API::Security::SACL_SECURITY_INFORMATION, API::Security::SECURITY_DESCRIPTOR_MIN_LENGTH, API::Security::SECURITY_DESCRIPTOR_REVISION, API::Security::SECURITY_DESCRIPTOR_REVISION1, API::Security::SE_DACL_AUTO_INHERITED, API::Security::SE_DACL_AUTO_INHERIT_REQ, API::Security::SE_DACL_DEFAULTED, API::Security::SE_DACL_PRESENT, API::Security::SE_DACL_PROTECTED, API::Security::SE_GROUP_DEFAULTED, API::Security::SE_OBJECT_TYPE, API::Security::SE_OWNER_DEFAULTED, API::Security::SE_PRIVILEGE_ENABLED, API::Security::SE_PRIVILEGE_ENABLED_BY_DEFAULT, API::Security::SE_PRIVILEGE_REMOVED, API::Security::SE_PRIVILEGE_USED_FOR_ACCESS, API::Security::SE_PRIVILEGE_VALID_ATTRIBUTES, API::Security::SE_RM_CONTROL_VALID, API::Security::SE_SACL_AUTO_INHERITED, API::Security::SE_SACL_AUTO_INHERIT_REQ, API::Security::SE_SACL_DEFAULTED, API::Security::SE_SACL_PRESENT, API::Security::SE_SACL_PROTECTED, API::Security::SE_SELF_RELATIVE, API::Security::SID_NAME_USE, API::Security::SPECIFIC_RIGHTS_ALL, API::Security::STANDARD_RIGHTS_ALL, API::Security::STANDARD_RIGHTS_EXECUTE, API::Security::STANDARD_RIGHTS_READ, API::Security::STANDARD_RIGHTS_REQUIRED, API::Security::STANDARD_RIGHTS_WRITE, API::Security::SUCCESSFUL_ACCESS_ACE_FLAG, API::Security::SYNCHRONIZE, API::Security::SYSTEM_ALARM_ACE_TYPE, API::Security::SYSTEM_ALARM_CALLBACK_ACE_TYPE, API::Security::SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE, API::Security::SYSTEM_ALARM_OBJECT_ACE_TYPE, API::Security::SYSTEM_AUDIT_ACE_TYPE, API::Security::SYSTEM_AUDIT_CALLBACK_ACE_TYPE, API::Security::SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE, API::Security::SYSTEM_AUDIT_OBJECT_ACE_TYPE, API::Security::SYSTEM_MANDATORY_LABEL_ACE_TYPE, API::Security::TOKEN_ADJUST_DEFAULT, API::Security::TOKEN_ADJUST_GROUPS, API::Security::TOKEN_ADJUST_PRIVILEGES, API::Security::TOKEN_ADJUST_SESSIONID, API::Security::TOKEN_ALL_ACCESS, API::Security::TOKEN_ASSIGN_PRIMARY, API::Security::TOKEN_DUPLICATE, API::Security::TOKEN_IMPERSONATE, API::Security::TOKEN_QUERY, API::Security::TOKEN_QUERY_SOURCE, API::Security::TOKEN_READ, API::Security::UNPROTECTED_DACL_SECURITY_INFORMATION, API::Security::UNPROTECTED_SACL_SECURITY_INFORMATION, API::Security::VALID_INHERIT_FLAGS, API::Security::WRITE_DAC, API::Security::WRITE_OWNER

Class Method Summary collapse

Methods included from API::File

encode_path, file_handle, file_search_handle, path_prepender, retrieve_file_info

Methods included from API

extended, #make_uint64, #wtime_to_time

Class Method Details

.info(file_name) ⇒ Object Also known as: stat



104
105
106
# File 'lib/chef/win32/file.rb', line 104

def self.info(file_name)
  Info.new(file_name)
end

Creates a symbolic link called new_name for the file or directory old_name.

This method requires Windows Vista or later to work. Otherwise, it returns nil as per MRI.

Raises:

  • (Errno::ENOENT)


36
37
38
39
40
41
42
43
44
45
# File 'lib/chef/win32/file.rb', line 36

def self.link(old_name, new_name)
  raise Errno::ENOENT, "(#{old_name}, #{new_name})" unless ::File.exist?(old_name)
  # TODO do a check for CreateHardLinkW and
  # raise NotImplemented exception on older Windows
  old_name = encode_path(old_name)
  new_name = encode_path(new_name)
  unless CreateHardLinkW(new_name, old_name, nil)
    Chef::Win32::Error.raise!
  end
end

Returns the path of the of the symbolic link referred to by file.

Requires Windows Vista or later. On older versions of Windows it will raise a NotImplementedError, as per MRI.

Raises:

  • (Errno::ENOENT)


90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/chef/win32/file.rb', line 90

def self.readlink(link_name)
  raise Errno::ENOENT, link_name unless ::File.exist?(link_name)
  # TODO do a check for GetFinalPathNameByHandleW and
  # raise NotImplemented exception on older Windows
  file_handle(link_name) do |handle|
    buffer = FFI::MemoryPointer.new(0.chr * MAX_PATH)
    num_chars = GetFinalPathNameByHandleW(handle, buffer, buffer.size, FILE_NAME_NORMALIZED)
    if num_chars == 0
      Chef::Win32::Error.raise! #could be misleading if problem is too small buffer size as GetLastError won't report failure
    end
    buffer.read_wstring(num_chars).sub(path_prepender, "")
  end
end

Creates a symbolic link called new_name for the file or directory old_name.

This method requires Windows Vista or later to work. Otherwise, it returns nil as per MRI.

Raises:

  • (Errno::ENOENT)


53
54
55
56
57
58
59
60
61
62
63
# File 'lib/chef/win32/file.rb', line 53

def self.symlink(old_name, new_name)
  raise Errno::ENOENT, "(#{old_name}, #{new_name})" unless ::File.exist?(old_name)
  # TODO do a check for CreateSymbolicLinkW and
  # raise NotImplemented exception on older Windows
  flags = ::File.directory?(old_name) ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0
  old_name = encode_path(old_name)
  new_name = encode_path(new_name)
  unless CreateSymbolicLinkW(new_name, old_name, flags)
    Chef::Win32::Error.raise!
  end
end

.symlink?(file_name) ⇒ Boolean

Return true if the named file is a symbolic link, false otherwise.

This method requires Windows Vista or later to work. Otherwise, it always returns false as per MRI.



70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/chef/win32/file.rb', line 70

def self.symlink?(file_name)
  is_symlink = false
  path = encode_path(file_name)
  if ::File.exists?(file_name)
    if ((GetFileAttributesW(path) & FILE_ATTRIBUTE_REPARSE_POINT) > 0)
      file_search_handle(file_name) do |handle, find_data|
        if find_data[:dw_reserved_0] == IO_REPARSE_TAG_SYMLINK
          is_symlink = true
        end
      end
    end
  end
  is_symlink
end