1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! ApiSet Contract for api-ms-win-core-file-l1
7 use shared
::minwindef
::{
8 BOOL
, DWORD
, FILETIME
, LPCVOID
, LPDWORD
, LPFILETIME
, LPVOID
, PDWORD
, PUCHAR
, UCHAR
, UINT
,
12 FILE_INFO_BY_HANDLE_CLASS
, FINDEX_INFO_LEVELS
, FINDEX_SEARCH_OPS
, GET_FILEEX_INFO_LEVELS
,
13 LPOVERLAPPED
, LPOVERLAPPED_COMPLETION_ROUTINE
, LPSECURITY_ATTRIBUTES
, LPWIN32_FIND_DATAA
,
17 BOOLEAN
, CCHAR
, FILE_ID_128
, FILE_SEGMENT_ELEMENT
, HANDLE
, LARGE_INTEGER
, LONG
, LONGLONG
,
18 LPCSTR
, LPCWSTR
, LPSTR
, LPWCH
, LPWSTR
, PLARGE_INTEGER
, PLONG
, PULARGE_INTEGER
, PWSTR
,
21 pub const CREATE_NEW
: DWORD
= 1;
22 pub const CREATE_ALWAYS
: DWORD
= 2;
23 pub const OPEN_EXISTING
: DWORD
= 3;
24 pub const OPEN_ALWAYS
: DWORD
= 4;
25 pub const TRUNCATE_EXISTING
: DWORD
= 5;
26 pub const INVALID_FILE_SIZE
: DWORD
= 0xFFFFFFFF;
27 pub const INVALID_SET_FILE_POINTER
: DWORD
= 0xFFFFFFFF;
28 pub const INVALID_FILE_ATTRIBUTES
: DWORD
= 0xFFFFFFFF;
29 STRUCT
!{struct WIN32_FILE_ATTRIBUTE_DATA
{
30 dwFileAttributes
: DWORD
,
31 ftCreationTime
: FILETIME
,
32 ftLastAccessTime
: FILETIME
,
33 ftLastWriteTime
: FILETIME
,
37 pub type LPWIN32_FILE_ATTRIBUTE_DATA
= *mut WIN32_FILE_ATTRIBUTE_DATA
;
38 STRUCT
!{struct BY_HANDLE_FILE_INFORMATION
{
39 dwFileAttributes
: DWORD
,
40 ftCreationTime
: FILETIME
,
41 ftLastAccessTime
: FILETIME
,
42 ftLastWriteTime
: FILETIME
,
43 dwVolumeSerialNumber
: DWORD
,
46 nNumberOfLinks
: DWORD
,
47 nFileIndexHigh
: DWORD
,
50 pub type PBY_HANDLE_FILE_INFORMATION
= *mut BY_HANDLE_FILE_INFORMATION
;
51 pub type LPBY_HANDLE_FILE_INFORMATION
= *mut BY_HANDLE_FILE_INFORMATION
;
52 STRUCT
!{struct CREATEFILE2_EXTENDED_PARAMETERS
{
54 dwFileAttributes
: DWORD
,
56 dwSecurityQosFlags
: DWORD
,
57 lpSecurityAttributes
: LPSECURITY_ATTRIBUTES
,
58 hTemplateFile
: HANDLE
,
60 pub type PCREATEFILE2_EXTENDED_PARAMETERS
= *mut CREATEFILE2_EXTENDED_PARAMETERS
;
61 pub type LPCREATEFILE2_EXTENDED_PARAMETERS
= *mut CREATEFILE2_EXTENDED_PARAMETERS
;
62 ENUM
!{enum PRIORITY_HINT
{
63 IoPriorityHintVeryLow
= 0,
64 IoPriorityHintLow
= 1,
65 IoPriorityHintNormal
= 2,
66 MaximumIoPriorityHintType
= 3,
68 STRUCT
!{struct FILE_BASIC_INFO
{
69 CreationTime
: LARGE_INTEGER
,
70 LastAccessTime
: LARGE_INTEGER
,
71 LastWriteTime
: LARGE_INTEGER
,
72 ChangeTime
: LARGE_INTEGER
,
73 FileAttributes
: DWORD
,
75 STRUCT
!{struct FILE_STANDARD_INFO
{
76 AllocationSize
: LARGE_INTEGER
,
77 EndOfFile
: LARGE_INTEGER
,
79 DeletePending
: BOOLEAN
,
82 STRUCT
!{struct FILE_NAME_INFO
{
83 FileNameLength
: DWORD
,
86 STRUCT
!{struct FILE_RENAME_INFO
{
87 ReplaceIfExists
: BOOL
,
88 RootDirectory
: HANDLE
,
89 FileNameLength
: DWORD
,
92 STRUCT
!{struct FILE_DISPOSITION_INFO
{
95 STRUCT
!{struct FILE_ALLOCATION_INFO
{
96 AllocationSize
: LARGE_INTEGER
,
98 STRUCT
!{struct FILE_END_OF_FILE_INFO
{
99 EndOfFile
: LARGE_INTEGER
,
101 STRUCT
!{struct FILE_STREAM_INFO
{
102 NextEntryOffset
: DWORD
,
103 StreamNameLength
: DWORD
,
104 StreamSize
: LARGE_INTEGER
,
105 StreamAllocationSize
: LARGE_INTEGER
,
106 StreamName
: [WCHAR
; 1],
108 STRUCT
!{struct FILE_COMPRESSION_INFO
{
109 CompressedFileSize
: LARGE_INTEGER
,
110 CompressionFormat
: WORD
,
111 CompressionUnitShift
: UCHAR
,
114 Reserved
: [UCHAR
; 3],
116 STRUCT
!{struct FILE_ATTRIBUTE_TAG_INFO
{
117 NextEntryOffset
: DWORD
,
120 STRUCT
!{struct FILE_ID_BOTH_DIR_INFO
{
121 NextEntryOffset
: DWORD
,
123 CreationTime
: LARGE_INTEGER
,
124 LastAccessTime
: LARGE_INTEGER
,
125 LastWriteTime
: LARGE_INTEGER
,
126 ChangeTime
: LARGE_INTEGER
,
127 EndOfFile
: LARGE_INTEGER
,
128 AllocationSize
: LARGE_INTEGER
,
129 FileAttributes
: DWORD
,
130 FileNameLength
: DWORD
,
132 ShortNameLength
: CCHAR
,
133 ShortName
: [WCHAR
; 12],
134 FileId
: LARGE_INTEGER
,
135 FileName
: [WCHAR
; 1],
137 STRUCT
!{struct FILE_IO_PRIORITY_HINT_INFO
{
138 PriorityHint
: PRIORITY_HINT
,
140 STRUCT
!{struct FILE_FULL_DIR_INFO
{
141 NextEntryOffset
: ULONG
,
143 CreationTime
: LARGE_INTEGER
,
144 LastAccessTime
: LARGE_INTEGER
,
145 LastWriteTime
: LARGE_INTEGER
,
146 ChangeTime
: LARGE_INTEGER
,
147 EndOfFile
: LARGE_INTEGER
,
148 AllocationSize
: LARGE_INTEGER
,
149 FileAttributes
: ULONG
,
150 FileNameLength
: ULONG
,
152 FileName
: [WCHAR
; 1],
154 STRUCT
!{struct FILE_STORAGE_INFO
{
155 LogicalBytesPerSector
: ULONG
,
156 PhysicalBytesPerSectorForAtomicity
: ULONG
,
157 PhysicalBytesPerSectorForPerformance
: ULONG
,
158 FileSystemEffectivePhysicalBytesPerSectorForAtomicity
: ULONG
,
160 ByteOffsetForSectorAlignment
: ULONG
,
161 ByteOffsetForPartitionAlignment
: ULONG
,
163 STRUCT
!{struct FILE_ALIGNMENT_INFO
{
164 AlignmentRequirement
: ULONG
,
166 STRUCT
!{struct FILE_ID_INFO
{
167 VolumeSerialNumber
: ULONGLONG
,
171 pub fn CompareFileTime(
172 lpFileTime1
: *const FILETIME
,
173 lpFileTime2
: *const FILETIME
,
175 pub fn CreateDirectoryA(
177 lpSecurityAttributes
: LPSECURITY_ATTRIBUTES
,
179 pub fn CreateDirectoryW(
181 lpSecurityAttributes
: LPSECURITY_ATTRIBUTES
,
185 dwDesiredAccess
: DWORD
,
187 lpSecurityAttributes
: LPSECURITY_ATTRIBUTES
,
188 dwCreationDisposition
: DWORD
,
189 dwFlagsAndAttributes
: DWORD
,
190 hTemplateFile
: HANDLE
,
194 dwDesiredAccess
: DWORD
,
196 lpSecurityAttributes
: LPSECURITY_ATTRIBUTES
,
197 dwCreationDisposition
: DWORD
,
198 dwFlagsAndAttributes
: DWORD
,
199 hTemplateFile
: HANDLE
,
201 pub fn DefineDosDeviceW(
203 lpDeviceName
: LPCWSTR
,
204 lpTargetPath
: LPCWSTR
,
212 pub fn DeleteVolumeMountPointW(
213 lpszVolumeMountPoint
: LPCWSTR
,
215 pub fn FileTimeToLocalFileTime(
216 lpFileTime
: *const FILETIME
,
217 lpLocalFileTime
: LPFILETIME
,
222 pub fn FindCloseChangeNotification(
223 hChangeHandle
: HANDLE
,
225 pub fn FindFirstChangeNotificationA(
228 dwNotifyFilter
: DWORD
,
230 pub fn FindFirstChangeNotificationW(
233 dwNotifyFilter
: DWORD
,
235 pub fn FindFirstFileA(
237 lpFindFileData
: LPWIN32_FIND_DATAA
,
239 pub fn FindFirstFileW(
241 lpFindFileData
: LPWIN32_FIND_DATAW
,
243 pub fn FindFirstFileExA(
245 fInfoLevelId
: FINDEX_INFO_LEVELS
,
246 lpFindFileData
: LPVOID
,
247 fSearchOp
: FINDEX_SEARCH_OPS
,
248 lpSearchFilter
: LPVOID
,
249 dwAdditionalFlags
: DWORD
,
251 pub fn FindFirstFileExW(
253 fInfoLevelId
: FINDEX_INFO_LEVELS
,
254 lpFindFileData
: LPVOID
,
255 fSearchOp
: FINDEX_SEARCH_OPS
,
256 lpSearchFilter
: LPVOID
,
257 dwAdditionalFlags
: DWORD
,
259 pub fn FindFirstVolumeW(
260 lpszVolumeName
: LPWSTR
,
261 cchBufferLength
: DWORD
,
263 pub fn FindNextChangeNotification(
264 hChangeHandle
: HANDLE
,
266 pub fn FindNextFileA(
268 lpFindFileData
: LPWIN32_FIND_DATAA
,
270 pub fn FindNextFileW(
272 lpFindFileData
: LPWIN32_FIND_DATAW
,
274 pub fn FindNextVolumeW(
276 lpszVolumeName
: LPWSTR
,
277 cchBufferLength
: DWORD
,
279 pub fn FindVolumeClose(
282 pub fn FlushFileBuffers(
285 pub fn GetDiskFreeSpaceA(
286 lpRootPathName
: LPCSTR
,
287 lpSectorsPerCluster
: LPDWORD
,
288 lpBytesPerSector
: LPDWORD
,
289 lpNumberOfFreeClusters
: LPDWORD
,
290 lpTotalNumberOfClusters
: LPDWORD
,
292 pub fn GetDiskFreeSpaceW(
293 lpRootPathName
: LPCWSTR
,
294 lpSectorsPerCluster
: LPDWORD
,
295 lpBytesPerSector
: LPDWORD
,
296 lpNumberOfFreeClusters
: LPDWORD
,
297 lpTotalNumberOfClusters
: LPDWORD
,
299 pub fn GetDiskFreeSpaceExA(
300 lpDirectoryName
: LPCSTR
,
301 lpFreeBytesAvailableToCaller
: PULARGE_INTEGER
,
302 lpTotalNumberOfBytes
: PULARGE_INTEGER
,
303 lpTotalNumberOfFreeBytes
: PULARGE_INTEGER
,
305 pub fn GetDiskFreeSpaceExW(
306 lpDirectoryName
: LPCWSTR
,
307 lpFreeBytesAvailableToCaller
: PULARGE_INTEGER
,
308 lpTotalNumberOfBytes
: PULARGE_INTEGER
,
309 lpTotalNumberOfFreeBytes
: PULARGE_INTEGER
,
311 pub fn GetDriveTypeA(
312 lpRootPathName
: LPCSTR
,
314 pub fn GetDriveTypeW(
315 lpRootPathName
: LPCWSTR
,
317 pub fn GetFileAttributesA(
320 pub fn GetFileAttributesW(
323 pub fn GetFileAttributesExA(
325 fInfoLevelId
: GET_FILEEX_INFO_LEVELS
,
326 lpFileInformation
: LPVOID
,
328 pub fn GetFileAttributesExW(
330 fInfoLevelId
: GET_FILEEX_INFO_LEVELS
,
331 lpFileInformation
: LPVOID
,
333 pub fn GetFileInformationByHandle(
335 lpFileInformation
: LPBY_HANDLE_FILE_INFORMATION
,
339 lpFileSizeHigh
: LPDWORD
,
341 pub fn GetFileSizeEx(
343 lpFileSize
: PLARGE_INTEGER
,
348 pub fn GetFinalPathNameByHandleA(
354 pub fn GetFinalPathNameByHandleW(
356 lpszFilePath
: LPWSTR
,
362 lpCreationTime
: LPFILETIME
,
363 lpLastAccessTime
: LPFILETIME
,
364 lpLastWriteTime
: LPFILETIME
,
366 pub fn GetFullPathNameW(
368 nBufferLength
: DWORD
,
370 lpFilePart
: *mut LPWSTR
,
372 pub fn GetFullPathNameA(
374 nBufferLength
: DWORD
,
376 lpFilePart
: *mut LPSTR
,
378 pub fn GetLogicalDrives() -> DWORD
;
379 pub fn GetLogicalDriveStringsW(
380 nBufferLength
: DWORD
,
383 pub fn GetLongPathNameA(
384 lpszShortPath
: LPCSTR
,
388 pub fn GetLongPathNameW(
389 lpszShortPath
: LPCWSTR
,
390 lpszLongPath
: LPWSTR
,
393 pub fn GetShortPathNameW(
394 lpszLongPath
: LPCWSTR
,
395 lpszShortPath
: LPWSTR
,
398 pub fn GetTempFileNameW(
400 lpPrefixString
: LPCWSTR
,
402 lpTempFileName
: LPWSTR
,
404 pub fn GetVolumeInformationByHandleW(
406 lpVolumeNameBuffer
: LPWSTR
,
407 nVolumeNameSize
: DWORD
,
408 lpVolumeSerialNumber
: LPDWORD
,
409 lpMaximumComponentLength
: LPDWORD
,
410 lpFileSystemFlags
: LPDWORD
,
411 lpFileSystemNameBuffer
: LPWSTR
,
412 nFileSystemNameSize
: DWORD
,
414 pub fn GetVolumeInformationW(
415 lpRootPathName
: LPCWSTR
,
416 lpVolumeNameBuffer
: LPWSTR
,
417 nVolumeNameSize
: DWORD
,
418 lpVolumeSerialNumber
: LPDWORD
,
419 lpMaximumComponentLength
: LPDWORD
,
420 lpFileSystemFlags
: LPDWORD
,
421 lpFileSystemNameBuffer
: LPWSTR
,
422 nFileSystemNameSize
: DWORD
,
424 pub fn GetVolumePathNameW(
425 lpszFileName
: LPCWSTR
,
426 lpszVolumePathName
: LPWSTR
,
427 cchBufferLength
: DWORD
,
429 pub fn LocalFileTimeToFileTime(
430 lpLocalFileTime
: *const FILETIME
,
431 lpFileTime
: LPFILETIME
,
435 dwFileOffsetLow
: DWORD
,
436 dwFileOffsetHigh
: DWORD
,
437 nNumberOfBytesToLockLow
: DWORD
,
438 nNumberOfBytesToLockHigh
: DWORD
,
444 nNumberOfBytesToLockLow
: DWORD
,
445 nNumberOfBytesToLockHigh
: DWORD
,
446 lpOverlapped
: LPOVERLAPPED
,
448 pub fn QueryDosDeviceW(
449 lpDeviceName
: LPCWSTR
,
450 lpTargetPath
: LPWSTR
,
456 nNumberOfBytesToRead
: DWORD
,
457 lpNumberOfBytesRead
: LPDWORD
,
458 lpOverlapped
: LPOVERLAPPED
,
463 nNumberOfBytesToRead
: DWORD
,
464 lpOverlapped
: LPOVERLAPPED
,
465 lpCompletionRoutine
: LPOVERLAPPED_COMPLETION_ROUTINE
,
467 pub fn ReadFileScatter(
469 aSegmentArray
: *mut FILE_SEGMENT_ELEMENT
,
470 nNumberOfBytesToRead
: DWORD
,
472 lpOverlapped
: LPOVERLAPPED
,
474 pub fn RemoveDirectoryA(
477 pub fn RemoveDirectoryW(
483 pub fn SetFileAttributesA(
485 dwFileAttributes
: DWORD
,
487 pub fn SetFileAttributesW(
489 dwFileAttributes
: DWORD
,
491 pub fn SetFileInformationByHandle(
493 FileInformationClass
: FILE_INFO_BY_HANDLE_CLASS
,
494 lpFileInformation
: LPVOID
,
497 pub fn SetFilePointer(
499 lDistanceToMove
: LONG
,
500 lpDistanceToMoveHigh
: PLONG
,
503 pub fn SetFilePointerEx(
505 liDistanceToMove
: LARGE_INTEGER
,
506 lpNewFilePointer
: PLARGE_INTEGER
,
511 lpCreationTime
: *const FILETIME
,
512 lpLastAccessTime
: *const FILETIME
,
513 lpLastWriteTime
: *const FILETIME
,
515 pub fn SetFileValidData(
517 ValidDataLength
: LONGLONG
,
521 dwFileOffsetLow
: DWORD
,
522 dwFileOffsetHigh
: DWORD
,
523 nNumberOfBytesToUnlockLow
: DWORD
,
524 nNumberOfBytesToUnlockHigh
: DWORD
,
529 nNumberOfBytesToUnlockLow
: DWORD
,
530 nNumberOfBytesToUnlockHigh
: DWORD
,
531 lpOverlapped
: LPOVERLAPPED
,
536 nNumberOfBytesToWrite
: DWORD
,
537 lpNumberOfBytesWritten
: LPDWORD
,
538 lpOverlapped
: LPOVERLAPPED
,
543 nNumberOfBytesToWrite
: DWORD
,
544 lpOverlapped
: LPOVERLAPPED
,
545 lpCompletionRoutine
: LPOVERLAPPED_COMPLETION_ROUTINE
,
547 pub fn WriteFileGather(
549 aSegmentArray
: *mut FILE_SEGMENT_ELEMENT
,
550 nNumberOfBytesToWrite
: DWORD
,
552 lpOverlapped
: LPOVERLAPPED
,
555 nBufferLength
: DWORD
,
558 pub fn GetVolumeNameForVolumeMountPointW(
559 lpszVolumeMountPoint
: LPCWSTR
,
560 lpszVolumeName
: LPWSTR
,
561 cchBufferLength
: DWORD
,
563 pub fn GetVolumePathNamesForVolumeNameW(
564 lpszVolumeName
: LPCWSTR
,
565 lpszVolumePathNames
: LPWCH
,
566 cchBufferLength
: DWORD
,
567 lpcchReturnLength
: PDWORD
,
571 dwDesiredAccess
: DWORD
,
573 dwCreationDisposition
: DWORD
,
574 pCreateExParams
: LPCREATEFILE2_EXTENDED_PARAMETERS
,
576 pub fn SetFileIoOverlappedRange(
578 OverlappedRangeStart
: PUCHAR
,
581 pub fn GetCompressedFileSizeA(
583 lpFileSizeHigh
: LPDWORD
,
585 pub fn GetCompressedFileSizeW(
587 lpFileSizeHigh
: LPDWORD
,
590 ENUM
!{enum STREAM_INFO_LEVELS
{
591 FindStreamInfoStandard
,
592 FindStreamInfoMaxInfoLevel
,
595 pub fn FindFirstStreamW(
597 InfoLevel
: STREAM_INFO_LEVELS
,
598 lpFindStreamData
: LPVOID
,
601 pub fn FindNextStreamW(
603 lpFindStreamData
: LPVOID
,
605 pub fn AreFileApisANSI() -> BOOL
;
607 nBufferLength
: DWORD
,
610 pub fn FindFirstFileNameW(
613 StringLength
: LPDWORD
,
616 pub fn FindNextFileNameW(
618 StringLength
: LPDWORD
,
621 pub fn GetVolumeInformationA(
622 lpRootPathName
: LPCSTR
,
623 lpVolumeNameBuffer
: LPSTR
,
624 nVolumeNameSize
: DWORD
,
625 lpVolumeSerialNumber
: LPDWORD
,
626 lpMaximumComponentLength
: LPDWORD
,
627 lpFileSystemFlags
: LPDWORD
,
628 lpFileSystemNameBuffer
: LPSTR
,
629 nFileSystemNameSize
: DWORD
,
631 pub fn GetTempFileNameA(
633 lpPrefixString
: LPCSTR
,
635 lpTempFileName
: LPSTR
,
637 pub fn SetFileApisToOEM();
638 pub fn SetFileApisToANSI();