Class: Chef::Win32::File
- 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
- .info(file_name) ⇒ Object (also: stat)
-
.link(old_name, new_name) ⇒ Object
Creates a symbolic link called
new_namefor the file or directoryold_name. -
.readlink(link_name) ⇒ Object
Returns the path of the of the symbolic link referred to by
file. -
.symlink(old_name, new_name) ⇒ Object
Creates a symbolic link called
new_namefor the file or directoryold_name. -
.symlink?(file_name) ⇒ Boolean
Return true if the named file is a symbolic link, false otherwise.
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 |
.link(old_name, new_name) ⇒ Object
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.
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 |
.readlink(link_name) ⇒ Object
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.
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 |
.symlink(old_name, new_name) ⇒ Object
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.
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 |