Module: Chef::ReservedNames::Win32::API::File
- Extended by:
- Chef::ReservedNames::Win32::API
- Defined in:
- lib/chef/win32/api/file.rb
Defined Under Namespace
Classes: BY_HANDLE_FILE_INFORMATION, FILETIME, REPARSE_DATA_BUFFER, REPARSE_DATA_BUFFER_GENERIC, REPARSE_DATA_BUFFER_MOUNT_POINT, REPARSE_DATA_BUFFER_SYMBOLIC_LINK, REPARSE_DATA_BUFFER_UNION, SECURITY_ATTRIBUTES, Translation, WIN32_FIND_DATA
Constant Summary collapse
- FILE_ATTRIBUTE_READONLY =
Win32 API Constants
0x00000001- FILE_ATTRIBUTE_HIDDEN =
0x00000002- FILE_ATTRIBUTE_SYSTEM =
0x00000004- FILE_ATTRIBUTE_DIRECTORY =
0x00000010- FILE_ATTRIBUTE_ARCHIVE =
0x00000020- FILE_ATTRIBUTE_DEVICE =
0x00000040- FILE_ATTRIBUTE_NORMAL =
0x00000080- FILE_ATTRIBUTE_TEMPORARY =
0x00000100- FILE_ATTRIBUTE_SPARSE_FILE =
0x00000200- FILE_ATTRIBUTE_REPARSE_POINT =
0x00000400- FILE_ATTRIBUTE_COMPRESSED =
0x00000800- FILE_ATTRIBUTE_OFFLINE =
0x00001000- FILE_ATTRIBUTE_NOT_CONTENT_INDEXED =
0x00002000- FILE_ATTRIBUTE_ENCRYPTED =
0x00004000- FILE_ATTRIBUTE_VIRTUAL =
0x00010000- INVALID_FILE_ATTRIBUTES =
0xFFFFFFFF- FILE_FLAG_WRITE_THROUGH =
0x80000000- FILE_FLAG_OVERLAPPED =
0x40000000- FILE_FLAG_NO_BUFFERING =
0x20000000- FILE_FLAG_RANDOM_ACCESS =
0x10000000- FILE_FLAG_SEQUENTIAL_SCAN =
0x08000000- FILE_FLAG_DELETE_ON_CLOSE =
0x04000000- FILE_FLAG_BACKUP_SEMANTICS =
0x02000000- FILE_FLAG_POSIX_SEMANTICS =
0x01000000- FILE_FLAG_OPEN_REPARSE_POINT =
0x00200000- FILE_FLAG_OPEN_NO_RECALL =
0x00100000- FILE_FLAG_FIRST_PIPE_INSTANCE =
0x00080000- INVALID_HANDLE_VALUE =
0xFFFFFFFF- MAX_PATH =
260- SYMBOLIC_LINK_FLAG_DIRECTORY =
0x1- FILE_NAME_NORMALIZED =
0x0- FILE_NAME_OPENED =
0x8- FILE_SHARE_READ =
TODO add the rest of these CONSTS
0x00000001- OPEN_EXISTING =
3- FILE_DEVICE_BEEP =
DeviceIoControl control codes
0x00000001- FILE_DEVICE_CD_ROM =
0x00000002- FILE_DEVICE_CD_ROM_FILE_SYSTEM =
0x00000003- FILE_DEVICE_CONTROLLER =
0x00000004- FILE_DEVICE_DATALINK =
0x00000005- FILE_DEVICE_DFS =
0x00000006- FILE_DEVICE_DISK =
0x00000007- FILE_DEVICE_DISK_FILE_SYSTEM =
0x00000008- FILE_DEVICE_FILE_SYSTEM =
0x00000009- FILE_DEVICE_INPORT_PORT =
0x0000000a- FILE_DEVICE_KEYBOARD =
0x0000000b- FILE_DEVICE_MAILSLOT =
0x0000000c- FILE_DEVICE_MIDI_IN =
0x0000000d- FILE_DEVICE_MIDI_OUT =
0x0000000e- FILE_DEVICE_MOUSE =
0x0000000f- FILE_DEVICE_MULTI_UNC_PROVIDER =
0x00000010- FILE_DEVICE_NAMED_PIPE =
0x00000011- FILE_DEVICE_NETWORK =
0x00000012- FILE_DEVICE_NETWORK_BROWSER =
0x00000013- FILE_DEVICE_NETWORK_FILE_SYSTEM =
0x00000014- FILE_DEVICE_NULL =
0x00000015- FILE_DEVICE_PARALLEL_PORT =
0x00000016- FILE_DEVICE_PHYSICAL_NETCARD =
0x00000017- FILE_DEVICE_PRINTER =
0x00000018- FILE_DEVICE_SCANNER =
0x00000019- FILE_DEVICE_SERIAL_MOUSE_PORT =
0x0000001a- FILE_DEVICE_SERIAL_PORT =
0x0000001b- FILE_DEVICE_SCREEN =
0x0000001c- FILE_DEVICE_SOUND =
0x0000001d- FILE_DEVICE_STREAMS =
0x0000001e- FILE_DEVICE_TAPE =
0x0000001f- FILE_DEVICE_TAPE_FILE_SYSTEM =
0x00000020- FILE_DEVICE_TRANSPORT =
0x00000021- FILE_DEVICE_UNKNOWN =
0x00000022- FILE_DEVICE_VIDEO =
0x00000023- FILE_DEVICE_VIRTUAL_DISK =
0x00000024- FILE_DEVICE_WAVE_IN =
0x00000025- FILE_DEVICE_WAVE_OUT =
0x00000026- FILE_DEVICE_8042_PORT =
0x00000027- FILE_DEVICE_NETWORK_REDIRECTOR =
0x00000028- FILE_DEVICE_BATTERY =
0x00000029- FILE_DEVICE_BUS_EXTENDER =
0x0000002a- FILE_DEVICE_MODEM =
0x0000002b- FILE_DEVICE_VDM =
0x0000002c- FILE_DEVICE_MASS_STORAGE =
0x0000002d- FILE_DEVICE_SMB =
0x0000002e- FILE_DEVICE_KS =
0x0000002f- FILE_DEVICE_CHANGER =
0x00000030- FILE_DEVICE_SMARTCARD =
0x00000031- FILE_DEVICE_ACPI =
0x00000032- FILE_DEVICE_DVD =
0x00000033- FILE_DEVICE_FULLSCREEN_VIDEO =
0x00000034- FILE_DEVICE_DFS_FILE_SYSTEM =
0x00000035- FILE_DEVICE_DFS_VOLUME =
0x00000036- FILE_DEVICE_SERENUM =
0x00000037- FILE_DEVICE_TERMSRV =
0x00000038- FILE_DEVICE_KSEC =
0x00000039- FILE_DEVICE_FIPS =
0x0000003A- FILE_DEVICE_INFINIBAND =
0x0000003B- FILE_DEVICE_VMBUS =
0x0000003E- FILE_DEVICE_CRYPT_PROVIDER =
0x0000003F- FILE_DEVICE_WPD =
0x00000040- FILE_DEVICE_BLUETOOTH =
0x00000041- FILE_DEVICE_MT_COMPOSITE =
0x00000042- FILE_DEVICE_MT_TRANSPORT =
0x00000043- FILE_DEVICE_BIOMETRIC =
0x00000044- FILE_DEVICE_PMI =
0x00000045- METHOD_BUFFERED =
Methods
0- METHOD_IN_DIRECT =
1- METHOD_OUT_DIRECT =
2- METHOD_NEITHER =
3- METHOD_DIRECT_TO_HARDWARE =
METHOD_IN_DIRECT- METHOD_DIRECT_FROM_HARDWARE =
METHOD_OUT_DIRECT- FILE_ANY_ACCESS =
Access
0- FILE_SPECIAL_ACCESS =
FILE_ANY_ACCESS- FILE_READ_ACCESS =
0x0001- FILE_WRITE_ACCESS =
0x0002- FSCTL_GET_REPARSE_POINT =
CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
- IO_REPARSE_TAG_MOUNT_POINT =
Reparse point tags
0xA0000003- IO_REPARSE_TAG_HSM =
0xC0000004- IO_REPARSE_TAG_HSM2 =
0x80000006- IO_REPARSE_TAG_SIS =
0x80000007- IO_REPARSE_TAG_WIM =
0x80000008- IO_REPARSE_TAG_CSV =
0x80000009- IO_REPARSE_TAG_DFS =
0x8000000A- IO_REPARSE_TAG_SYMLINK =
0xA000000C- IO_REPARSE_TAG_DFSR =
0x80000012- MAXIMUM_REPARSE_DATA_BUFFER_SIZE =
16 * 1024
Constants included from System
System::PRODUCT_BUSINESS, System::PRODUCT_BUSINESS_N, System::PRODUCT_CLUSTER_SERVER, System::PRODUCT_DATACENTER_SERVER, System::PRODUCT_DATACENTER_SERVER_CORE, System::PRODUCT_DATACENTER_SERVER_CORE_V, System::PRODUCT_DATACENTER_SERVER_V, System::PRODUCT_ENTERPRISE, System::PRODUCT_ENTERPRISE_E, System::PRODUCT_ENTERPRISE_N, System::PRODUCT_ENTERPRISE_SERVER, System::PRODUCT_ENTERPRISE_SERVER_CORE, System::PRODUCT_ENTERPRISE_SERVER_CORE_V, System::PRODUCT_ENTERPRISE_SERVER_IA64, System::PRODUCT_ENTERPRISE_SERVER_V, System::PRODUCT_HOME_BASIC, System::PRODUCT_HOME_BASIC_E, System::PRODUCT_HOME_BASIC_N, System::PRODUCT_HOME_PREMIUM, System::PRODUCT_HOME_PREMIUM_E, System::PRODUCT_HOME_PREMIUM_N, System::PRODUCT_HOME_PREMIUM_SERVER, System::PRODUCT_HOME_SERVER, System::PRODUCT_HYPERV, System::PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT, System::PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING, System::PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY, System::PRODUCT_PROFESSIONAL, System::PRODUCT_PROFESSIONAL_E, System::PRODUCT_PROFESSIONAL_N, System::PRODUCT_SB_SOLUTION_SERVER, System::PRODUCT_SERVER_FOR_SMALLBUSINESS, System::PRODUCT_SERVER_FOR_SMALLBUSINESS_V, System::PRODUCT_SERVER_FOUNDATION, System::PRODUCT_SMALLBUSINESS_SERVER, System::PRODUCT_SOLUTION_EMBEDDEDSERVER, System::PRODUCT_STANDARD_SERVER, System::PRODUCT_STANDARD_SERVER_CORE, System::PRODUCT_STANDARD_SERVER_CORE_V, System::PRODUCT_STANDARD_SERVER_V, System::PRODUCT_STARTER, System::PRODUCT_STARTER_E, System::PRODUCT_STARTER_N, System::PRODUCT_STORAGE_ENTERPRISE_SERVER, System::PRODUCT_STORAGE_EXPRESS_SERVER, System::PRODUCT_STORAGE_STANDARD_SERVER, System::PRODUCT_STORAGE_WORKGROUP_SERVER, System::PRODUCT_ULTIMATE, System::PRODUCT_ULTIMATE_E, System::PRODUCT_ULTIMATE_N, System::PRODUCT_UNDEFINED, System::PRODUCT_WEB_SERVER, System::PRODUCT_WEB_SERVER_CORE, System::SM_SERVERR2, System::VER_NT_DOMAIN_CONTROLLER, System::VER_NT_SERVER, System::VER_NT_WORKSTATION, System::VER_SUITE_BACKOFFICE, System::VER_SUITE_BLADE, System::VER_SUITE_COMPUTE_SERVER, System::VER_SUITE_DATACENTER, System::VER_SUITE_EMBEDDEDNT, System::VER_SUITE_ENTERPRISE, System::VER_SUITE_PERSONAL, System::VER_SUITE_SINGLEUSERTS, System::VER_SUITE_SMALLBUSINESS, System::VER_SUITE_SMALLBUSINESS_RESTRICTED, System::VER_SUITE_STORAGE_SERVER, System::VER_SUITE_TERMINAL, System::VER_SUITE_WH_SERVER
Constants included from Security
Security::ACCESS_ALLOWED_ACE_TYPE, Security::ACCESS_ALLOWED_CALLBACK_ACE_TYPE, Security::ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE, Security::ACCESS_ALLOWED_COMPOUND_ACE_TYPE, Security::ACCESS_ALLOWED_OBJECT_ACE_TYPE, Security::ACCESS_DENIED_ACE_TYPE, Security::ACCESS_DENIED_CALLBACK_ACE_TYPE, Security::ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE, Security::ACCESS_DENIED_OBJECT_ACE_TYPE, Security::ACCESS_MAX_MS_ACE_TYPE, Security::ACCESS_MAX_MS_OBJECT_ACE_TYPE, Security::ACCESS_MAX_MS_V2_ACE_TYPE, Security::ACCESS_MAX_MS_V3_ACE_TYPE, Security::ACCESS_MAX_MS_V4_ACE_TYPE, Security::ACCESS_MAX_MS_V5_ACE_TYPE, Security::ACCESS_MIN_MS_ACE_TYPE, Security::ACCESS_MIN_MS_OBJECT_ACE_TYPE, Security::ACCESS_SYSTEM_SECURITY, Security::ACL_REVISION, Security::ACL_REVISION1, Security::ACL_REVISION2, Security::ACL_REVISION3, Security::ACL_REVISION4, Security::ACL_REVISION_DS, Security::CONTAINER_INHERIT_ACE, Security::DACL_SECURITY_INFORMATION, Security::DELETE, Security::FAILED_ACCESS_ACE_FLAG, Security::FILE_ADD_FILE, Security::FILE_ADD_SUBDIRECTORY, Security::FILE_ALL_ACCESS, Security::FILE_APPEND_DATA, Security::FILE_CREATE_PIPE_INSTANCE, Security::FILE_DELETE_CHILD, Security::FILE_EXECUTE, Security::FILE_GENERIC_EXECUTE, Security::FILE_GENERIC_READ, Security::FILE_GENERIC_WRITE, Security::FILE_LIST_DIRECTORY, Security::FILE_READ_ATTRIBUTES, Security::FILE_READ_DATA, Security::FILE_READ_EA, Security::FILE_TRAVERSE, Security::FILE_WRITE_ATTRIBUTES, Security::FILE_WRITE_DATA, Security::FILE_WRITE_EA, Security::GENERIC_ALL, Security::GENERIC_EXECUTE, Security::GENERIC_READ, Security::GENERIC_WRITE, Security::GROUP_SECURITY_INFORMATION, Security::INHERITED_ACE, Security::INHERIT_ONLY_ACE, Security::LABEL_SECURITY_INFORMATION, Security::LOGON32_LOGON_BATCH, Security::LOGON32_LOGON_INTERACTIVE, Security::LOGON32_LOGON_NETWORK, Security::LOGON32_LOGON_NETWORK_CLEARTEXT, Security::LOGON32_LOGON_NEW_CREDENTIALS, Security::LOGON32_LOGON_SERVICE, Security::LOGON32_LOGON_UNLOCK, Security::LOGON32_PROVIDER_DEFAULT, Security::LOGON32_PROVIDER_WINNT35, Security::LOGON32_PROVIDER_WINNT40, Security::LOGON32_PROVIDER_WINNT50, Security::MAXDWORD, Security::MAX_ACL_REVISION, Security::MIN_ACL_REVISION, Security::NO_PROPAGATE_INHERIT_ACE, Security::OBJECT_INHERIT_ACE, Security::OWNER_SECURITY_INFORMATION, Security::POLICY_AUDIT_LOG_ADMIN, Security::POLICY_CREATE_ACCOUNT, Security::POLICY_CREATE_PRIVILEGE, Security::POLICY_CREATE_SECRET, Security::POLICY_GET_PRIVATE_INFORMATION, Security::POLICY_LOOKUP_NAMES, Security::POLICY_NOTIFICATION, Security::POLICY_SERVER_ADMIN, Security::POLICY_SET_AUDIT_REQUIREMENTS, Security::POLICY_SET_DEFAULT_QUOTA_LIMITS, Security::POLICY_TRUST_ADMIN, Security::POLICY_VIEW_AUDIT_INFORMATION, Security::POLICY_VIEW_LOCAL_INFORMATION, Security::PROTECTED_DACL_SECURITY_INFORMATION, Security::PROTECTED_SACL_SECURITY_INFORMATION, Security::READ_CONTROL, Security::SACL_SECURITY_INFORMATION, Security::SECURITY_DESCRIPTOR_MIN_LENGTH, Security::SECURITY_DESCRIPTOR_REVISION, Security::SECURITY_DESCRIPTOR_REVISION1, Security::SECURITY_IMPERSONATION_LEVEL, Security::SE_DACL_AUTO_INHERITED, Security::SE_DACL_AUTO_INHERIT_REQ, Security::SE_DACL_DEFAULTED, Security::SE_DACL_PRESENT, Security::SE_DACL_PROTECTED, Security::SE_GROUP_DEFAULTED, Security::SE_OBJECT_TYPE, Security::SE_OWNER_DEFAULTED, Security::SE_PRIVILEGE_ENABLED, Security::SE_PRIVILEGE_ENABLED_BY_DEFAULT, Security::SE_PRIVILEGE_REMOVED, Security::SE_PRIVILEGE_USED_FOR_ACCESS, Security::SE_PRIVILEGE_VALID_ATTRIBUTES, Security::SE_RM_CONTROL_VALID, Security::SE_SACL_AUTO_INHERITED, Security::SE_SACL_AUTO_INHERIT_REQ, Security::SE_SACL_DEFAULTED, Security::SE_SACL_PRESENT, Security::SE_SACL_PROTECTED, Security::SE_SELF_RELATIVE, Security::SID_NAME_USE, Security::SPECIFIC_RIGHTS_ALL, Security::STANDARD_RIGHTS_ALL, Security::STANDARD_RIGHTS_EXECUTE, Security::STANDARD_RIGHTS_READ, Security::STANDARD_RIGHTS_REQUIRED, Security::STANDARD_RIGHTS_WRITE, Security::SUCCESSFUL_ACCESS_ACE_FLAG, Security::SYNCHRONIZE, Security::SYSTEM_ALARM_ACE_TYPE, Security::SYSTEM_ALARM_CALLBACK_ACE_TYPE, Security::SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE, Security::SYSTEM_ALARM_OBJECT_ACE_TYPE, Security::SYSTEM_AUDIT_ACE_TYPE, Security::SYSTEM_AUDIT_CALLBACK_ACE_TYPE, Security::SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE, Security::SYSTEM_AUDIT_OBJECT_ACE_TYPE, Security::SYSTEM_MANDATORY_LABEL_ACE_TYPE, Security::TOKEN_ADJUST_DEFAULT, Security::TOKEN_ADJUST_GROUPS, Security::TOKEN_ADJUST_PRIVILEGES, Security::TOKEN_ADJUST_SESSIONID, Security::TOKEN_ALL_ACCESS, Security::TOKEN_ASSIGN_PRIMARY, Security::TOKEN_DUPLICATE, Security::TOKEN_IMPERSONATE, Security::TOKEN_INFORMATION_CLASS, Security::TOKEN_QUERY, Security::TOKEN_QUERY_SOURCE, Security::TOKEN_READ, Security::UNPROTECTED_DACL_SECURITY_INFORMATION, Security::UNPROTECTED_SACL_SECURITY_INFORMATION, Security::VALID_INHERIT_FLAGS, Security::WRITE_DAC, Security::WRITE_OWNER
Class Method Summary collapse
Instance Method Summary collapse
-
#canonical_encode_path(path) ⇒ Object
Expands the path, prepends “\?" and UTF-16LE encodes it.
-
#encode_path(path) ⇒ Object
takes the given path pre-pends “\?" and UTF-16LE encodes it.
-
#file_handle(path, &block) ⇒ Object
retrieves a file handle and passes it to &block along with the find_data.
-
#file_search_handle(path, &block) ⇒ Object
retrieves a file search handle and passes it to &block along with the find_data.
- #path_prepender ⇒ Object
- #retrieve_file_info(file_name) ⇒ Object
- #retrieve_file_version_info(file_name) ⇒ Object
- #symlink_file_handle(path, &block) ⇒ Object
Class Method Details
.CTL_CODE(device_type, function, method, access) ⇒ Object
162 163 164 |
# File 'lib/chef/win32/api/file.rb', line 162 def self.CTL_CODE( device_type, function, method, access ) (device_type << 16) | (access << 14) | (function << 2) | method end |
Instance Method Details
#canonical_encode_path(path) ⇒ Object
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.
527 528 529 |
# File 'lib/chef/win32/api/file.rb', line 527 def canonical_encode_path(path) Chef::Util::PathHelper.canonical_path(path).to_wstring end |
#encode_path(path) ⇒ Object
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).
520 521 522 |
# File 'lib/chef/win32/api/file.rb', line 520 def encode_path(path) (path_prepender << path.gsub(::File::SEPARATOR, ::File::ALT_SEPARATOR)).to_wstring end |
#file_handle(path, &block) ⇒ Object
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
562 563 564 565 566 567 568 569 570 571 572 573 574 575 |
# File 'lib/chef/win32/api/file.rb', line 562 def file_handle(path, &block) begin 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 block.call(handle) ensure CloseHandle(handle) if handle && handle != INVALID_HANDLE_VALUE end end |
#file_search_handle(path, &block) ⇒ Object
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
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 |
# File 'lib/chef/win32/api/file.rb', line 538 def file_search_handle(path, &block) begin # 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.(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 block.call(handle, find_data) ensure FindClose(handle) if handle && handle != INVALID_HANDLE_VALUE end end |
#path_prepender ⇒ Object
531 532 533 |
# File 'lib/chef/win32/api/file.rb', line 531 def path_prepender "\\\\?\\" end |
#retrieve_file_info(file_name) ⇒ Object
592 593 594 595 596 597 598 599 600 601 602 |
# File 'lib/chef/win32/api/file.rb', line 592 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) ⇒ Object
604 605 606 607 608 609 610 611 612 613 614 615 616 617 |
# File 'lib/chef/win32/api/file.rb', line 604 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 |
#symlink_file_handle(path, &block) ⇒ Object
577 578 579 580 581 582 583 584 585 586 587 588 589 590 |
# File 'lib/chef/win32/api/file.rb', line 577 def symlink_file_handle(path, &block) begin 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 block.call(handle) ensure CloseHandle(handle) if handle && handle != INVALID_HANDLE_VALUE end end |