w1146869587
2021-11-05 cbf39419a8299e7d119618e5e8e1b1eb35f72f45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef EFSW_WATCHERWIN32_HPP
#define EFSW_WATCHERWIN32_HPP
 
#include <efsw/FileWatcherImpl.hpp>
#include <efsw/FileInfo.hpp>
 
#if EFSW_PLATFORM == EFSW_PLATFORM_WIN32
 
#include <windows.h>
 
#ifdef EFSW_COMPILER_MSVC
    #pragma comment(lib, "comctl32.lib")
    #pragma comment(lib, "user32.lib")
    #pragma comment(lib, "ole32.lib")
 
    // disable secure warnings
    #pragma warning (disable: 4996)
#endif
 
namespace efsw
{
 
class WatcherWin32;
 
/// Internal watch data
struct WatcherStructWin32
{
    OVERLAPPED Overlapped;
    WatcherWin32 *    Watch;
};
 
struct sLastModifiedEvent
{
        FileInfo    file;
        std::string fileName;
};
 
bool RefreshWatch(WatcherStructWin32* pWatch);
 
void CALLBACK WatchCallback(DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped);
 
void DestroyWatch(WatcherStructWin32* pWatch);
 
WatcherStructWin32* CreateWatch(LPCWSTR szDirectory, bool recursive, DWORD NotifyFilter, HANDLE iocp);
 
class WatcherWin32 : public Watcher
{
    public:
        WatcherWin32() :
            Struct( NULL ),
            DirHandle( NULL ),
            lParam( 0 ),
            NotifyFilter( 0 ),
            StopNow( false ),
            Watch( NULL ),
            DirName( NULL )
        {
        }
 
        WatcherStructWin32 * Struct;
        HANDLE DirHandle;
        BYTE Buffer[63 * 1024]; // do NOT make this bigger than 64K because it will fail if the folder being watched is on the network! (see http://msdn.microsoft.com/en-us/library/windows/desktop/aa365465(v=vs.85).aspx)
        LPARAM lParam;
        DWORD NotifyFilter;
        bool StopNow;
        FileWatcherImpl* Watch;
        char* DirName;
        sLastModifiedEvent LastModifiedEvent;
};
 
}
 
#endif
 
#endif