1 // Copyright © 2015-2017 winapi-rs developers 2 // Licensed under the Apache License, Version 2.0 3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. 5 // All files in the project carrying such notice may not be copied, modified, or distributed 6 // except according to those terms. 7 //! ApiSet Contract for api-ms-win-core-file-l1 8 use shared::minwindef::{ 9 BOOL, DWORD, FILETIME, LPCVOID, LPDWORD, LPFILETIME, LPVOID, PDWORD, PUCHAR, UCHAR, UINT, 10 ULONG, WORD, 11 }; 12 use um::minwinbase::{ 13 FILE_INFO_BY_HANDLE_CLASS, FINDEX_INFO_LEVELS, FINDEX_SEARCH_OPS, GET_FILEEX_INFO_LEVELS, 14 LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE, LPSECURITY_ATTRIBUTES, LPWIN32_FIND_DATAA, 15 LPWIN32_FIND_DATAW 16 }; 17 use um::winnt::{ 18 BOOLEAN, CCHAR, FILE_ID_128, FILE_SEGMENT_ELEMENT, HANDLE, LARGE_INTEGER, LONG, LONGLONG, 19 LPCSTR, LPCWSTR, LPSTR, LPWCH, LPWSTR, PLARGE_INTEGER, PLONG, PULARGE_INTEGER, PWSTR, 20 ULONGLONG, WCHAR, 21 }; 22 pub const CREATE_NEW: DWORD = 1; 23 pub const CREATE_ALWAYS: DWORD = 2; 24 pub const OPEN_EXISTING: DWORD = 3; 25 pub const OPEN_ALWAYS: DWORD = 4; 26 pub const TRUNCATE_EXISTING: DWORD = 5; 27 pub const INVALID_FILE_SIZE: DWORD = 0xFFFFFFFF; 28 pub const INVALID_SET_FILE_POINTER: DWORD = 0xFFFFFFFF; 29 pub const INVALID_FILE_ATTRIBUTES: DWORD = 0xFFFFFFFF; 30 STRUCT!{struct WIN32_FILE_ATTRIBUTE_DATA { 31 dwFileAttributes: DWORD, 32 ftCreationTime: FILETIME, 33 ftLastAccessTime: FILETIME, 34 ftLastWriteTime: FILETIME, 35 nFileSizeHigh: DWORD, 36 nFileSizeLow: DWORD, 37 }} 38 pub type LPWIN32_FILE_ATTRIBUTE_DATA = *mut WIN32_FILE_ATTRIBUTE_DATA; 39 STRUCT!{struct BY_HANDLE_FILE_INFORMATION { 40 dwFileAttributes: DWORD, 41 ftCreationTime: FILETIME, 42 ftLastAccessTime: FILETIME, 43 ftLastWriteTime: FILETIME, 44 dwVolumeSerialNumber: DWORD, 45 nFileSizeHigh: DWORD, 46 nFileSizeLow: DWORD, 47 nNumberOfLinks: DWORD, 48 nFileIndexHigh: DWORD, 49 nFileIndexLow: DWORD, 50 }} 51 pub type PBY_HANDLE_FILE_INFORMATION = *mut BY_HANDLE_FILE_INFORMATION; 52 pub type LPBY_HANDLE_FILE_INFORMATION = *mut BY_HANDLE_FILE_INFORMATION; 53 STRUCT!{struct CREATEFILE2_EXTENDED_PARAMETERS { 54 dwSize: DWORD, 55 dwFileAttributes: DWORD, 56 dwFileFlags: DWORD, 57 dwSecurityQosFlags: DWORD, 58 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 59 hTemplateFile: HANDLE, 60 }} 61 pub type PCREATEFILE2_EXTENDED_PARAMETERS = *mut CREATEFILE2_EXTENDED_PARAMETERS; 62 pub type LPCREATEFILE2_EXTENDED_PARAMETERS = *mut CREATEFILE2_EXTENDED_PARAMETERS; 63 ENUM!{enum PRIORITY_HINT { 64 IoPriorityHintVeryLow = 0, 65 IoPriorityHintLow = 1, 66 IoPriorityHintNormal = 2, 67 MaximumIoPriorityHintType = 3, 68 }} 69 STRUCT!{struct FILE_BASIC_INFO { 70 CreationTime: LARGE_INTEGER, 71 LastAccessTime: LARGE_INTEGER, 72 LastWriteTime: LARGE_INTEGER, 73 ChangeTime: LARGE_INTEGER, 74 FileAttributes: DWORD, 75 }} 76 STRUCT!{struct FILE_STANDARD_INFO { 77 AllocationSize: LARGE_INTEGER, 78 EndOfFile: LARGE_INTEGER, 79 NumberOfLinks: DWORD, 80 DeletePending: BOOLEAN, 81 Directory: BOOLEAN, 82 }} 83 STRUCT!{struct FILE_NAME_INFO { 84 FileNameLength: DWORD, 85 FileName: [WCHAR; 1], 86 }} 87 STRUCT!{struct FILE_RENAME_INFO { 88 ReplaceIfExists: BOOL, 89 RootDirectory: HANDLE, 90 FileNameLength: DWORD, 91 FileName: [WCHAR; 1], 92 }} 93 STRUCT!{struct FILE_DISPOSITION_INFO { 94 DeleteFile: BOOLEAN, 95 }} 96 STRUCT!{struct FILE_ALLOCATION_INFO { 97 AllocationSize: LARGE_INTEGER, 98 }} 99 STRUCT!{struct FILE_END_OF_FILE_INFO { 100 EndOfFile: LARGE_INTEGER, 101 }} 102 STRUCT!{struct FILE_STREAM_INFO { 103 NextEntryOffset: DWORD, 104 StreamNameLength: DWORD, 105 StreamSize: LARGE_INTEGER, 106 StreamAllocationSize: LARGE_INTEGER, 107 StreamName: [WCHAR; 1], 108 }} 109 STRUCT!{struct FILE_COMPRESSION_INFO { 110 CompressedFileSize: LARGE_INTEGER, 111 CompressionFormat: WORD, 112 CompressionUnitShift: UCHAR, 113 ChunkShift: UCHAR, 114 ClusterShift: UCHAR, 115 Reserved: [UCHAR; 3], 116 }} 117 STRUCT!{struct FILE_ATTRIBUTE_TAG_INFO { 118 NextEntryOffset: DWORD, 119 ReparseTag: DWORD, 120 }} 121 STRUCT!{struct FILE_ID_BOTH_DIR_INFO { 122 NextEntryOffset: DWORD, 123 FileIndex: DWORD, 124 CreationTime: LARGE_INTEGER, 125 LastAccessTime: LARGE_INTEGER, 126 LastWriteTime: LARGE_INTEGER, 127 ChangeTime: LARGE_INTEGER, 128 EndOfFile: LARGE_INTEGER, 129 AllocationSize: LARGE_INTEGER, 130 FileAttributes: DWORD, 131 FileNameLength: DWORD, 132 EaSize: DWORD, 133 ShortNameLength: CCHAR, 134 ShortName: [WCHAR; 12], 135 FileId: LARGE_INTEGER, 136 FileName: [WCHAR; 1], 137 }} 138 STRUCT!{struct FILE_IO_PRIORITY_HINT_INFO { 139 PriorityHint: PRIORITY_HINT, 140 }} 141 STRUCT!{struct FILE_FULL_DIR_INFO { 142 NextEntryOffset: ULONG, 143 FileIndex: ULONG, 144 CreationTime: LARGE_INTEGER, 145 LastAccessTime: LARGE_INTEGER, 146 LastWriteTime: LARGE_INTEGER, 147 ChangeTime: LARGE_INTEGER, 148 EndOfFile: LARGE_INTEGER, 149 AllocationSize: LARGE_INTEGER, 150 FileAttributes: ULONG, 151 FileNameLength: ULONG, 152 EaSize: ULONG, 153 FileName: [WCHAR; 1], 154 }} 155 STRUCT!{struct FILE_STORAGE_INFO { 156 LogicalBytesPerSector: ULONG, 157 PhysicalBytesPerSectorForAtomicity: ULONG, 158 PhysicalBytesPerSectorForPerformance: ULONG, 159 FileSystemEffectivePhysicalBytesPerSectorForAtomicity: ULONG, 160 Flags: ULONG, 161 ByteOffsetForSectorAlignment: ULONG, 162 ByteOffsetForPartitionAlignment: ULONG, 163 }} 164 STRUCT!{struct FILE_ALIGNMENT_INFO { 165 AlignmentRequirement: ULONG, 166 }} 167 STRUCT!{struct FILE_ID_INFO { 168 VolumeSerialNumber: ULONGLONG, 169 FileId: FILE_ID_128, 170 }} 171 extern "system" { CompareFileTime( lpFileTime1: *const FILETIME, lpFileTime2: *const FILETIME ) -> LONG172 pub fn CompareFileTime( 173 lpFileTime1: *const FILETIME, 174 lpFileTime2: *const FILETIME 175 ) -> LONG; CreateDirectoryA( lpPathName: LPCSTR, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, ) -> BOOL176 pub fn CreateDirectoryA( 177 lpPathName: LPCSTR, 178 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 179 ) -> BOOL; CreateDirectoryW( lpPathName: LPCWSTR, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, ) -> BOOL180 pub fn CreateDirectoryW( 181 lpPathName: LPCWSTR, 182 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 183 ) -> BOOL; CreateFileA( lpFileName: LPCSTR, dwDesiredAccess: DWORD, dwShareMode: DWORD, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, dwCreationDisposition: DWORD, dwFlagsAndAttributes: DWORD, hTemplateFile: HANDLE, ) -> HANDLE184 pub fn CreateFileA( 185 lpFileName: LPCSTR, 186 dwDesiredAccess: DWORD, 187 dwShareMode: DWORD, 188 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 189 dwCreationDisposition: DWORD, 190 dwFlagsAndAttributes: DWORD, 191 hTemplateFile: HANDLE, 192 ) -> HANDLE; CreateFileW( lpFileName: LPCWSTR, dwDesiredAccess: DWORD, dwShareMode: DWORD, lpSecurityAttributes: LPSECURITY_ATTRIBUTES, dwCreationDisposition: DWORD, dwFlagsAndAttributes: DWORD, hTemplateFile: HANDLE, ) -> HANDLE193 pub fn CreateFileW( 194 lpFileName: LPCWSTR, 195 dwDesiredAccess: DWORD, 196 dwShareMode: DWORD, 197 lpSecurityAttributes: LPSECURITY_ATTRIBUTES, 198 dwCreationDisposition: DWORD, 199 dwFlagsAndAttributes: DWORD, 200 hTemplateFile: HANDLE, 201 ) -> HANDLE; DefineDosDeviceW( dwFlags: DWORD, lpDeviceName: LPCWSTR, lpTargetPath: LPCWSTR ) -> BOOL202 pub fn DefineDosDeviceW( 203 dwFlags: DWORD, 204 lpDeviceName: LPCWSTR, 205 lpTargetPath: LPCWSTR 206 ) -> BOOL; DeleteFileA( lpFileName: LPCSTR ) -> BOOL207 pub fn DeleteFileA( 208 lpFileName: LPCSTR 209 ) -> BOOL; DeleteFileW( lpFileName: LPCWSTR ) -> BOOL210 pub fn DeleteFileW( 211 lpFileName: LPCWSTR 212 ) -> BOOL; DeleteVolumeMountPointW( lpszVolumeMountPoint: LPCWSTR ) -> BOOL213 pub fn DeleteVolumeMountPointW( 214 lpszVolumeMountPoint: LPCWSTR 215 ) -> BOOL; FileTimeToLocalFileTime( lpFileTime: *const FILETIME, lpLocalFileTime: LPFILETIME, ) -> BOOL216 pub fn FileTimeToLocalFileTime( 217 lpFileTime: *const FILETIME, 218 lpLocalFileTime: LPFILETIME, 219 ) -> BOOL; FindClose( hFindFile: HANDLE ) -> BOOL220 pub fn FindClose( 221 hFindFile: HANDLE 222 ) -> BOOL; FindCloseChangeNotification( hChangeHandle: HANDLE ) -> BOOL223 pub fn FindCloseChangeNotification( 224 hChangeHandle: HANDLE 225 ) -> BOOL; FindFirstChangeNotificationA( lpPathName: LPCSTR, bWatchSubtree: BOOL, dwNotifyFilter: DWORD, ) -> HANDLE226 pub fn FindFirstChangeNotificationA( 227 lpPathName: LPCSTR, 228 bWatchSubtree: BOOL, 229 dwNotifyFilter: DWORD, 230 ) -> HANDLE; FindFirstChangeNotificationW( lpPathName: LPCWSTR, bWatchSubtree: BOOL, dwNotifyFilter: DWORD, ) -> HANDLE231 pub fn FindFirstChangeNotificationW( 232 lpPathName: LPCWSTR, 233 bWatchSubtree: BOOL, 234 dwNotifyFilter: DWORD, 235 ) -> HANDLE; FindFirstFileA( lpFileName: LPCSTR, lpFindFileData: LPWIN32_FIND_DATAA ) -> HANDLE236 pub fn FindFirstFileA( 237 lpFileName: LPCSTR, 238 lpFindFileData: LPWIN32_FIND_DATAA 239 ) -> HANDLE; FindFirstFileW( lpFileName: LPCWSTR, lpFindFileData: LPWIN32_FIND_DATAW ) -> HANDLE240 pub fn FindFirstFileW( 241 lpFileName: LPCWSTR, 242 lpFindFileData: LPWIN32_FIND_DATAW 243 ) -> HANDLE; FindFirstFileExA( lpFileName: LPCSTR, fInfoLevelId: FINDEX_INFO_LEVELS, lpFindFileData: LPVOID, fSearchOp: FINDEX_SEARCH_OPS, lpSearchFilter: LPVOID, dwAdditionalFlags: DWORD, ) -> HANDLE244 pub fn FindFirstFileExA( 245 lpFileName: LPCSTR, 246 fInfoLevelId: FINDEX_INFO_LEVELS, 247 lpFindFileData: LPVOID, 248 fSearchOp: FINDEX_SEARCH_OPS, 249 lpSearchFilter: LPVOID, 250 dwAdditionalFlags: DWORD, 251 ) -> HANDLE; FindFirstFileExW( lpFileName: LPCWSTR, fInfoLevelId: FINDEX_INFO_LEVELS, lpFindFileData: LPVOID, fSearchOp: FINDEX_SEARCH_OPS, lpSearchFilter: LPVOID, dwAdditionalFlags: DWORD, ) -> HANDLE252 pub fn FindFirstFileExW( 253 lpFileName: LPCWSTR, 254 fInfoLevelId: FINDEX_INFO_LEVELS, 255 lpFindFileData: LPVOID, 256 fSearchOp: FINDEX_SEARCH_OPS, 257 lpSearchFilter: LPVOID, 258 dwAdditionalFlags: DWORD, 259 ) -> HANDLE; FindFirstVolumeW( lpszVolumeName: LPWSTR, cchBufferLength: DWORD ) -> HANDLE260 pub fn FindFirstVolumeW( 261 lpszVolumeName: LPWSTR, 262 cchBufferLength: DWORD 263 ) -> HANDLE; FindNextChangeNotification( hChangeHandle: HANDLE ) -> BOOL264 pub fn FindNextChangeNotification( 265 hChangeHandle: HANDLE 266 ) -> BOOL; FindNextFileA( hFindFile: HANDLE, lpFindFileData: LPWIN32_FIND_DATAA ) -> BOOL267 pub fn FindNextFileA( 268 hFindFile: HANDLE, 269 lpFindFileData: LPWIN32_FIND_DATAA 270 ) -> BOOL; FindNextFileW( hFindFile: HANDLE, lpFindFileData: LPWIN32_FIND_DATAW ) -> BOOL271 pub fn FindNextFileW( 272 hFindFile: HANDLE, 273 lpFindFileData: LPWIN32_FIND_DATAW 274 ) -> BOOL; FindNextVolumeW( hFindVolume: HANDLE, lpszVolumeName: LPWSTR, cchBufferLength: DWORD, ) -> BOOL275 pub fn FindNextVolumeW( 276 hFindVolume: HANDLE, 277 lpszVolumeName: LPWSTR, 278 cchBufferLength: DWORD, 279 ) -> BOOL; FindVolumeClose( hFindVolume: HANDLE ) -> BOOL280 pub fn FindVolumeClose( 281 hFindVolume: HANDLE 282 ) -> BOOL; FlushFileBuffers( hFile: HANDLE ) -> BOOL283 pub fn FlushFileBuffers( 284 hFile: HANDLE 285 ) -> BOOL; GetDiskFreeSpaceA( lpRootPathName: LPCSTR, lpSectorsPerCluster: LPDWORD, lpBytesPerSector: LPDWORD, lpNumberOfFreeClusters: LPDWORD, lpTotalNumberOfClusters: LPDWORD, ) -> BOOL286 pub fn GetDiskFreeSpaceA( 287 lpRootPathName: LPCSTR, 288 lpSectorsPerCluster: LPDWORD, 289 lpBytesPerSector: LPDWORD, 290 lpNumberOfFreeClusters: LPDWORD, 291 lpTotalNumberOfClusters: LPDWORD, 292 ) -> BOOL; GetDiskFreeSpaceW( lpRootPathName: LPCWSTR, lpSectorsPerCluster: LPDWORD, lpBytesPerSector: LPDWORD, lpNumberOfFreeClusters: LPDWORD, lpTotalNumberOfClusters: LPDWORD, ) -> BOOL293 pub fn GetDiskFreeSpaceW( 294 lpRootPathName: LPCWSTR, 295 lpSectorsPerCluster: LPDWORD, 296 lpBytesPerSector: LPDWORD, 297 lpNumberOfFreeClusters: LPDWORD, 298 lpTotalNumberOfClusters: LPDWORD, 299 ) -> BOOL; GetDiskFreeSpaceExA( lpDirectoryName: LPCSTR, lpFreeBytesAvailableToCaller: PULARGE_INTEGER, lpTotalNumberOfBytes: PULARGE_INTEGER, lpTotalNumberOfFreeBytes: PULARGE_INTEGER, ) -> BOOL300 pub fn GetDiskFreeSpaceExA( 301 lpDirectoryName: LPCSTR, 302 lpFreeBytesAvailableToCaller: PULARGE_INTEGER, 303 lpTotalNumberOfBytes: PULARGE_INTEGER, 304 lpTotalNumberOfFreeBytes: PULARGE_INTEGER, 305 ) -> BOOL; GetDiskFreeSpaceExW( lpDirectoryName: LPCWSTR, lpFreeBytesAvailableToCaller: PULARGE_INTEGER, lpTotalNumberOfBytes: PULARGE_INTEGER, lpTotalNumberOfFreeBytes: PULARGE_INTEGER, ) -> BOOL306 pub fn GetDiskFreeSpaceExW( 307 lpDirectoryName: LPCWSTR, 308 lpFreeBytesAvailableToCaller: PULARGE_INTEGER, 309 lpTotalNumberOfBytes: PULARGE_INTEGER, 310 lpTotalNumberOfFreeBytes: PULARGE_INTEGER, 311 ) -> BOOL; GetDriveTypeA( lpRootPathName: LPCSTR ) -> UINT312 pub fn GetDriveTypeA( 313 lpRootPathName: LPCSTR 314 ) -> UINT; GetDriveTypeW( lpRootPathName: LPCWSTR ) -> UINT315 pub fn GetDriveTypeW( 316 lpRootPathName: LPCWSTR 317 ) -> UINT; GetFileAttributesA( lpFileName: LPCSTR ) -> DWORD318 pub fn GetFileAttributesA( 319 lpFileName: LPCSTR 320 ) -> DWORD; GetFileAttributesW( lpFileName: LPCWSTR ) -> DWORD321 pub fn GetFileAttributesW( 322 lpFileName: LPCWSTR 323 ) -> DWORD; GetFileAttributesExA( lpFileName: LPCSTR, fInfoLevelId: GET_FILEEX_INFO_LEVELS, lpFileInformation: LPVOID, ) -> BOOL324 pub fn GetFileAttributesExA( 325 lpFileName: LPCSTR, 326 fInfoLevelId: GET_FILEEX_INFO_LEVELS, 327 lpFileInformation: LPVOID, 328 ) -> BOOL; GetFileAttributesExW( lpFileName: LPCWSTR, fInfoLevelId: GET_FILEEX_INFO_LEVELS, lpFileInformation: LPVOID, ) -> BOOL329 pub fn GetFileAttributesExW( 330 lpFileName: LPCWSTR, 331 fInfoLevelId: GET_FILEEX_INFO_LEVELS, 332 lpFileInformation: LPVOID, 333 ) -> BOOL; GetFileInformationByHandle( hFile: HANDLE, lpFileInformation: LPBY_HANDLE_FILE_INFORMATION, ) -> BOOL334 pub fn GetFileInformationByHandle( 335 hFile: HANDLE, 336 lpFileInformation: LPBY_HANDLE_FILE_INFORMATION, 337 ) -> BOOL; GetFileSize( hFile: HANDLE, lpFileSizeHigh: LPDWORD ) -> DWORD338 pub fn GetFileSize( 339 hFile: HANDLE, 340 lpFileSizeHigh: LPDWORD 341 ) -> DWORD; GetFileSizeEx( hFile: HANDLE, lpFileSize: PLARGE_INTEGER ) -> BOOL342 pub fn GetFileSizeEx( 343 hFile: HANDLE, 344 lpFileSize: PLARGE_INTEGER 345 ) -> BOOL; GetFileType( hFile: HANDLE ) -> DWORD346 pub fn GetFileType( 347 hFile: HANDLE 348 ) -> DWORD; GetFinalPathNameByHandleA( hFile: HANDLE, lpszFilePath: LPSTR, cchFilePath: DWORD, dwFlags: DWORD, ) -> DWORD349 pub fn GetFinalPathNameByHandleA( 350 hFile: HANDLE, 351 lpszFilePath: LPSTR, 352 cchFilePath: DWORD, 353 dwFlags: DWORD, 354 ) -> DWORD; GetFinalPathNameByHandleW( hFile: HANDLE, lpszFilePath: LPWSTR, cchFilePath: DWORD, dwFlags: DWORD, ) -> DWORD355 pub fn GetFinalPathNameByHandleW( 356 hFile: HANDLE, 357 lpszFilePath: LPWSTR, 358 cchFilePath: DWORD, 359 dwFlags: DWORD, 360 ) -> DWORD; GetFileTime( hFile: HANDLE, lpCreationTime: LPFILETIME, lpLastAccessTime: LPFILETIME, lpLastWriteTime: LPFILETIME, ) -> BOOL361 pub fn GetFileTime( 362 hFile: HANDLE, 363 lpCreationTime: LPFILETIME, 364 lpLastAccessTime: LPFILETIME, 365 lpLastWriteTime: LPFILETIME, 366 ) -> BOOL; GetFullPathNameW( lpFileName: LPCWSTR, nBufferLength: DWORD, lpBuffer: LPWSTR, lpFilePart: *mut LPWSTR, ) -> DWORD367 pub fn GetFullPathNameW( 368 lpFileName: LPCWSTR, 369 nBufferLength: DWORD, 370 lpBuffer: LPWSTR, 371 lpFilePart: *mut LPWSTR, 372 ) -> DWORD; GetFullPathNameA( lpFileName: LPCSTR, nBufferLength: DWORD, lpBuffer: LPSTR, lpFilePart: *mut LPSTR, ) -> DWORD373 pub fn GetFullPathNameA( 374 lpFileName: LPCSTR, 375 nBufferLength: DWORD, 376 lpBuffer: LPSTR, 377 lpFilePart: *mut LPSTR, 378 ) -> DWORD; GetLogicalDrives() -> DWORD379 pub fn GetLogicalDrives() -> DWORD; GetLogicalDriveStringsW( nBufferLength: DWORD, lpBuffer: LPWSTR ) -> DWORD380 pub fn GetLogicalDriveStringsW( 381 nBufferLength: DWORD, 382 lpBuffer: LPWSTR 383 ) -> DWORD; GetLongPathNameA( lpszShortPath: LPCSTR, lpszLongPath: LPSTR, cchBuffer: DWORD ) -> DWORD384 pub fn GetLongPathNameA( 385 lpszShortPath: LPCSTR, 386 lpszLongPath: LPSTR, 387 cchBuffer: DWORD 388 ) -> DWORD; GetLongPathNameW( lpszShortPath: LPCWSTR, lpszLongPath: LPWSTR, cchBuffer: DWORD, ) -> DWORD389 pub fn GetLongPathNameW( 390 lpszShortPath: LPCWSTR, 391 lpszLongPath: LPWSTR, 392 cchBuffer: DWORD, 393 ) -> DWORD; GetShortPathNameW( lpszLongPath: LPCWSTR, lpszShortPath: LPWSTR, cchBuffer: DWORD, ) -> DWORD394 pub fn GetShortPathNameW( 395 lpszLongPath: LPCWSTR, 396 lpszShortPath: LPWSTR, 397 cchBuffer: DWORD, 398 ) -> DWORD; GetTempFileNameW( lpPathName: LPCWSTR, lpPrefixString: LPCWSTR, uUnique: UINT, lpTempFileName: LPWSTR, ) -> UINT399 pub fn GetTempFileNameW( 400 lpPathName: LPCWSTR, 401 lpPrefixString: LPCWSTR, 402 uUnique: UINT, 403 lpTempFileName: LPWSTR, 404 ) -> UINT; GetVolumeInformationByHandleW( hFile: HANDLE, lpVolumeNameBuffer: LPWSTR, nVolumeNameSize: DWORD, lpVolumeSerialNumber: LPDWORD, lpMaximumComponentLength: LPDWORD, lpFileSystemFlags: LPDWORD, lpFileSystemNameBuffer: LPWSTR, nFileSystemNameSize: DWORD, ) -> BOOL405 pub fn GetVolumeInformationByHandleW( 406 hFile: HANDLE, 407 lpVolumeNameBuffer: LPWSTR, 408 nVolumeNameSize: DWORD, 409 lpVolumeSerialNumber: LPDWORD, 410 lpMaximumComponentLength: LPDWORD, 411 lpFileSystemFlags: LPDWORD, 412 lpFileSystemNameBuffer: LPWSTR, 413 nFileSystemNameSize: DWORD, 414 ) -> BOOL; GetVolumeInformationW( lpRootPathName: LPCWSTR, lpVolumeNameBuffer: LPWSTR, nVolumeNameSize: DWORD, lpVolumeSerialNumber: LPDWORD, lpMaximumComponentLength: LPDWORD, lpFileSystemFlags: LPDWORD, lpFileSystemNameBuffer: LPWSTR, nFileSystemNameSize: DWORD, ) -> BOOL415 pub fn GetVolumeInformationW( 416 lpRootPathName: LPCWSTR, 417 lpVolumeNameBuffer: LPWSTR, 418 nVolumeNameSize: DWORD, 419 lpVolumeSerialNumber: LPDWORD, 420 lpMaximumComponentLength: LPDWORD, 421 lpFileSystemFlags: LPDWORD, 422 lpFileSystemNameBuffer: LPWSTR, 423 nFileSystemNameSize: DWORD, 424 ) -> BOOL; GetVolumePathNameW( lpszFileName: LPCWSTR, lpszVolumePathName: LPWSTR, cchBufferLength: DWORD, ) -> BOOL425 pub fn GetVolumePathNameW( 426 lpszFileName: LPCWSTR, 427 lpszVolumePathName: LPWSTR, 428 cchBufferLength: DWORD, 429 ) -> BOOL; LocalFileTimeToFileTime( lpLocalFileTime: *const FILETIME, lpFileTime: LPFILETIME, ) -> BOOL430 pub fn LocalFileTimeToFileTime( 431 lpLocalFileTime: *const FILETIME, 432 lpFileTime: LPFILETIME, 433 ) -> BOOL; LockFile( hFile: HANDLE, dwFileOffsetLow: DWORD, dwFileOffsetHigh: DWORD, nNumberOfBytesToLockLow: DWORD, nNumberOfBytesToLockHigh: DWORD, ) -> BOOL434 pub fn LockFile( 435 hFile: HANDLE, 436 dwFileOffsetLow: DWORD, 437 dwFileOffsetHigh: DWORD, 438 nNumberOfBytesToLockLow: DWORD, 439 nNumberOfBytesToLockHigh: DWORD, 440 ) -> BOOL; LockFileEx( hFile: HANDLE, dwFlags: DWORD, dwReserved: DWORD, nNumberOfBytesToLockLow: DWORD, nNumberOfBytesToLockHigh: DWORD, lpOverlapped: LPOVERLAPPED, ) -> BOOL441 pub fn LockFileEx( 442 hFile: HANDLE, 443 dwFlags: DWORD, 444 dwReserved: DWORD, 445 nNumberOfBytesToLockLow: DWORD, 446 nNumberOfBytesToLockHigh: DWORD, 447 lpOverlapped: LPOVERLAPPED, 448 ) -> BOOL; QueryDosDeviceW( lpDeviceName: LPCWSTR, lpTargetPath: LPWSTR, ucchMax: DWORD ) -> DWORD449 pub fn QueryDosDeviceW( 450 lpDeviceName: LPCWSTR, 451 lpTargetPath: LPWSTR, 452 ucchMax: DWORD 453 ) -> DWORD; ReadFile( hFile: HANDLE, lpBuffer: LPVOID, nNumberOfBytesToRead: DWORD, lpNumberOfBytesRead: LPDWORD, lpOverlapped: LPOVERLAPPED, ) -> BOOL454 pub fn ReadFile( 455 hFile: HANDLE, 456 lpBuffer: LPVOID, 457 nNumberOfBytesToRead: DWORD, 458 lpNumberOfBytesRead: LPDWORD, 459 lpOverlapped: LPOVERLAPPED, 460 ) -> BOOL; ReadFileEx( hFile: HANDLE, lpBuffer: LPVOID, nNumberOfBytesToRead: DWORD, lpOverlapped: LPOVERLAPPED, lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE, ) -> BOOL461 pub fn ReadFileEx( 462 hFile: HANDLE, 463 lpBuffer: LPVOID, 464 nNumberOfBytesToRead: DWORD, 465 lpOverlapped: LPOVERLAPPED, 466 lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE, 467 ) -> BOOL; ReadFileScatter( hFile: HANDLE, aSegmentArray: *mut FILE_SEGMENT_ELEMENT, nNumberOfBytesToRead: DWORD, lpReserved: LPDWORD, lpOverlapped: LPOVERLAPPED, ) -> BOOL468 pub fn ReadFileScatter( 469 hFile: HANDLE, 470 aSegmentArray: *mut FILE_SEGMENT_ELEMENT, 471 nNumberOfBytesToRead: DWORD, 472 lpReserved: LPDWORD, 473 lpOverlapped: LPOVERLAPPED, 474 ) -> BOOL; RemoveDirectoryA( lpPathName: LPCSTR ) -> BOOL475 pub fn RemoveDirectoryA( 476 lpPathName: LPCSTR 477 ) -> BOOL; RemoveDirectoryW( lpPathName: LPCWSTR ) -> BOOL478 pub fn RemoveDirectoryW( 479 lpPathName: LPCWSTR 480 ) -> BOOL; SetEndOfFile( hFile: HANDLE ) -> BOOL481 pub fn SetEndOfFile( 482 hFile: HANDLE 483 ) -> BOOL; SetFileAttributesA( lpFileName: LPCSTR, dwFileAttributes: DWORD ) -> BOOL484 pub fn SetFileAttributesA( 485 lpFileName: LPCSTR, 486 dwFileAttributes: DWORD 487 ) -> BOOL; SetFileAttributesW( lpFileName: LPCWSTR, dwFileAttributes: DWORD ) -> BOOL488 pub fn SetFileAttributesW( 489 lpFileName: LPCWSTR, 490 dwFileAttributes: DWORD 491 ) -> BOOL; SetFileInformationByHandle( hFile: HANDLE, FileInformationClass: FILE_INFO_BY_HANDLE_CLASS, lpFileInformation: LPVOID, dwBufferSize: DWORD, ) -> BOOL492 pub fn SetFileInformationByHandle( 493 hFile: HANDLE, 494 FileInformationClass: FILE_INFO_BY_HANDLE_CLASS, 495 lpFileInformation: LPVOID, 496 dwBufferSize: DWORD, 497 ) -> BOOL; SetFilePointer( hFile: HANDLE, lDistanceToMove: LONG, lpDistanceToMoveHigh: PLONG, dwMoveMethod: DWORD, ) -> DWORD498 pub fn SetFilePointer( 499 hFile: HANDLE, 500 lDistanceToMove: LONG, 501 lpDistanceToMoveHigh: PLONG, 502 dwMoveMethod: DWORD, 503 ) -> DWORD; SetFilePointerEx( hFile: HANDLE, liDistanceToMove: LARGE_INTEGER, lpNewFilePointer: PLARGE_INTEGER, dwMoveMethod: DWORD, ) -> BOOL504 pub fn SetFilePointerEx( 505 hFile: HANDLE, 506 liDistanceToMove: LARGE_INTEGER, 507 lpNewFilePointer: PLARGE_INTEGER, 508 dwMoveMethod: DWORD, 509 ) -> BOOL; SetFileTime( hFile: HANDLE, lpCreationTime: *const FILETIME, lpLastAccessTime: *const FILETIME, lpLastWriteTime: *const FILETIME, ) -> BOOL510 pub fn SetFileTime( 511 hFile: HANDLE, 512 lpCreationTime: *const FILETIME, 513 lpLastAccessTime: *const FILETIME, 514 lpLastWriteTime: *const FILETIME, 515 ) -> BOOL; SetFileValidData( hFile: HANDLE, ValidDataLength: LONGLONG ) -> BOOL516 pub fn SetFileValidData( 517 hFile: HANDLE, 518 ValidDataLength: LONGLONG 519 ) -> BOOL; UnlockFile( hFile: HANDLE, dwFileOffsetLow: DWORD, dwFileOffsetHigh: DWORD, nNumberOfBytesToUnlockLow: DWORD, nNumberOfBytesToUnlockHigh: DWORD, ) -> BOOL520 pub fn UnlockFile( 521 hFile: HANDLE, 522 dwFileOffsetLow: DWORD, 523 dwFileOffsetHigh: DWORD, 524 nNumberOfBytesToUnlockLow: DWORD, 525 nNumberOfBytesToUnlockHigh: DWORD, 526 ) -> BOOL; UnlockFileEx( hFile: HANDLE, dwReserved: DWORD, nNumberOfBytesToUnlockLow: DWORD, nNumberOfBytesToUnlockHigh: DWORD, lpOverlapped: LPOVERLAPPED, ) -> BOOL527 pub fn UnlockFileEx( 528 hFile: HANDLE, 529 dwReserved: DWORD, 530 nNumberOfBytesToUnlockLow: DWORD, 531 nNumberOfBytesToUnlockHigh: DWORD, 532 lpOverlapped: LPOVERLAPPED, 533 ) -> BOOL; WriteFile( hFile: HANDLE, lpBuffer: LPCVOID, nNumberOfBytesToWrite: DWORD, lpNumberOfBytesWritten: LPDWORD, lpOverlapped: LPOVERLAPPED, ) -> BOOL534 pub fn WriteFile( 535 hFile: HANDLE, 536 lpBuffer: LPCVOID, 537 nNumberOfBytesToWrite: DWORD, 538 lpNumberOfBytesWritten: LPDWORD, 539 lpOverlapped: LPOVERLAPPED, 540 ) -> BOOL; WriteFileEx( hFile: HANDLE, lpBuffer: LPCVOID, nNumberOfBytesToWrite: DWORD, lpOverlapped: LPOVERLAPPED, lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE, ) -> BOOL541 pub fn WriteFileEx( 542 hFile: HANDLE, 543 lpBuffer: LPCVOID, 544 nNumberOfBytesToWrite: DWORD, 545 lpOverlapped: LPOVERLAPPED, 546 lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE, 547 ) -> BOOL; WriteFileGather( hFile: HANDLE, aSegmentArray: *mut FILE_SEGMENT_ELEMENT, nNumberOfBytesToWrite: DWORD, lpReserved: LPDWORD, lpOverlapped: LPOVERLAPPED, ) -> BOOL548 pub fn WriteFileGather( 549 hFile: HANDLE, 550 aSegmentArray: *mut FILE_SEGMENT_ELEMENT, 551 nNumberOfBytesToWrite: DWORD, 552 lpReserved: LPDWORD, 553 lpOverlapped: LPOVERLAPPED, 554 ) -> BOOL; GetTempPathW( nBufferLength: DWORD, lpBuffer: LPWSTR ) -> DWORD555 pub fn GetTempPathW( 556 nBufferLength: DWORD, 557 lpBuffer: LPWSTR 558 ) -> DWORD; GetVolumeNameForVolumeMountPointW( lpszVolumeMountPoint: LPCWSTR, lpszVolumeName: LPWSTR, cchBufferLength: DWORD, ) -> BOOL559 pub fn GetVolumeNameForVolumeMountPointW( 560 lpszVolumeMountPoint: LPCWSTR, 561 lpszVolumeName: LPWSTR, 562 cchBufferLength: DWORD, 563 ) -> BOOL; GetVolumePathNamesForVolumeNameW( lpszVolumeName: LPCWSTR, lpszVolumePathNames: LPWCH, cchBufferLength: DWORD, lpcchReturnLength: PDWORD, ) -> BOOL564 pub fn GetVolumePathNamesForVolumeNameW( 565 lpszVolumeName: LPCWSTR, 566 lpszVolumePathNames: LPWCH, 567 cchBufferLength: DWORD, 568 lpcchReturnLength: PDWORD, 569 ) -> BOOL; CreateFile2( lpFileName: LPCWSTR, dwDesiredAccess: DWORD, dwShareMode: DWORD, dwCreationDisposition: DWORD, pCreateExParams: LPCREATEFILE2_EXTENDED_PARAMETERS, ) -> HANDLE570 pub fn CreateFile2( 571 lpFileName: LPCWSTR, 572 dwDesiredAccess: DWORD, 573 dwShareMode: DWORD, 574 dwCreationDisposition: DWORD, 575 pCreateExParams: LPCREATEFILE2_EXTENDED_PARAMETERS, 576 ) -> HANDLE; SetFileIoOverlappedRange( FileHandle: HANDLE, OverlappedRangeStart: PUCHAR, Length: ULONG, ) -> BOOL577 pub fn SetFileIoOverlappedRange( 578 FileHandle: HANDLE, 579 OverlappedRangeStart: PUCHAR, 580 Length: ULONG, 581 ) -> BOOL; GetCompressedFileSizeA( lpFileName: LPCSTR, lpFileSizeHigh: LPDWORD ) -> DWORD582 pub fn GetCompressedFileSizeA( 583 lpFileName: LPCSTR, 584 lpFileSizeHigh: LPDWORD 585 ) -> DWORD; GetCompressedFileSizeW( lpFileName: LPCWSTR, lpFileSizeHigh: LPDWORD ) -> DWORD586 pub fn GetCompressedFileSizeW( 587 lpFileName: LPCWSTR, 588 lpFileSizeHigh: LPDWORD 589 ) -> DWORD; 590 } 591 ENUM!{enum STREAM_INFO_LEVELS { 592 FindStreamInfoStandard, 593 FindStreamInfoMaxInfoLevel, 594 }} 595 extern "system" { FindFirstStreamW( lpFileName: LPCWSTR, InfoLevel: STREAM_INFO_LEVELS, lpFindStreamData: LPVOID, dwFlags: DWORD, ) -> HANDLE596 pub fn FindFirstStreamW( 597 lpFileName: LPCWSTR, 598 InfoLevel: STREAM_INFO_LEVELS, 599 lpFindStreamData: LPVOID, 600 dwFlags: DWORD, 601 ) -> HANDLE; FindNextStreamW( hFindStream: HANDLE, lpFindStreamData: LPVOID ) -> BOOL602 pub fn FindNextStreamW( 603 hFindStream: HANDLE, 604 lpFindStreamData: LPVOID 605 ) -> BOOL; AreFileApisANSI() -> BOOL606 pub fn AreFileApisANSI() -> BOOL; GetTempPathA( nBufferLength: DWORD, lpBuffer: LPSTR ) -> DWORD607 pub fn GetTempPathA( 608 nBufferLength: DWORD, 609 lpBuffer: LPSTR 610 ) -> DWORD; FindFirstFileNameW( lpFileName: LPCWSTR, dwFlags: DWORD, StringLength: LPDWORD, LinkName: PWSTR, ) -> HANDLE611 pub fn FindFirstFileNameW( 612 lpFileName: LPCWSTR, 613 dwFlags: DWORD, 614 StringLength: LPDWORD, 615 LinkName: PWSTR, 616 ) -> HANDLE; FindNextFileNameW( hFindStream: HANDLE, StringLength: LPDWORD, LinkName: PWSTR ) -> BOOL617 pub fn FindNextFileNameW( 618 hFindStream: HANDLE, 619 StringLength: LPDWORD, 620 LinkName: PWSTR 621 ) -> BOOL; GetVolumeInformationA( lpRootPathName: LPCSTR, lpVolumeNameBuffer: LPSTR, nVolumeNameSize: DWORD, lpVolumeSerialNumber: LPDWORD, lpMaximumComponentLength: LPDWORD, lpFileSystemFlags: LPDWORD, lpFileSystemNameBuffer: LPSTR, nFileSystemNameSize: DWORD, ) -> BOOL622 pub fn GetVolumeInformationA( 623 lpRootPathName: LPCSTR, 624 lpVolumeNameBuffer: LPSTR, 625 nVolumeNameSize: DWORD, 626 lpVolumeSerialNumber: LPDWORD, 627 lpMaximumComponentLength: LPDWORD, 628 lpFileSystemFlags: LPDWORD, 629 lpFileSystemNameBuffer: LPSTR, 630 nFileSystemNameSize: DWORD, 631 ) -> BOOL; GetTempFileNameA( lpPathName: LPCSTR, lpPrefixString: LPCSTR, uUnique: UINT, lpTempFileName: LPSTR, ) -> UINT632 pub fn GetTempFileNameA( 633 lpPathName: LPCSTR, 634 lpPrefixString: LPCSTR, 635 uUnique: UINT, 636 lpTempFileName: LPSTR, 637 ) -> UINT; SetFileApisToOEM()638 pub fn SetFileApisToOEM(); SetFileApisToANSI()639 pub fn SetFileApisToANSI(); 640 } 641