C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 110 - Аудит каталогов FindFirstChangeNotification() / Win 32 API / Win32 API

Шаг 110 - Аудит каталогов FindFirstChangeNotification()

Windows 98 как и Windows NT позволяет Вам установить аудит каталога с помощью функции FindFirstChangeNotification. Вот она:

HANDLE FindFirstChangeNotification
(
	LPCTSTR lpPathName, 	// путь к каталогу
	BOOL bWatchSubtree, 	// флаг управления
	DWORD dwNotifyFilter	// флаги событий
); 

С первым параметром понятно. Флагом управления может быть значение TRUE или FALSE. От него зависит будут ли события генерироваться только для каталога FALSE или для каталога и всех подкаталогов - TRUE. Второй параметр это флаги, с помощью которых можно установить типы событий, на которых будет генерироваться событие.

FILE_NOTIFY_CHANGE_FILE_NAMEИзменение имен файлов, расположенных в указанном каталоге и его подкаталогах, создание и удаление файлов
FILE_NOTIFY_CHANGE_DIR_NAMEИзменение имен каталогов, создание и удаление каталогов
FILE_NOTIFY_CHANGE_ATTRIBUTESИзменение атрибутов
FILE_NOTIFY_CHANGE_SIZEИзменение размеров файлов (после записи содержимого внутренних буферов на диск)
FILE_NOTIFY_CHANGE_LAST_WRITEИзменение времени записи для файлов (после записи содержимого внутренних буферов на диск)
FILE_NOTIFY_CHANGE_SECURITYИзменение дескриптора защиты

Давате попробуем. Делайте приложение на основе MFC AppWizard на базе диалогового окна с одной кнопкой. При нажатии на эту кнопку будет устанавливаться аудит.

void CTestNotDlg::OnButton1() 
{
	HANDLE hDir;
	hDir=FindFirstChangeNotification("c:\\Test1\\",
		TRUE,FILE_NOTIFY_CHANGE_FILE_NAME);
	if (hDir==INVALID_HANDLE_VALUE)
		AfxMessageBox("Не могу следить за каталогом");

	while (WaitForSingleObject(hDir,10000)!=WAIT_OBJECT_0)
	{
	}

	AfxMessageBox("с каталогом работают");
	FindCloseChangeNotification(hDir);
}

Мы создали указатель на объект каталога, аудит которого будем проводить FindFirstChangeNotification(), а потом ждем сообщения от каталога WaitForSingleObject при его получении выводим сообщение на экран и закрываем указатель FindCloseChangeNotification().

BOOL FindCloseChangeNotification
(
	HANDLE hChangeHandle	// указатель на объект
);

Если нужно следить постоянно, например, чтобы вести LOG файл, то нужно вызывать функцию:

BOOL FindNextChangeNotification
{
	HANDLE hChangeHandle	// указатель на объект
);

Для получения информации о следующем событии. Эта функция переводит объект в первоначальное состояние и им можно пользоваться в дальнейшем для обнаружения сообщений. Если Вы внимательно посмотрели код, то увидели, что функция FindFirstChangeNotification() не получает сообщение, а только создает объект, которому эти сообщения будут посланы.


| |
Автор Каев Артем.
[AD]