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