Отслеживание операций с файлами


Попытка найти файлы, открытые другими пользователями, вернее всего сработает, если применять программу, работающую в командной строке, - nthandle Марка Руссиновича (Mark Russinovich), ее можно найти на http://www.sysinternals.com. Она позволяет показать все открытые дескрипторы на определенной системе. Вот как выглядит ее вывод:

System pid: 2

10: File C:\WINNT\SYSTEM32\CONFIG\SECURITY

84: File C:\WINNT\SYSTEM32\CONFIG\SAM.LOG

cc: File C:\WINNT\SYSTEM32\CONFIG\SYSrEM

dO: File C:\WINNT\SYSTEM32\CONFIG\SECURITY.LOG

d4: File C:\WINNT\SYSTEM32\CONFIG\DEFAULT

e8: File C:\WINNT\SYSTEM32\CONFIG\SYSTEM.ALT

fc: File C:\WINNT\SYSTEM32\CONFIG4SOFTWARE.LOG

118: File C:\WINNT\SYSTEM32\CONFIG\SAM

128: File C:\pagefile.sys

134: File C:\WINNT\SYSTEM32\CONFIG\DEFAULT. LOG

154: File С:\WNNT\3YSTEM32\CON'FIG;'SOFTWARE

1bO: File \3evice\NafiedPipe\

294: File C:\WINNT\PROFILES\Adnirustrator\ntLSer.aa-.; OG

2a4: File C:\WINNT\PROFILES\AdminisTrator\NTUSEH.DAT

SMSS.EXE pid: 27 (NT AUTHORITY:SYSTEM)

4: Section С:\WINNT\SYSTEM32\5MSS.EXE

c: File С'\WINNT

28: File C:\WINNT\SYSTEM

Можно также запросить информацию по конкретным файлам и каталогам:

> nthandle c:\temp

Handle V1.11

Copyright (С) 1997 Mark Russinovich

http://www.sysinternals.com

WINWORD.EXE pid: 652

C:\TEMP\~DFF2B3.tmp WINWORD.EXE pid: 652

C:\TEMP\~DFA773.tmp WINWORD.EXE pid: 652

C:\TEMP\~DF9l3E.tmp

Программа nthandle позволяет получить эту информацию по конкретному процессу при помощи ключа -р.

Использовать ее из Perl очень просто, поэтому не будем приводить примеры. Вместо этого посмотрим на подобную, но более интересную операцию - аудит.

NT/2000 позволяет эффективно отслеживать изменения в файлах, каталогах или иерархии каталогов. Вы могли бы учитывать постоянное повторение операции stat() над нужным объектом, но это потребовало бы слишком больших затрат процессорного времени. В NT/2000 отслеживание изменений можно поручить операционной системе.

Относительно безболезненно эту работу выполняют два модуля: Win32: :ChangeNotify Кристофера Мадсена (Christopher J. Madsen) и Win32: :AdvNotify Амина Мюлей Рамдана (Amine Moulay Ramdane). В примерах этого раздела будет использоваться второй, т. к. он более гибкий.

Работа с модулем Win32: : AdvNotify- это многошаговый процесс.

На следующем шаге нужно создать следящий поток (monitoring thread) для интересующего нас каталога. Win32: :AdvNotify позволяет следить сразу за набором каталогов, для этого необходимо лишь создать несколько потоков. Мы же будем следить только за одним каталогом:

Sthread = $aob]->StartThread(Directory => 'C:\terr.c'.

Filter => All, WatchSubtree -> 0) or die "Невозможно начать поток\п":

Первый параметр этого метода говорит сам за себя; рассмотрим остальные.

Установив Filter в одно из приведенных значений (табл. 4.1) или в их комбинацию (SETTING 1 | SETTING2 | SETTINGS. ..), можно следить за различными типами изменений.



- Начало - - Назад - - Вперед -