github.com/searKing/golang/go@v1.2.74/os/signal/cgo/include/boost/winapi/file_management.hpp (about)

     1  /*
     2   * Copyright 2010 Vicente J. Botet Escriba
     3   * Copyright 2015 Andrey Semashev
     4   * Copyright 2016 Jorge Lodos
     5   * Copyright 2017 James E. King, III
     6   *
     7   * Distributed under the Boost Software License, Version 1.0.
     8   * See http://www.boost.org/LICENSE_1_0.txt
     9   */
    10  
    11  #ifndef BOOST_WINAPI_FILE_MANAGEMENT_HPP_INCLUDED_
    12  #define BOOST_WINAPI_FILE_MANAGEMENT_HPP_INCLUDED_
    13  
    14  #include <boost/winapi/basic_types.hpp>
    15  #include <boost/winapi/limits.hpp>
    16  #include <boost/winapi/time.hpp>
    17  #include <boost/winapi/overlapped.hpp>
    18  
    19  #ifdef BOOST_HAS_PRAGMA_ONCE
    20  #pragma once
    21  #endif
    22  
    23  /*
    24   * UWP:
    25   * API                         SDK 8     SDK 10            _WIN32_WINNT
    26   * AreFileApisANSI             DESKTOP - DESKTOP | SYSTEM
    27   * CreateFile                  DESKTOP - DESKTOP | SYSTEM
    28   * DeleteFile                  APP     - APP     | SYSTEM
    29   * FindClose                   APP     - APP     | SYSTEM
    30   * FindFirstFile               DESKTOP > APP     | SYSTEM
    31   * FindNextFile                DESKTOP > APP     | SYSTEM
    32   * GetFileAttributes           DESKTOP > APP     | SYSTEM
    33   * GetFileInformationByHandle  DESKTOP - DESKTOP | SYSTEM
    34   * GetFileSizeEx               DESKTOP > APP     | SYSTEM
    35   * LockFile                    DESKTOP - DESKTOP | SYSTEM
    36   * MoveFileEx                  APP     - APP     | SYSTEM
    37   * ReadFile                    APP     - APP     | SYSTEM
    38   * SetEndOfFile                APP     - APP     | SYSTEM
    39   * SetFilePointer              DESKTOP > APP     | SYSTEM
    40   * SetFileValidData            DESKTOP - DESKTOP | SYSTEM  >= 0x0501
    41   * UnlockFile                  DESKTOP - DESKTOP | SYSTEM
    42   * WriteFile                   APP     - APP     | SYSTEM
    43   */
    44  
    45  #if !defined( BOOST_USE_WINDOWS_H )
    46  extern "C" {
    47  
    48  #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
    49  #if !defined( BOOST_NO_ANSI_APIS )
    50  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
    51  AreFileApisANSI(BOOST_WINAPI_DETAIL_VOID);
    52  
    53  BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
    54  CreateFileA(
    55      boost::winapi::LPCSTR_ lpFileName,
    56      boost::winapi::DWORD_ dwDesiredAccess,
    57      boost::winapi::DWORD_ dwShareMode,
    58      ::_SECURITY_ATTRIBUTES* lpSecurityAttributes,
    59      boost::winapi::DWORD_ dwCreationDisposition,
    60      boost::winapi::DWORD_ dwFlagsAndAttributes,
    61      boost::winapi::HANDLE_ hTemplateFile);
    62  
    63  struct _WIN32_FIND_DATAA;
    64  BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
    65  FindFirstFileA(boost::winapi::LPCSTR_ lpFileName, ::_WIN32_FIND_DATAA* lpFindFileData);
    66  
    67  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
    68  FindNextFileA(boost::winapi::HANDLE_ hFindFile, ::_WIN32_FIND_DATAA* lpFindFileData);
    69  #endif
    70  
    71  BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
    72  CreateFileW(
    73      boost::winapi::LPCWSTR_ lpFileName,
    74      boost::winapi::DWORD_ dwDesiredAccess,
    75      boost::winapi::DWORD_ dwShareMode,
    76      ::_SECURITY_ATTRIBUTES* lpSecurityAttributes,
    77      boost::winapi::DWORD_ dwCreationDisposition,
    78      boost::winapi::DWORD_ dwFlagsAndAttributes,
    79      boost::winapi::HANDLE_ hTemplateFile);
    80  
    81  struct _WIN32_FIND_DATAW;
    82  BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC
    83  FindFirstFileW(boost::winapi::LPCWSTR_ lpFileName, ::_WIN32_FIND_DATAW* lpFindFileData);
    84  
    85  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
    86  FindNextFileW(boost::winapi::HANDLE_ hFindFile, ::_WIN32_FIND_DATAW* lpFindFileData);
    87  
    88  struct _BY_HANDLE_FILE_INFORMATION;
    89  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
    90  GetFileInformationByHandle(
    91      boost::winapi::HANDLE_ hFile,
    92      ::_BY_HANDLE_FILE_INFORMATION* lpFileInformation);
    93  
    94  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
    95  LockFile(
    96      boost::winapi::HANDLE_ hFile,
    97      boost::winapi::DWORD_ dwFileOffsetLow,
    98      boost::winapi::DWORD_ dwFileOffsetHigh,
    99      boost::winapi::DWORD_ nNumberOfBytesToLockLow,
   100      boost::winapi::DWORD_ nNumberOfBytesToLockHigh);
   101  
   102  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   103  LockFileEx(
   104      boost::winapi::HANDLE_ hFile,
   105      boost::winapi::DWORD_ dwFlags,
   106      boost::winapi::DWORD_ dwReserved,
   107      boost::winapi::DWORD_ nNumberOfBytesToLockLow,
   108      boost::winapi::DWORD_ nNumberOfBytesToLockHigh,
   109      ::_OVERLAPPED* lpOverlapped);
   110  
   111  #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP
   112  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   113  SetFileValidData(
   114      boost::winapi::HANDLE_ hFile, 
   115      boost::winapi::LONGLONG_ ValidDataLength);
   116  #endif
   117  
   118  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   119  UnlockFile(
   120      boost::winapi::HANDLE_ hFile,
   121      boost::winapi::DWORD_ dwFileOffsetLow,
   122      boost::winapi::DWORD_ dwFileOffsetHigh,
   123      boost::winapi::DWORD_ nNumberOfBytesToUnlockLow,
   124      boost::winapi::DWORD_ nNumberOfBytesToUnlockHigh);
   125  
   126  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   127  UnlockFileEx(
   128      boost::winapi::HANDLE_ hFile,
   129      boost::winapi::DWORD_ dwReserved,
   130      boost::winapi::DWORD_ nNumberOfBytesToUnlockLow,
   131      boost::winapi::DWORD_ nNumberOfBytesToUnlockHigh,
   132      ::_OVERLAPPED* lpOverlapped);
   133  #endif
   134  
   135  #if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
   136  #if !defined( BOOST_NO_ANSI_APIS )
   137  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   138  DeleteFileA(boost::winapi::LPCSTR_ lpFileName);
   139  
   140  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   141  MoveFileExA(
   142      boost::winapi::LPCSTR_ lpExistingFileName,
   143      boost::winapi::LPCSTR_ lpNewFileName,
   144      boost::winapi::DWORD_ dwFlags);
   145  #endif
   146  
   147  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   148  DeleteFileW(boost::winapi::LPCWSTR_ lpFileName);
   149  
   150  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   151  FindClose(boost::winapi::HANDLE_ hFindFile);
   152  
   153  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   154  MoveFileExW(
   155      boost::winapi::LPCWSTR_ lpExistingFileName,
   156      boost::winapi::LPCWSTR_ lpNewFileName,
   157      boost::winapi::DWORD_ dwFlags);
   158  
   159  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   160  ReadFile(
   161      boost::winapi::HANDLE_ hFile,
   162      boost::winapi::LPVOID_ lpBuffer,
   163      boost::winapi::DWORD_ nNumberOfBytesToRead,
   164      boost::winapi::LPDWORD_ lpNumberOfBytesRead,
   165      ::_OVERLAPPED* lpOverlapped);
   166  
   167  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   168  SetEndOfFile(boost::winapi::HANDLE_ hFile);
   169  
   170  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   171  WriteFile(
   172      boost::winapi::HANDLE_ hFile,
   173      boost::winapi::LPCVOID_ lpBuffer,
   174      boost::winapi::DWORD_ nNumberOfBytesToWrite,
   175      boost::winapi::LPDWORD_ lpNumberOfBytesWritten,
   176      ::_OVERLAPPED* lpOverlapped);
   177  #endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
   178  
   179  #if BOOST_WINAPI_PARTITION_APP_SYSTEM
   180  #if !defined( BOOST_NO_ANSI_APIS )
   181  BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
   182  GetFileAttributesA(boost::winapi::LPCSTR_ lpFileName);
   183  #endif
   184  
   185  BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
   186  GetFileAttributesW(boost::winapi::LPCWSTR_ lpFileName);
   187  
   188  BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
   189  GetFileSizeEx(boost::winapi::HANDLE_ hFile, ::_LARGE_INTEGER* lpFileSize);
   190  
   191  BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
   192  SetFilePointer(
   193      boost::winapi::HANDLE_ hFile,
   194      boost::winapi::LONG_ lpDistanceToMove,
   195      boost::winapi::PLONG_ lpDistanceToMoveHigh,
   196      boost::winapi::DWORD_ dwMoveMethod);
   197  #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
   198  
   199  } // extern "C"
   200  #endif // !defined(BOOST_USE_WINDOWS_H)
   201  
   202  namespace boost {
   203  namespace winapi {
   204  
   205  #if defined( BOOST_USE_WINDOWS_H )
   206  
   207  BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_FILE_SIZE_ = INVALID_FILE_SIZE;
   208  BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_SET_FILE_POINTER_ = INVALID_SET_FILE_POINTER;
   209  BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_FILE_ATTRIBUTES_ = INVALID_FILE_ATTRIBUTES;
   210  
   211  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_READONLY_ = FILE_ATTRIBUTE_READONLY;
   212  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_HIDDEN_ = FILE_ATTRIBUTE_HIDDEN;
   213  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_SYSTEM_ = FILE_ATTRIBUTE_SYSTEM;
   214  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_DIRECTORY_ = FILE_ATTRIBUTE_DIRECTORY;
   215  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_ARCHIVE_ = FILE_ATTRIBUTE_ARCHIVE;
   216  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_DEVICE_ = FILE_ATTRIBUTE_DEVICE;
   217  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NORMAL_ = FILE_ATTRIBUTE_NORMAL;
   218  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_TEMPORARY_ = FILE_ATTRIBUTE_TEMPORARY;
   219  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_SPARSE_FILE_ = FILE_ATTRIBUTE_SPARSE_FILE;
   220  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_REPARSE_POINT_ = FILE_ATTRIBUTE_REPARSE_POINT;
   221  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_COMPRESSED_ = FILE_ATTRIBUTE_COMPRESSED;
   222  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_OFFLINE_ = FILE_ATTRIBUTE_OFFLINE;
   223  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED_ = FILE_ATTRIBUTE_NOT_CONTENT_INDEXED;
   224  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_ENCRYPTED_ = FILE_ATTRIBUTE_ENCRYPTED;
   225  
   226  BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NEW_ = CREATE_NEW;
   227  BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_ALWAYS_ = CREATE_ALWAYS;
   228  BOOST_CONSTEXPR_OR_CONST DWORD_ OPEN_EXISTING_ = OPEN_EXISTING;
   229  BOOST_CONSTEXPR_OR_CONST DWORD_ OPEN_ALWAYS_ = OPEN_ALWAYS;
   230  BOOST_CONSTEXPR_OR_CONST DWORD_ TRUNCATE_EXISTING_ = TRUNCATE_EXISTING;
   231  
   232  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_READ_ = FILE_SHARE_READ;
   233  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_WRITE_ = FILE_SHARE_WRITE;
   234  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_DELETE_ = FILE_SHARE_DELETE;
   235  
   236  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_BEGIN_ = FILE_BEGIN;
   237  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_CURRENT_ = FILE_CURRENT;
   238  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_END_ = FILE_END;
   239  
   240  #else // defined( BOOST_USE_WINDOWS_H )
   241  
   242  BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_FILE_SIZE_ = ((DWORD_)0xFFFFFFFF);
   243  BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_SET_FILE_POINTER_ = ((DWORD_)-1);
   244  BOOST_CONSTEXPR_OR_CONST DWORD_ INVALID_FILE_ATTRIBUTES_ = ((DWORD_)-1);
   245  
   246  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_READONLY_ = 0x00000001;
   247  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_HIDDEN_ = 0x00000002;
   248  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_SYSTEM_ = 0x00000004;
   249  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_DIRECTORY_ = 0x00000010;
   250  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_ARCHIVE_ = 0x00000020;
   251  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_DEVICE_ = 0x00000040;
   252  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NORMAL_ = 0x00000080;
   253  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_TEMPORARY_ = 0x00000100;
   254  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_SPARSE_FILE_ = 0x00000200;
   255  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_REPARSE_POINT_ = 0x00000400;
   256  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_COMPRESSED_ = 0x00000800;
   257  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_OFFLINE_ = 0x00001000;
   258  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED_ = 0x00002000;
   259  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_ENCRYPTED_ = 0x00004000;
   260  
   261  BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_NEW_ = 1;
   262  BOOST_CONSTEXPR_OR_CONST DWORD_ CREATE_ALWAYS_ = 2;
   263  BOOST_CONSTEXPR_OR_CONST DWORD_ OPEN_EXISTING_ = 3;
   264  BOOST_CONSTEXPR_OR_CONST DWORD_ OPEN_ALWAYS_ = 4;
   265  BOOST_CONSTEXPR_OR_CONST DWORD_ TRUNCATE_EXISTING_ = 5;
   266  
   267  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_READ_ = 0x00000001;
   268  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_WRITE_ = 0x00000002;
   269  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_SHARE_DELETE_ = 0x00000004;
   270  
   271  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_BEGIN_ = 0;
   272  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_CURRENT_ = 1;
   273  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_END_ = 2;
   274  
   275  #endif // defined( BOOST_USE_WINDOWS_H )
   276  
   277  // Some of these constants are not defined by Windows SDK in MinGW or older MSVC
   278  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_WRITE_THROUGH_ = 0x80000000;
   279  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_OVERLAPPED_ = 0x40000000;
   280  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_NO_BUFFERING_ = 0x20000000;
   281  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_RANDOM_ACCESS_ = 0x10000000;
   282  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_SEQUENTIAL_SCAN_ = 0x08000000;
   283  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_DELETE_ON_CLOSE_ = 0x04000000;
   284  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_BACKUP_SEMANTICS_ = 0x02000000;
   285  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_POSIX_SEMANTICS_ = 0x01000000;
   286  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_SESSION_AWARE_ = 0x00800000;
   287  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_OPEN_REPARSE_POINT_ = 0x00200000;
   288  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_OPEN_NO_RECALL_ = 0x00100000;
   289  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_FIRST_PIPE_INSTANCE_ = 0x00080000;
   290  
   291  #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN8
   292  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_FLAG_OPEN_REQUIRING_OPLOCK_ = 0x00040000;
   293  #endif
   294  
   295  // This constant is not defined in Windows SDK up until 6.0A
   296  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_VIRTUAL_ = 0x00010000;
   297  
   298  // These constants are not defined in Windows SDK up until 8.0 and MinGW/MinGW-w64 (as of 2016-02-14).
   299  // They are documented to be supported only since Windows 8/Windows Server 2012
   300  // but defined unconditionally.
   301  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_INTEGRITY_STREAM_ = 0x00008000;
   302  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_NO_SCRUB_DATA_ = 0x00020000;
   303  // Undocumented
   304  BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_ATTRIBUTE_EA_ = 0x00040000;
   305  
   306  #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
   307  #if !defined( BOOST_NO_ANSI_APIS )
   308  using ::AreFileApisANSI;
   309  
   310  BOOST_FORCEINLINE HANDLE_ CreateFileA(
   311      LPCSTR_ lpFileName,
   312      DWORD_ dwDesiredAccess,
   313      DWORD_ dwShareMode,
   314      SECURITY_ATTRIBUTES_* lpSecurityAttributes,
   315      DWORD_ dwCreationDisposition,
   316      DWORD_ dwFlagsAndAttributes,
   317      HANDLE_ hTemplateFile)
   318  {
   319      return ::CreateFileA(
   320          lpFileName,
   321          dwDesiredAccess,
   322          dwShareMode,
   323          reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),
   324          dwCreationDisposition,
   325          dwFlagsAndAttributes,
   326          hTemplateFile);
   327  }
   328  
   329  BOOST_FORCEINLINE HANDLE_ create_file(
   330      LPCSTR_ lpFileName,
   331      DWORD_ dwDesiredAccess,
   332      DWORD_ dwShareMode,
   333      SECURITY_ATTRIBUTES_* lpSecurityAttributes,
   334      DWORD_ dwCreationDisposition,
   335      DWORD_ dwFlagsAndAttributes,
   336      HANDLE_ hTemplateFile)
   337  {
   338      return ::CreateFileA(
   339          lpFileName,
   340          dwDesiredAccess,
   341          dwShareMode,
   342          reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),
   343          dwCreationDisposition,
   344          dwFlagsAndAttributes,
   345          hTemplateFile);
   346  }
   347  
   348  typedef struct BOOST_MAY_ALIAS _WIN32_FIND_DATAA {
   349      DWORD_ dwFileAttributes;
   350      FILETIME_ ftCreationTime;
   351      FILETIME_ ftLastAccessTime;
   352      FILETIME_ ftLastWriteTime;
   353      DWORD_ nFileSizeHigh;
   354      DWORD_ nFileSizeLow;
   355      DWORD_ dwReserved0;
   356      DWORD_ dwReserved1;
   357      CHAR_   cFileName[MAX_PATH_];
   358      CHAR_   cAlternateFileName[14];
   359  #ifdef _MAC
   360      DWORD_ dwFileType;
   361      DWORD_ dwCreatorType;
   362      WORD_  wFinderFlags;
   363  #endif
   364  } WIN32_FIND_DATAA_, *PWIN32_FIND_DATAA_, *LPWIN32_FIND_DATAA_;
   365  
   366  BOOST_FORCEINLINE HANDLE_ FindFirstFileA(LPCSTR_ lpFileName, WIN32_FIND_DATAA_* lpFindFileData)
   367  {
   368      return ::FindFirstFileA(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));
   369  }
   370  
   371  BOOST_FORCEINLINE HANDLE_ find_first_file(LPCSTR_ lpFileName, WIN32_FIND_DATAA_* lpFindFileData)
   372  {
   373      return ::FindFirstFileA(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));
   374  }
   375  
   376  BOOST_FORCEINLINE BOOL_ FindNextFileA(HANDLE_ hFindFile, WIN32_FIND_DATAA_* lpFindFileData)
   377  {
   378      return ::FindNextFileA(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));
   379  }
   380  
   381  BOOST_FORCEINLINE BOOL_ find_next_file(HANDLE_ hFindFile, WIN32_FIND_DATAA_* lpFindFileData)
   382  {
   383      return ::FindNextFileA(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAA* >(lpFindFileData));
   384  }
   385  
   386  #endif // !defined( BOOST_NO_ANSI_APIS )
   387  
   388  BOOST_FORCEINLINE HANDLE_ CreateFileW(
   389      LPCWSTR_ lpFileName,
   390      DWORD_ dwDesiredAccess,
   391      DWORD_ dwShareMode,
   392      SECURITY_ATTRIBUTES_* lpSecurityAttributes,
   393      DWORD_ dwCreationDisposition,
   394      DWORD_ dwFlagsAndAttributes,
   395      HANDLE_ hTemplateFile)
   396  {
   397      return ::CreateFileW(
   398          lpFileName,
   399          dwDesiredAccess,
   400          dwShareMode,
   401          reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),
   402          dwCreationDisposition,
   403          dwFlagsAndAttributes,
   404          hTemplateFile);
   405  }
   406  
   407  BOOST_FORCEINLINE HANDLE_ create_file(
   408      LPCWSTR_ lpFileName,
   409      DWORD_ dwDesiredAccess,
   410      DWORD_ dwShareMode,
   411      SECURITY_ATTRIBUTES_* lpSecurityAttributes,
   412      DWORD_ dwCreationDisposition,
   413      DWORD_ dwFlagsAndAttributes,
   414      HANDLE_ hTemplateFile)
   415  {
   416      return ::CreateFileW(
   417          lpFileName,
   418          dwDesiredAccess,
   419          dwShareMode,
   420          reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes),
   421          dwCreationDisposition,
   422          dwFlagsAndAttributes,
   423          hTemplateFile);
   424  }
   425  
   426  typedef struct BOOST_MAY_ALIAS _WIN32_FIND_DATAW {
   427      DWORD_ dwFileAttributes;
   428      FILETIME_ ftCreationTime;
   429      FILETIME_ ftLastAccessTime;
   430      FILETIME_ ftLastWriteTime;
   431      DWORD_ nFileSizeHigh;
   432      DWORD_ nFileSizeLow;
   433      DWORD_ dwReserved0;
   434      DWORD_ dwReserved1;
   435      WCHAR_  cFileName[MAX_PATH_];
   436      WCHAR_  cAlternateFileName[14];
   437  #ifdef _MAC
   438      DWORD_ dwFileType;
   439      DWORD_ dwCreatorType;
   440      WORD_  wFinderFlags;
   441  #endif
   442  } WIN32_FIND_DATAW_, *PWIN32_FIND_DATAW_, *LPWIN32_FIND_DATAW_;
   443  
   444  typedef struct BOOST_MAY_ALIAS _BY_HANDLE_FILE_INFORMATION {
   445      DWORD_ dwFileAttributes;
   446      FILETIME_ ftCreationTime;
   447      FILETIME_ ftLastAccessTime;
   448      FILETIME_ ftLastWriteTime;
   449      DWORD_ dwVolumeSerialNumber;
   450      DWORD_ nFileSizeHigh;
   451      DWORD_ nFileSizeLow;
   452      DWORD_ nNumberOfLinks;
   453      DWORD_ nFileIndexHigh;
   454      DWORD_ nFileIndexLow;
   455  } BY_HANDLE_FILE_INFORMATION_, *PBY_HANDLE_FILE_INFORMATION_, *LPBY_HANDLE_FILE_INFORMATION_;
   456  
   457  BOOST_FORCEINLINE HANDLE_ FindFirstFileW(LPCWSTR_ lpFileName, WIN32_FIND_DATAW_* lpFindFileData)
   458  {
   459      return ::FindFirstFileW(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));
   460  }
   461  
   462  BOOST_FORCEINLINE HANDLE_ find_first_file(LPCWSTR_ lpFileName, WIN32_FIND_DATAW_* lpFindFileData)
   463  {
   464      return ::FindFirstFileW(lpFileName, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));
   465  }
   466  
   467  BOOST_FORCEINLINE BOOL_ FindNextFileW(HANDLE_ hFindFile, WIN32_FIND_DATAW_* lpFindFileData)
   468  {
   469      return ::FindNextFileW(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));
   470  }
   471  
   472  BOOST_FORCEINLINE BOOL_ find_next_file(HANDLE_ hFindFile, WIN32_FIND_DATAW_* lpFindFileData)
   473  {
   474      return ::FindNextFileW(hFindFile, reinterpret_cast< ::_WIN32_FIND_DATAW* >(lpFindFileData));
   475  }
   476  
   477  BOOST_FORCEINLINE BOOL_ GetFileInformationByHandle(HANDLE_ h, BY_HANDLE_FILE_INFORMATION_* info)
   478  {
   479      return ::GetFileInformationByHandle(h, reinterpret_cast< ::_BY_HANDLE_FILE_INFORMATION* >(info));
   480  }
   481  
   482  using ::LockFile;
   483  
   484  BOOST_FORCEINLINE BOOL_ LockFileEx(
   485      HANDLE_ hFile,
   486      DWORD_ dwFlags,
   487      DWORD_ dwReserved,
   488      DWORD_ nNumberOfBytesToLockLow,
   489      DWORD_ nNumberOfBytesToLockHigh,
   490      OVERLAPPED_* lpOverlapped)
   491  {
   492      return ::LockFileEx(hFile, dwFlags, dwReserved, nNumberOfBytesToLockLow, nNumberOfBytesToLockHigh, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
   493  }
   494  
   495  #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WINXP
   496  using ::SetFileValidData;
   497  #endif
   498  
   499  using ::UnlockFile;
   500  
   501  BOOST_FORCEINLINE BOOL_ UnlockFileEx(
   502      HANDLE_ hFile,
   503      DWORD_ dwReserved,
   504      DWORD_ nNumberOfBytesToUnlockLow,
   505      DWORD_ nNumberOfBytesToUnlockHigh,
   506      OVERLAPPED_* lpOverlapped)
   507  {
   508      return ::UnlockFileEx(hFile, dwReserved, nNumberOfBytesToUnlockLow, nNumberOfBytesToUnlockHigh, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
   509  }
   510  #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
   511  
   512  #if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
   513  #if !defined( BOOST_NO_ANSI_APIS )
   514  using ::DeleteFileA;
   515  
   516  BOOST_FORCEINLINE BOOL_ delete_file(LPCSTR_ lpFileName)
   517  {
   518      return ::DeleteFileA(lpFileName);
   519  }
   520  
   521  using ::MoveFileExA;
   522  
   523  BOOST_FORCEINLINE BOOL_ move_file(LPCSTR_ lpExistingFileName, LPCSTR_ lpNewFileName, DWORD_ dwFlags)
   524  {
   525      return ::MoveFileExA(lpExistingFileName, lpNewFileName, dwFlags);
   526  }
   527  
   528  #endif
   529  using ::DeleteFileW;
   530  
   531  BOOST_FORCEINLINE BOOL_ delete_file(LPCWSTR_ lpFileName)
   532  {
   533      return ::DeleteFileW(lpFileName);
   534  }
   535  
   536  using ::FindClose;
   537  using ::MoveFileExW;
   538  
   539  BOOST_FORCEINLINE BOOL_ move_file(LPCWSTR_ lpExistingFileName, LPCWSTR_ lpNewFileName, DWORD_ dwFlags)
   540  {
   541      return ::MoveFileExW(lpExistingFileName, lpNewFileName, dwFlags);
   542  }
   543  
   544  BOOST_FORCEINLINE BOOL_ ReadFile(
   545      HANDLE_ hFile,
   546      LPVOID_ lpBuffer,
   547      DWORD_ nNumberOfBytesToWrite,
   548      LPDWORD_ lpNumberOfBytesWritten,
   549      OVERLAPPED_* lpOverlapped)
   550  {
   551      return ::ReadFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
   552  }
   553  
   554  using ::SetEndOfFile;
   555  
   556  BOOST_FORCEINLINE BOOL_ WriteFile(
   557      HANDLE_ hFile,
   558      LPCVOID_ lpBuffer,
   559      DWORD_ nNumberOfBytesToWrite,
   560      LPDWORD_ lpNumberOfBytesWritten,
   561      OVERLAPPED_* lpOverlapped)
   562  {
   563      return ::WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
   564  }
   565  #endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
   566  
   567  #if BOOST_WINAPI_PARTITION_APP_SYSTEM
   568  #if !defined( BOOST_NO_ANSI_APIS )
   569  using ::GetFileAttributesA;
   570  
   571  BOOST_FORCEINLINE DWORD_ get_file_attributes(LPCSTR_ lpFileName)
   572  {
   573      return ::GetFileAttributesA(lpFileName);
   574  }
   575  #endif
   576  using ::GetFileAttributesW;
   577  
   578  BOOST_FORCEINLINE DWORD_ get_file_attributes(LPCWSTR_ lpFileName)
   579  {
   580      return ::GetFileAttributesW(lpFileName);
   581  }
   582  
   583  BOOST_FORCEINLINE BOOL_ GetFileSizeEx(HANDLE_ hFile, LARGE_INTEGER_* lpFileSize)
   584  {
   585      return ::GetFileSizeEx(hFile, reinterpret_cast< ::_LARGE_INTEGER* >(lpFileSize));
   586  }
   587  
   588  using ::SetFilePointer;
   589  #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM
   590  
   591  }
   592  }
   593  
   594  #endif // BOOST_WINAPI_FILE_MANAGEMENT_HPP_INCLUDED_