Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters
Register

Reply
 
LinkBack Thread Tools
Old 16.01.2004, 09:01   #1
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Default мониторинг файловый операций

никак не могу найти соответствующие функции в мсдн, никто не подскажет, как подписываться на файловые операции?
Reply With Quote
Old 16.01.2004, 09:47   #2
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Пахать начинаем от ReadDirectoryChanges по ликам.
Reply With Quote
Old 16.01.2004, 11:10   #3
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Default

Quote:
Originally Posted by Agregat
Пахать начинаем от ReadDirectoryChanges по ликам.
спасибо!

но такая проблема: имеется только юникод-версия функции, с W на конце. без W или с A отсутствует. а чем пользоваться для не-nt версий виндов?
Reply With Quote
Old 16.01.2004, 11:26   #4
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Default

кстати, эта функция не осуществляет установку хука. а есть ли такая возможность вообще? или это делается на уровне драйвера?
Reply With Quote
Old 16.01.2004, 12:10   #5
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Можно и с хуком, но с этим методом я не знаком. Под окна не НТ скорее всего надо вешать хук. Всякие Вижуал Ц делают скорее всего через эту функцию : FindFirstChangeNotification.
Reply With Quote
Old 16.01.2004, 13:03   #6
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Вот код, который я накидал минут за 10
PHP Code:
// FileNotifications.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
DWORD WINAPI MonitoringThread(void pParam);
static 
bool g_bGoOn true;
int main(int argccharargv[])
{
 
cout << "Enter dir to monitor : ";
 
string sDir;
 
cin >> sDir;
 
DWORD dwID;
 ::
CreateThread(NULL0MonitoringThread, (void *)sDir.c_str(), 0, &dwID);
 
char ch;
 while (
ch getch())
 {
  if (
'q' == ch || 'Q' == ch)
   break;
 }
 
g_bGoOn false;
 
Sleep(300);
 return 
0;
}

DWORD WINAPI MonitoringThread(void pParam)
{
 const 
char pszDir = (char *) pParam;
 
HANDLE hMonitor = ::FindFirstChangeNotification(pszDirfalseFILE_NOTIFY_CHANGE_LAST_WRITE);
 
//everything worked wrong
 
if (INVALID_HANDLE_VALUE == hMonitor)
  
ExitProcess(-1);
 
///
 
cout << "Started monitoring " << pszDir << " directory." << endl;
 
DWORD dw;
 while (
g_bGoOn)
 {
  
dw = ::WaitForSingleObject(hMonitor1000);
  switch (
dw)
  {
  case 
WAIT_TIMEOUT:
   
//time out and nothing has changed
   
break;
  case 
WAIT_OBJECT_0:
   
//we have changes in the monitored directory
   
::FindNextChangeNotification(hMonitor);
   
cout << "In the monitored directory change(s) have occured!" << endl;
   break;
  default:
   
//means there's some other error
   
cout << "Error has occured. Monitoring has stopped. Press 'q' to quit" << 
endl;
   
g_bGoOn false;
   break;
  }
 }
 
//close the search
 
::FindCloseChangeNotification(hMonitor);
 return 
0;

Reply With Quote
Old 16.01.2004, 13:19   #7
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Default

а как затребовать уведомление на любой доступ (например, открытие на чтение без изменения) к файлу, а не только факт записи?
Reply With Quote
Old 16.01.2004, 13:22   #8
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Зайди на sysinternals.com и посмотри, что там написано про FileMon
Reply With Quote
Old 16.01.2004, 13:56   #9
Moderator
 
acid's Avatar
 
Join Date: 09 2001
Location: South Korea, Gumi
Posts: 7,699
Downloads: 102
Uploads: 34
Blog Entries: 16
Reputation: 561 | 6
Default

Quote:
Originally Posted by Agregat
Зайди на sysinternals.com и посмотри, что там написано про FileMon
там когда-то были исходники этого FileMon-a, может у кого сохранились?
Reply With Quote
Old 16.01.2004, 14:46   #10
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Default

Quote:
Originally Posted by Agregat
Зайди на sysinternals.com и посмотри, что там написано про FileMon
там как раз то, чего я опасался - через установку своего драйвера
Reply With Quote
Old 16.01.2004, 15:30   #11
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Новый файлмон вроде без драйвера... или он как-то по другому это делает...
Reply With Quote
Old 01.10.2004, 08:44   #12
Младенец
 
Join Date: 10 2004
Location: rus
Age: 35
Posts: 4
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Вот такой вопрос :
пробывал прокомпилировать но выдало ошибку
Code:
[C++ Fehler] prov.cpp(1): E2209 include-Datei 'STDAFX.H' kann nicht geoffnet werden.
[C++ Warnung] prov.cpp(16): W8060 Moglicherweise inkorrekte Zuweisung
'STDAFX.H' - где взять ?
Reply With Quote
Old 01.10.2004, 11:14   #13
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Пилят. Ц++ по немецки. stdafx.h - убери в VC use precompiled headers или создай пустий stdafx.h и stdafx.cpp и инклюдни первый из второго, и первый инклюдни во все цпп файлы.
Reply With Quote
Old 01.10.2004, 12:18   #14
Младенец
 
Join Date: 10 2004
Location: rus
Age: 35
Posts: 4
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

спасибо
Reply With Quote
Old 01.10.2004, 12:22   #15
Младенец
 
Join Date: 10 2004
Location: rus
Age: 35
Posts: 4
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Quote:
Пилят. Ц++ по немецки.
какую версию имеем такое и рады
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 15:09.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.