Module: Chef::ReservedNames::Win32::API::File
- Extended by:
- Chef::ReservedNames::Win32::API
- Included in:
- File::Info, ReservedNames::Win32::File, ReservedNames::Win32::File
- 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, 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::MAXDWORD, Security::MAX_ACL_REVISION, Security::MIN_ACL_REVISION, Security::NO_PROPAGATE_INHERIT_ACE, Security::OBJECT_INHERIT_ACE, Security::OWNER_SECURITY_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
- #symlink_file_handle(path, &block) ⇒ Object
Class Method Details
.CTL_CODE(device_type, function, method, access) ⇒ Object
161 162 163 |
# File 'lib/chef/win32/api/file.rb', line 161 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.
471 472 473 |
# File 'lib/chef/win32/api/file.rb', line 471 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).
464 465 466 |
# File 'lib/chef/win32/api/file.rb', line 464 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
506 507 508 509 510 511 512 513 514 515 516 517 518 519 |
# File 'lib/chef/win32/api/file.rb', line 506 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
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 |
# File 'lib/chef/win32/api/file.rb', line 482 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
475 476 477 |
# File 'lib/chef/win32/api/file.rb', line 475 def path_prepender "\\\\?\\" end |
#retrieve_file_info(file_name) ⇒ Object
536 537 538 539 540 541 542 543 544 545 546 |
# File 'lib/chef/win32/api/file.rb', line 536 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 |
#symlink_file_handle(path, &block) ⇒ Object
521 522 523 524 525 526 527 528 529 530 531 532 533 534 |
# File 'lib/chef/win32/api/file.rb', line 521 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 |