lib/windows/file.rb in windows-pr-1.2.2 vs lib/windows/file.rb in windows-pr-1.2.3

- old
+ new

@@ -1,264 +1,264 @@ -require 'windows/unicode' -require 'windows/security' - -module Windows - module File - include Windows::Unicode - include Windows::Security - - API.auto_namespace = 'Windows::File' - API.auto_constant = true - API.auto_method = true - API.auto_unicode = true - - private - - FILE_BEGIN = 0 - FILE_CURRENT = 1 - FILE_END = 2 - - # File Attributes - - FILE_ATTRIBUTE_READONLY = 0x00000001 - FILE_ATTRIBUTE_HIDDEN = 0x00000002 - FILE_ATTRIBUTE_SYSTEM = 0x00000004 - FILE_ATTRIBUTE_DIRECTORY = 0x00000010 - FILE_ATTRIBUTE_ARCHIVE = 0x00000020 - FILE_ATTRIBUTE_ENCRYPTED = 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 types - - FILE_TYPE_UNKNOWN = 0x0000 - FILE_TYPE_DISK = 0x0001 - FILE_TYPE_CHAR = 0x0002 - FILE_TYPE_PIPE = 0x0003 - FILE_TYPE_REMOTE = 0x8000 - - # File compression constants - - COMPRESSION_FORMAT_NONE = 0 - COMPRESSION_FORMAT_DEFAULT = 1 - COMPRESSION_FORMAT_LZNT1 = 2 - COMPRESSION_ENGINE_STANDARD = 0 - COMPRESSION_ENGINE_MAXIMUM = 256 - ANYSIZE_ARRAY = 1 - - # File security and access rights - - FILE_READ_DATA = 1 - FILE_LIST_DIRECTORY = 1 - FILE_WRITE_DATA = 2 - FILE_ADD_FILE = 2 - FILE_APPEND_DATA = 4 - FILE_ADD_SUBDIRECTORY = 4 - FILE_CREATE_PIPE_INSTANCE = 4 - FILE_READ_EA = 8 - FILE_READ_PROPERTIES = 8 - FILE_WRITE_EA = 16 - FILE_WRITE_PROPERTIES = 16 - FILE_EXECUTE = 32 - FILE_TRAVERSE = 32 - FILE_DELETE_CHILD = 64 - FILE_READ_ATTRIBUTES = 128 - FILE_WRITE_ATTRIBUTES = 256 - - FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF - - FILE_GENERIC_READ = - STANDARD_RIGHTS_READ | - FILE_READ_DATA | - FILE_READ_ATTRIBUTES | - FILE_READ_EA | - SYNCHRONIZE - - FILE_GENERIC_WRITE = - STANDARD_RIGHTS_WRITE | - FILE_WRITE_DATA | - FILE_WRITE_ATTRIBUTES | - FILE_WRITE_EA | - FILE_APPEND_DATA | - SYNCHRONIZE - - FILE_GENERIC_EXECUTE = - STANDARD_RIGHTS_EXECUTE | - FILE_READ_ATTRIBUTES | - FILE_EXECUTE | - SYNCHRONIZE - - FILE_SHARE_READ = 1 - FILE_SHARE_WRITE = 2 - FILE_SHARE_DELETE = 4 - FILE_NOTIFY_CHANGE_FILE_NAME = 1 - FILE_NOTIFY_CHANGE_DIR_NAME = 2 - FILE_NOTIFY_CHANGE_ATTRIBUTES = 4 - FILE_NOTIFY_CHANGE_SIZE = 8 - FILE_NOTIFY_CHANGE_LAST_WRITE = 16 - FILE_NOTIFY_CHANGE_LAST_ACCESS = 32 - FILE_NOTIFY_CHANGE_CREATION = 64 - FILE_NOTIFY_CHANGE_SECURITY = 256 - FILE_CASE_SENSITIVE_SEARCH = 1 - FILE_CASE_PRESERVED_NAMES = 2 - FILE_UNICODE_ON_DISK = 4 - FILE_PERSISTENT_ACLS = 8 - FILE_FILE_COMPRESSION = 16 - FILE_VOLUME_QUOTAS = 32 - FILE_SUPPORTS_SPARSE_FILES = 64 - FILE_SUPPORTS_REPARSE_POINTS = 128 - FILE_SUPPORTS_REMOTE_STORAGE = 256 - FILE_VOLUME_IS_COMPRESSED = 0x8000 - FILE_SUPPORTS_OBJECT_IDS = 0x10000 - FILE_SUPPORTS_ENCRYPTION = 0x20000 - - # File flags - - 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 - - # File creation disposition - - CREATE_NEW = 1 - CREATE_ALWAYS = 2 - OPEN_EXISTING = 3 - OPEN_ALWAYS = 4 - TRUNCATE_EXISTING = 5 - - SECTION_QUERY = 0x0001 - SECTION_MAP_WRITE = 0x0002 - SECTION_MAP_READ = 0x0004 - SECTION_MAP_EXECUTE = 0x0008 - SECTION_EXTEND_SIZE = 0x0010 - - SECTION_ALL_ACCESS = - STANDARD_RIGHTS_REQUIRED | - SECTION_QUERY | - SECTION_MAP_WRITE | - SECTION_MAP_READ | - SECTION_MAP_EXECUTE | - SECTION_EXTEND_SIZE - - # Errors - - INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF - INVALID_SET_FILE_POINTER = 0xFFFFFFFF - INVALID_FILE_SIZE = 0xFFFFFFFF - - # Defined in Windows::Handle as well. Here for convenience. - - INVALID_HANDLE_VALUE = 0xFFFFFFFF unless defined? INVALID_HANDLE_VALUE - - # Misc - - LOCKFILE_EXCLUSIVE_LOCK = 0x00000001 - LOCKFILE_FAIL_IMMEDIATELY = 0x00000002 - MOVEFILE_REPLACE_EXISTING = 0x00000001 - MOVEFILE_COPY_ALLOWED = 0x00000002 - MOVEFILE_DELAY_UNTIL_REBOOT = 0x00000004 - MOVEFILE_WRITE_THROUGH = 0x00000008 - MOVEFILE_CREATE_HARDLINK = 0x00000010 - MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x00000020 - SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 - - # FILE_INFO_BY_HANDLE_CLASS enum - - FileBasicInfo = 0 - FileStandardInfo = 1 - FileNameInfo = 2 - FileRenameInfo = 3 - FileDispositionInfo = 4 - FileAllocationInfo = 5 - FileEndOfFileInfo = 6 - FileStreamInfo = 7 - FileCompressionInfo = 8 - FileAttributeTagInfo = 9 - FileIdBothDirectoryInfo = 10 - FileIdBothDirectoryRestartInfo = 11 - FileIoPriorityHintInfo = 12 - MaximumFileInfoByHandleClass = 13 - - # Reparse point tags - - IO_REPARSE_TAG_DFS = 0x8000000A - IO_REPARSE_TAG_DFSR = 0x80000012 - IO_REPARSE_TAG_HSM = 0xC0000004 - IO_REPARSE_TAG_HSM2 = 0x80000006 - IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 - IO_REPARSE_TAG_SIS = 0x80000007 - IO_REPARSE_TAG_SYMLINK = 0xA000000C - - API.new('CopyFile', 'SSI', 'B') - API.new('CopyFileEx', 'SSKPPL', 'B') - API.new('CreateFile', 'SLLPLLL', 'L') - API.new('CreateHardLink', 'SSP', 'B') - API.new('DecryptFile', 'SL', 'B', 'advapi32') - API.new('DeleteFile', 'S', 'B') - API.new('EncryptFile', 'S', 'B', 'advapi32') - API.new('FindClose', 'L', 'B') - API.new('FindFirstFile', 'SP', 'L') - API.new('FindFirstFileEx', 'SIPIII', 'L') - API.new('FindNextFile', 'LP', 'B') - API.new('FlushFileBuffers', 'L', 'B') - API.new('GetBinaryType', 'SP', 'B') - API.new('GetFileAttributes', 'S', 'L') - API.new('GetFileAttributesEx', 'SPP', 'I') - API.new('GetFileInformationByHandle', 'LP', 'B') - API.new('GetFileSize', 'LP', 'L') - API.new('GetFileSizeEx', 'LP', 'B') - API.new('GetFileType', 'L', 'L') - API.new('GetFullPathName', 'SLPP', 'L') - API.new('GetLongPathName', 'SPL', 'L') - API.new('GetShortPathName', 'SPL', 'L') - API.new('LockFile', 'LLLLL', 'B') - API.new('LockFileEx', 'LLLLLL', 'B') - API.new('MoveFile', 'SS', 'B') - API.new('MoveFileEx', 'SSL', 'B') - API.new('ReadFile', 'LPLPP', 'B') - API.new('ReadFileEx', 'LPLPK', 'B') - API.new('SetEndOfFile', 'L', 'B') - API.new('SetFileAttributes', 'SL', 'B') - API.new('UnlockFile', 'LLLLL', 'B') - API.new('UnlockFileEx', 'LLLLL', 'B') - API.new('WriteFile', 'LPLPP', 'B') - API.new('WriteFileEx', 'LPLPK', 'B') - - begin - API.new('SetFileShortName', 'LP', 'B') - API.new('SetFileValidData', 'LL', 'B') - rescue Win32::API::LoadLibraryError - # Windows XP or later - end - - begin - API.new('Wow64DisableWow64FsRedirection', 'P', 'B') - API.new('Wow64EnableWow64FsRedirection', 'I', 'I') - API.new('Wow64RevertWow64FsRedirection', 'L', 'B') - rescue Win32::API::LoadLibraryError - # Windows XP 64-bit and later - end - - begin - API.new('CreateSymbolicLink', 'SSL', 'B') - API.new('CreateSymbolicLinkTransacted', 'SSLL', 'B') - API.new('GetFileInformationByHandleEx', 'LLPL', 'B') - API.new('GetFinalPathNameByHandle', 'LPLL', 'L') - API.new('SetFileInformationByHandle', 'LLPL', 'B') - rescue Win32::API::LoadLibraryError - # Windows Vista - end - end -end +require 'windows/unicode' +require 'windows/security' + +module Windows + module File + include Windows::Unicode + include Windows::Security + + API.auto_namespace = 'Windows::File' + API.auto_constant = true + API.auto_method = true + API.auto_unicode = true + + private + + FILE_BEGIN = 0 + FILE_CURRENT = 1 + FILE_END = 2 + + # File Attributes + + FILE_ATTRIBUTE_READONLY = 0x00000001 + FILE_ATTRIBUTE_HIDDEN = 0x00000002 + FILE_ATTRIBUTE_SYSTEM = 0x00000004 + FILE_ATTRIBUTE_DIRECTORY = 0x00000010 + FILE_ATTRIBUTE_ARCHIVE = 0x00000020 + FILE_ATTRIBUTE_ENCRYPTED = 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 types + + FILE_TYPE_UNKNOWN = 0x0000 + FILE_TYPE_DISK = 0x0001 + FILE_TYPE_CHAR = 0x0002 + FILE_TYPE_PIPE = 0x0003 + FILE_TYPE_REMOTE = 0x8000 + + # File compression constants + + COMPRESSION_FORMAT_NONE = 0 + COMPRESSION_FORMAT_DEFAULT = 1 + COMPRESSION_FORMAT_LZNT1 = 2 + COMPRESSION_ENGINE_STANDARD = 0 + COMPRESSION_ENGINE_MAXIMUM = 256 + ANYSIZE_ARRAY = 1 + + # File security and access rights + + FILE_READ_DATA = 1 + FILE_LIST_DIRECTORY = 1 + FILE_WRITE_DATA = 2 + FILE_ADD_FILE = 2 + FILE_APPEND_DATA = 4 + FILE_ADD_SUBDIRECTORY = 4 + FILE_CREATE_PIPE_INSTANCE = 4 + FILE_READ_EA = 8 + FILE_READ_PROPERTIES = 8 + FILE_WRITE_EA = 16 + FILE_WRITE_PROPERTIES = 16 + FILE_EXECUTE = 32 + FILE_TRAVERSE = 32 + FILE_DELETE_CHILD = 64 + FILE_READ_ATTRIBUTES = 128 + FILE_WRITE_ATTRIBUTES = 256 + + FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF + + FILE_GENERIC_READ = + STANDARD_RIGHTS_READ | + FILE_READ_DATA | + FILE_READ_ATTRIBUTES | + FILE_READ_EA | + SYNCHRONIZE + + FILE_GENERIC_WRITE = + STANDARD_RIGHTS_WRITE | + FILE_WRITE_DATA | + FILE_WRITE_ATTRIBUTES | + FILE_WRITE_EA | + FILE_APPEND_DATA | + SYNCHRONIZE + + FILE_GENERIC_EXECUTE = + STANDARD_RIGHTS_EXECUTE | + FILE_READ_ATTRIBUTES | + FILE_EXECUTE | + SYNCHRONIZE + + FILE_SHARE_READ = 1 + FILE_SHARE_WRITE = 2 + FILE_SHARE_DELETE = 4 + FILE_NOTIFY_CHANGE_FILE_NAME = 1 + FILE_NOTIFY_CHANGE_DIR_NAME = 2 + FILE_NOTIFY_CHANGE_ATTRIBUTES = 4 + FILE_NOTIFY_CHANGE_SIZE = 8 + FILE_NOTIFY_CHANGE_LAST_WRITE = 16 + FILE_NOTIFY_CHANGE_LAST_ACCESS = 32 + FILE_NOTIFY_CHANGE_CREATION = 64 + FILE_NOTIFY_CHANGE_SECURITY = 256 + FILE_CASE_SENSITIVE_SEARCH = 1 + FILE_CASE_PRESERVED_NAMES = 2 + FILE_UNICODE_ON_DISK = 4 + FILE_PERSISTENT_ACLS = 8 + FILE_FILE_COMPRESSION = 16 + FILE_VOLUME_QUOTAS = 32 + FILE_SUPPORTS_SPARSE_FILES = 64 + FILE_SUPPORTS_REPARSE_POINTS = 128 + FILE_SUPPORTS_REMOTE_STORAGE = 256 + FILE_VOLUME_IS_COMPRESSED = 0x8000 + FILE_SUPPORTS_OBJECT_IDS = 0x10000 + FILE_SUPPORTS_ENCRYPTION = 0x20000 + + # File flags + + 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 + + # File creation disposition + + CREATE_NEW = 1 + CREATE_ALWAYS = 2 + OPEN_EXISTING = 3 + OPEN_ALWAYS = 4 + TRUNCATE_EXISTING = 5 + + SECTION_QUERY = 0x0001 + SECTION_MAP_WRITE = 0x0002 + SECTION_MAP_READ = 0x0004 + SECTION_MAP_EXECUTE = 0x0008 + SECTION_EXTEND_SIZE = 0x0010 + + SECTION_ALL_ACCESS = + STANDARD_RIGHTS_REQUIRED | + SECTION_QUERY | + SECTION_MAP_WRITE | + SECTION_MAP_READ | + SECTION_MAP_EXECUTE | + SECTION_EXTEND_SIZE + + # Errors + + INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF + INVALID_SET_FILE_POINTER = 0xFFFFFFFF + INVALID_FILE_SIZE = 0xFFFFFFFF + + # Defined in Windows::Handle as well. Here for convenience. + + INVALID_HANDLE_VALUE = 0xFFFFFFFF unless defined? INVALID_HANDLE_VALUE + + # Misc + + LOCKFILE_EXCLUSIVE_LOCK = 0x00000001 + LOCKFILE_FAIL_IMMEDIATELY = 0x00000002 + MOVEFILE_REPLACE_EXISTING = 0x00000001 + MOVEFILE_COPY_ALLOWED = 0x00000002 + MOVEFILE_DELAY_UNTIL_REBOOT = 0x00000004 + MOVEFILE_WRITE_THROUGH = 0x00000008 + MOVEFILE_CREATE_HARDLINK = 0x00000010 + MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x00000020 + SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 + + # FILE_INFO_BY_HANDLE_CLASS enum + + FileBasicInfo = 0 + FileStandardInfo = 1 + FileNameInfo = 2 + FileRenameInfo = 3 + FileDispositionInfo = 4 + FileAllocationInfo = 5 + FileEndOfFileInfo = 6 + FileStreamInfo = 7 + FileCompressionInfo = 8 + FileAttributeTagInfo = 9 + FileIdBothDirectoryInfo = 10 + FileIdBothDirectoryRestartInfo = 11 + FileIoPriorityHintInfo = 12 + MaximumFileInfoByHandleClass = 13 + + # Reparse point tags + + IO_REPARSE_TAG_DFS = 0x8000000A + IO_REPARSE_TAG_DFSR = 0x80000012 + IO_REPARSE_TAG_HSM = 0xC0000004 + IO_REPARSE_TAG_HSM2 = 0x80000006 + IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 + IO_REPARSE_TAG_SIS = 0x80000007 + IO_REPARSE_TAG_SYMLINK = 0xA000000C + + API.new('CopyFile', 'SSI', 'B') + API.new('CopyFileEx', 'SSKPPL', 'B') + API.new('CreateFile', 'SLLPLLL', 'L') + API.new('CreateHardLink', 'SSP', 'B') + API.new('DecryptFile', 'SL', 'B', 'advapi32') + API.new('DeleteFile', 'S', 'B') + API.new('EncryptFile', 'S', 'B', 'advapi32') + API.new('FindClose', 'L', 'B') + API.new('FindFirstFile', 'SP', 'L') + API.new('FindFirstFileEx', 'SIPIII', 'L') + API.new('FindNextFile', 'LP', 'B') + API.new('FlushFileBuffers', 'L', 'B') + API.new('GetBinaryType', 'SP', 'B') + API.new('GetFileAttributes', 'S', 'L') + API.new('GetFileAttributesEx', 'SPP', 'I') + API.new('GetFileInformationByHandle', 'LP', 'B') + API.new('GetFileSize', 'LP', 'L') + API.new('GetFileSizeEx', 'LP', 'B') + API.new('GetFileType', 'L', 'L') + API.new('GetFullPathName', 'SLPP', 'L') + API.new('GetLongPathName', 'SPL', 'L') + API.new('GetShortPathName', 'SPL', 'L') + API.new('LockFile', 'LLLLL', 'B') + API.new('LockFileEx', 'LLLLLL', 'B') + API.new('MoveFile', 'SS', 'B') + API.new('MoveFileEx', 'SSL', 'B') + API.new('ReadFile', 'LPLPP', 'B') + API.new('ReadFileEx', 'LPLPK', 'B') + API.new('SetEndOfFile', 'L', 'B') + API.new('SetFileAttributes', 'SL', 'B') + API.new('UnlockFile', 'LLLLL', 'B') + API.new('UnlockFileEx', 'LLLLL', 'B') + API.new('WriteFile', 'LPLPP', 'B') + API.new('WriteFileEx', 'LPLPK', 'B') + + begin + API.new('SetFileShortName', 'LP', 'B') + API.new('SetFileValidData', 'LL', 'B') + rescue Win32::API::LoadLibraryError + # Windows XP or later + end + + begin + API.new('Wow64DisableWow64FsRedirection', 'P', 'B') + API.new('Wow64EnableWow64FsRedirection', 'I', 'I') + API.new('Wow64RevertWow64FsRedirection', 'L', 'B') + rescue Win32::API::LoadLibraryError + # Windows XP 64-bit and later + end + + begin + API.new('CreateSymbolicLink', 'SSL', 'B') + API.new('CreateSymbolicLinkTransacted', 'SSLL', 'B') + API.new('GetFileInformationByHandleEx', 'LLPL', 'B') + API.new('GetFinalPathNameByHandle', 'LPLL', 'L') + API.new('SetFileInformationByHandle', 'LLPL', 'B') + rescue Win32::API::LoadLibraryError + # Windows Vista + end + end +end