28 #define BUFFER_SIZE 0x1000 36 #if 1 // FIXME: This is a HACK 73 , m_fRecursive(fSubTree)
74 , m_dir_list(pszDirectoryPath, fSubTree)
76 TRACE(
"CDirectoryWatcher::CDirectoryWatcher: %p, '%S'\n",
this, pszDirectoryPath);
97 ERR(
"CreateFileW failed\n");
98 delete pDirectoryWatcher;
99 pDirectoryWatcher =
NULL;
101 return pDirectoryWatcher;
139 DWORD dwEvent, cbName;
141 TRACE(
"CDirectoryWatcher::ProcessNotification: enter\n");
151 ERR(
"pInfo->FileName is longer than szName\n");
233 TRACE(
"CDirectoryWatcher::ProcessNotification: leave\n");
242 ERR(
"ERROR_INVALID_FUNCTION\n");
250 TRACE(
"ERROR_OPERATION_ABORTED\n");
265 if (dwNumberOfBytesTransfered == 0)
283 DWORD dwNumberOfBytesTransfered,
292 pDirectoryWatcher->
ReadCompletion(dwErrorCode, dwNumberOfBytesTransfered);
328 ERR(
"ReadDirectoryChangesW for '%S' failed (error: %ld)\n",
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
static const WCHAR path2[]
DWORD WINAPI WaitForSingleObjectEx(IN HANDLE hHandle, IN DWORD dwMilliseconds, IN BOOL bAlertable)
static HANDLE s_hThreadAPC
WCHAR m_szDirectoryPath[MAX_PATH]
static const WCHAR szName[]
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
void ProcessNotification()
#define FILE_ACTION_RENAMED_OLD_NAME
#define ERROR_INVALID_FUNCTION
static unsigned __stdcall DirectoryWatcherThreadFuncAPC(void *)
static void NTAPI _RequestAllTerminationAPC(ULONG_PTR Parameter)
#define SHCNE_RENAMEFOLDER
static void NTAPI _RequestTerminationAPC(ULONG_PTR Parameter)
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
#define FILE_NOTIFY_CHANGE_SIZE
#define FILE_NOTIFY_CHANGE_FILE_NAME
static BYTE s_buffer[BUFFER_SIZE]
_CRTIMP uintptr_t __cdecl _beginthreadex(_In_opt_ void *_Security, _In_ unsigned _StackSize, _In_ unsigned(__stdcall *_StartAddress)(void *), _In_opt_ void *_ArgList, _In_ unsigned _InitFlag, _Out_opt_ unsigned *_ThrdAddr)
#define FILE_NOTIFY_CHANGE_DIR_NAME
WINE_DEFAULT_DEBUG_CHANNEL(shcn)
BOOL RenamePath(LPCWSTR pszPath1, LPCWSTR pszPath2)
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
#define ERROR_OPERATION_ABORTED
DWORD WINAPI QueueUserAPC(IN PAPCFUNC pfnAPC, IN HANDLE hThread, IN ULONG_PTR dwData)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
HANDLE WINAPI GetCurrentThread(VOID)
BOOL AddPath(LPCWSTR pszPath)
#define FILE_ACTION_MODIFIED
static void CALLBACK _NotificationCompletion(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped)
BOOL WINAPI CancelIo(IN HANDLE hFile)
#define FILE_ACTION_REMOVED
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
static void RequestAllWatchersTermination()
#define FILE_NOTIFY_CHANGE_CREATION
BOOL ContainsPath(LPCWSTR pszPath) const
static const WCHAR path1[]
static TCHAR szTempPath[MAX_PATH]
static CDirectoryWatcher * Create(LPCWSTR pszDirectoryPath, BOOL fSubTree)
static DWORD GetFilterFromEvents(DWORD fEvents)
DWORD WINAPI GetLongPathNameW(IN LPCWSTR lpszShortPath, OUT LPWSTR lpszLongPath, IN DWORD cchBuffer)
DWORD WINAPI SleepEx(IN DWORD dwMilliseconds, IN BOOL bAlertable)
#define FILE_LIST_DIRECTORY
static void NTAPI _AddDirectoryProcAPC(ULONG_PTR Parameter)
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
#define FILE_SHARE_DELETE
#define FILE_ACTION_RENAMED_NEW_NAME
BOOL RequestTermination()
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED lpOverlapped
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
BOOL DeletePath(LPCWSTR pszPath)
static void NotifyFileSystemChange(LONG wEventId, LPCWSTR path1, LPCWSTR path2)
#define FILE_ACTION_ADDED
#define FILE_FLAG_BACKUP_SEMANTICS
BOOL WINAPI ReadDirectoryChangesW(IN HANDLE hDirectory, IN LPVOID lpBuffer OPTIONAL, IN DWORD nBufferLength, IN BOOL bWatchSubtree, IN DWORD dwNotifyFilter, OUT LPDWORD lpBytesReturned, IN LPOVERLAPPED lpOverlapped OPTIONAL, IN LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
CDirectoryWatcher(LPCWSTR pszDirectoryPath, BOOL fSubTree)
struct _FILE_NOTIFY_INFORMATION * PFILE_NOTIFY_INFORMATION
CDirectoryList m_dir_list
static BOOL s_fTerminateAllWatchers
#define FILE_FLAG_OVERLAPPED
static DWORD ConvertActionToEvent(DWORD Action, BOOL fDir)
void ReadCompletion(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered)