unsigned __stdcall MonitorFileChangeThread(void *pVoid);
int main(int argc, char* argv[])
{
HANDLE hDirectory = CreateFile("E://", GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_OVERLAPPED, NULL);
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, MonitorFileChangeThread, (void*)hDirectory, 0, NULL);
Sleep(5*1000);
CloseHandle(hDirectory);
WaitForSingleObject(hThread, INFINITE);
return 0;
}
unsigned __stdcall MonitorFileChangeThread(void *pVoid)
{
#define BUF_SIZE 64*1024
DWORD size;
char buf[BUF_SIZE];
HANDLE hDirectory = (HANDLE)pVoid;
while(1)
{
if(!ReadDirectoryChangesW(hDirectory, buf, BUF_SIZE, TRUE,
FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_ATTRIBUTES|FILE_NOTIFY_CHANGE_SIZE,
&size, NULL, NULL) || GetLastError() == ERROR_INVALID_HANDLE)
{
break;
}
PFILE_NOTIFY_INFORMATION pFNI = (PFILE_NOTIFY_INFORMATION)buf;
do
{
pFNI = (PFILE_NOTIFY_INFORMATION)pFNI->NextEntryOffset;
}
while(pFNI != 0);
}
return 0;
}