HANDLE FindFirstFileA(
  LPCSTR             lpFileName,
  LPWIN32_FIND_DATAA lpFindFileData
);

HANDLE FindFirstFileW(
  LPCWSTR            lpFileName,
  LPWIN32_FIND_DATAW lpFindFileData
);


BOOL FindNextFileA(
  HANDLE             hFindFile,
  LPWIN32_FIND_DATAA lpFindFileData
);


BOOL FindNextFileW(
  HANDLE             hFindFile,
  LPWIN32_FIND_DATAW lpFindFileData
);


BOOL FindClose(
  HANDLE hFindFile
);

HANDLE FindFirstChangeNotificationA(
  LPCSTR lpPathName,
  BOOL   bWatchSubtree,
  DWORD  dwNotifyFilter
);

HANDLE FindFirstChangeNotificationW(
  LPCWSTR lpPathName,
  BOOL    bWatchSubtree,
  DWORD   dwNotifyFilter
);

BOOL FindNextChangeNotification(
  HANDLE hChangeHandle
);

BOOL FindCloseChangeNotification(
  HANDLE hChangeHandle
);

BOOL FindNextChangeNotification(
  HANDLE hChangeHandle
);

BOOL ReadDirectoryChangesW(
  HANDLE                          hDirectory,
  LPVOID                          lpBuffer,
  DWORD                           nBufferLength,
  BOOL                            bWatchSubtree,
  DWORD                           dwNotifyFilter,
  LPDWORD                         lpBytesReturned,
  LPOVERLAPPED                    lpOverlapped,
  LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);

BOOL ReadDirectoryChangesExW(
  HANDLE                                  hDirectory,
  LPVOID                                  lpBuffer,
  DWORD                                   nBufferLength,
  BOOL                                    bWatchSubtree,
  DWORD                                   dwNotifyFilter,
  LPDWORD                                 lpBytesReturned,
  LPOVERLAPPED                            lpOverlapped,
  LPOVERLAPPED_COMPLETION_ROUTINE         lpCompletionRoutine,
  READ_DIRECTORY_NOTIFY_INFORMATION_CLASS ReadDirectoryNotifyInformationClass
);

BOOL LockFile(
  [in] HANDLE hFile,
  [in] DWORD  dwFileOffsetLow,
  [in] DWORD  dwFileOffsetHigh,
  [in] DWORD  nNumberOfBytesToLockLow,
  [in] DWORD  nNumberOfBytesToLockHigh
);

BOOL LockFileEx(
  [in]      HANDLE       hFile,
  [in]      DWORD        dwFlags,
            DWORD        dwReserved,
  [in]      DWORD        nNumberOfBytesToLockLow,
  [in]      DWORD        nNumberOfBytesToLockHigh,
  [in, out] LPOVERLAPPED lpOverlapped
);