1 // Copyright © 2015, Peter Atashian 2 // Licensed under the MIT License <LICENSE.md> 3 //! ApiSet Contract for api-ms-win-core-file-l1 4 pub const CREATE_NEW: ::DWORD = 1; 5 pub const CREATE_ALWAYS: ::DWORD = 2; 6 pub const OPEN_EXISTING: ::DWORD = 3; 7 pub const OPEN_ALWAYS: ::DWORD = 4; 8 pub const TRUNCATE_EXISTING: ::DWORD = 5; 9 pub const INVALID_FILE_SIZE: ::DWORD = 0xFFFFFFFF; 10 pub const INVALID_SET_FILE_POINTER: ::DWORD = 0xFFFFFFFF; 11 pub const INVALID_FILE_ATTRIBUTES: ::DWORD = 0xFFFFFFFF; 12 STRUCT!{struct WIN32_FILE_ATTRIBUTE_DATA { 13 dwFileAttributes: ::DWORD, 14 ftCreationTime: ::FILETIME, 15 ftLastAccessTime: ::FILETIME, 16 ftLastWriteTime: ::FILETIME, 17 nFileSizeHigh: ::DWORD, 18 nFileSizeLow: ::DWORD, 19 }} 20 pub type LPWIN32_FILE_ATTRIBUTE_DATA = *mut WIN32_FILE_ATTRIBUTE_DATA; 21 STRUCT!{struct BY_HANDLE_FILE_INFORMATION { 22 dwFileAttributes: ::DWORD, 23 ftCreationTime: ::FILETIME, 24 ftLastAccessTime: ::FILETIME, 25 ftLastWriteTime: ::FILETIME, 26 dwVolumeSerialNumber: ::DWORD, 27 nFileSizeHigh: ::DWORD, 28 nFileSizeLow: ::DWORD, 29 nNumberOfLinks: ::DWORD, 30 nFileIndexHigh: ::DWORD, 31 nFileIndexLow: ::DWORD, 32 }} 33 pub type PBY_HANDLE_FILE_INFORMATION = *mut BY_HANDLE_FILE_INFORMATION; 34 pub type LPBY_HANDLE_FILE_INFORMATION = *mut BY_HANDLE_FILE_INFORMATION; 35 STRUCT!{struct CREATEFILE2_EXTENDED_PARAMETERS { 36 dwSize: ::DWORD, 37 dwFileAttributes: ::DWORD, 38 dwFileFlags: ::DWORD, 39 dwSecurityQosFlags: ::DWORD, 40 lpSecurityAttributes: ::LPSECURITY_ATTRIBUTES, 41 hTemplateFile: ::HANDLE, 42 }} 43 pub type PCREATEFILE2_EXTENDED_PARAMETERS = *mut CREATEFILE2_EXTENDED_PARAMETERS; 44 pub type LPCREATEFILE2_EXTENDED_PARAMETERS = *mut CREATEFILE2_EXTENDED_PARAMETERS; 45 ENUM!{enum PRIORITY_HINT { 46 IoPriorityHintVeryLow = 0, 47 IoPriorityHintLow = 1, 48 IoPriorityHintNormal = 2, 49 MaximumIoPriorityHintType = 3, 50 }} 51 STRUCT!{struct FILE_BASIC_INFO { 52 CreationTime: ::LARGE_INTEGER, 53 LastAccessTime: ::LARGE_INTEGER, 54 LastWriteTime: ::LARGE_INTEGER, 55 ChangeTime: ::LARGE_INTEGER, 56 FileAttributes: ::DWORD, 57 }} 58 STRUCT!{struct FILE_STANDARD_INFO { 59 AllocationSize: ::LARGE_INTEGER, 60 EndOfFile: ::LARGE_INTEGER, 61 NumberOfLinks: ::DWORD, 62 DeletePending: ::BOOLEAN, 63 Directory: ::BOOLEAN, 64 }} 65 STRUCT!{struct FILE_NAME_INFO { 66 FileNameLength: ::DWORD, 67 FileName: [::WCHAR; 0], 68 }} 69 STRUCT!{struct FILE_RENAME_INFO { 70 ReplaceIfExists: ::BOOL, 71 RootDirectory: ::HANDLE, 72 FileNameLength: ::DWORD, 73 FileName: [::WCHAR; 0], 74 }} 75 STRUCT!{struct FILE_DISPOSITION_INFO { 76 DeleteFile: ::BOOL, 77 }} 78 STRUCT!{struct FILE_ALLOCATION_INFO { 79 AllocationSize: ::LARGE_INTEGER, 80 }} 81 STRUCT!{struct FILE_END_OF_FILE_INFO { 82 EndOfFile: ::LARGE_INTEGER, 83 }} 84 STRUCT!{struct FILE_STREAM_INFO { 85 NextEntryOffset: ::DWORD, 86 StreamNameLength: ::DWORD, 87 StreamSize: ::DWORD, 88 StreamAllocationSize: ::DWORD, 89 StreamName: [::WCHAR; 0], 90 }} 91 STRUCT!{struct FILE_COMPRESSION_INFO { 92 CompressedFileSize: ::LARGE_INTEGER, 93 CompressionFormat: ::WORD, 94 CompressionUnitShift: ::UCHAR, 95 ChunkShift: ::UCHAR, 96 ClusterShift: ::UCHAR, 97 Reserved: [::UCHAR; 3], 98 }} 99 STRUCT!{struct FILE_ATTRIBUTE_TAG_INFO { 100 NextEntryOffset: ::DWORD, 101 ReparseTag: ::DWORD, 102 }} 103 STRUCT!{struct FILE_ID_BOTH_DIR_INFO { 104 NextEntryOffset: ::DWORD, 105 FileIndex: ::DWORD, 106 CreationTime: ::LARGE_INTEGER, 107 LastAccessTime: ::LARGE_INTEGER, 108 LastWriteTime: ::LARGE_INTEGER, 109 ChangeTime: ::LARGE_INTEGER, 110 EndOfFile: ::LARGE_INTEGER, 111 AllocationSize: ::LARGE_INTEGER, 112 FileAttributes: ::DWORD, 113 FileNameLength: ::DWORD, 114 EaSize: ::DWORD, 115 ShortNameLength: ::CCHAR, 116 ShortName: [::WCHAR; 12], 117 FileId: ::LARGE_INTEGER, 118 FileName: [::WCHAR; 0], 119 }} 120 STRUCT!{struct FILE_IO_PRIORITY_HINT_INFO { 121 PriorityHint: ::PRIORITY_HINT, 122 }} 123 STRUCT!{struct FILE_FULL_DIR_INFO { 124 NextEntryOffset: ::ULONG, 125 FileIndex: ::ULONG, 126 CreationTime: ::LARGE_INTEGER, 127 LastAccessTime: ::LARGE_INTEGER, 128 LastWriteTime: ::LARGE_INTEGER, 129 ChangeTime: ::LARGE_INTEGER, 130 EndOfFile: ::LARGE_INTEGER, 131 AllocationSize: ::LARGE_INTEGER, 132 FileAttributes: ::ULONG, 133 FileNameLength: ::ULONG, 134 EaSize: ::ULONG, 135 FileName: [::WCHAR; 0], 136 }} 137 STRUCT!{struct FILE_STORAGE_INFO { 138 LogicalBytesPerSector: ::ULONG, 139 PhysicalBytesPerSectorForAtomicity: ::ULONG, 140 PhysicalBytesPerSectorForPerformance: ::ULONG, 141 FileSystemEffectivePhysicalBytesPerSectorForAtomicity: ::ULONG, 142 Flags: ::ULONG, 143 ByteOffsetForSectorAlignment: ::ULONG, 144 ByteOffsetForPartitionAlignment: ::ULONG, 145 }} 146 STRUCT!{struct FILE_ALIGNMENT_INFO { 147 AlignmentRequirement: ::ULONG, 148 }} 149 STRUCT!{struct FILE_ID_INFO { 150 VolumeSerialNumber: ::ULONGLONG, 151 FileId: ::FILE_ID_128, 152 }} 153