Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Мониторинг работы с файлами...


Makhanev A.S. ©   (2005-07-21 11:42:00) 

Нужно мониторить операции юзера с файлами: open, delete, rename, copy, move...
Причем, операции, производимые только непосредственно через Explorer, а также, корректно сечь работу на шарах, сечь не конкретную директорию, а действия юзера на всем винте/шарах.

Смотрел кучу компонент на torry, у всех есть явные недостатки (основной - мониторинг конкретной папки, а не всего диска).
Те же, что мониторят весь диск дают много лишне инфы, т.к. драйвера ловят все операции на диске, произмодимые всеми программами.

Вобщем интересуют любые компоненты/совету и предложения за вменяемую цену.


Оран Гутангович   (2005-07-23 02:20:00) [1]

Filemon
Есть исходники


Makhanev A.S.   (2005-07-22 14:21:00) [2]


> Kolan ©   (21.07.05 14:53) [1]
>
> > дают много лишне инфы
>
> Ну и что?

Это я про Alfa File Monitor. Он ловит только close и не отображал юзера, зато кидал кучу другой инфы.

И при всем этом стоит $2000.
Может кто его юзал? (вдруг мы неправильно его прикручивали)


> AlexKniga ©   (21.07.05 15:00) [2]

Спасибо, изучаем.


> oldman ©   (21.07.05 16:33) [4]
>
> > Нужно мониторить операции юзера с файлами: open, delete,
>
> > rename, copy, move...
>
> Поставь рядом с юзером соглядатая...
> Зачем это вообще нужно?

Не знаю, клиент попросил такую вот фичу.
Скорее всего она ему нужна для усиления corporate security, но я не уверен.


AlexKniga   (2005-07-21 17:09:00) [3]

jack128
Сработает. На CopyFile не сработает.


oldman   (2005-07-21 16:33:00) [4]


> Нужно мониторить операции юзера с файлами: open, delete,
> rename, copy, move...

Поставь рядом с юзером соглядатая...
Зачем это вообще нужно?


jack128   (2005-07-21 15:32:00) [5]

и если я из своей программы вызову ShFileOperation то этот хук не сработает??


AlexKniga   (2005-07-21 15:00:00) [6]

Если интересует тока Проводник Окон, то проще самому написать.
Вот пример Hook'а на копирование:
unit UHook;

interface

uses
 ShlObj, ComObj, Windows;

const
 CLSID_WEHook: TGUID='{9C123760-65F8-11D2-AEF9-444553540000}';

type
 TWEHook=class(TComObject, ICopyHook)
    public
     function CopyCallback(Wnd: HWND; wFunc, wFlags: UINT; pszSrcFile: PAnsiChar;
 dwSrcAttribs: DWORD; pszDestFile: PAnsiChar; dwDestAttribs: DWORD): UINT; stdcall;
  end;

implementation

uses
 Dialogs, Forms, ShellAPI, SysUtils, ComServ;

type
 TWEHookFactory=class(TComObjectFactory)
    public
procedure UpdateRegistry(Register: Boolean); override;
  end;

function TWEHook.CopyCallback(Wnd: HWND; wFunc, wFlags: UINT; pszSrcFile: PAnsiChar;
dwSrcAttribs: DWORD; pszDestFile: PAnsiChar; dwDestAttribs: DWORD): UINT;
var
 Msg:string;
begin
 Application.Handle:=Wnd;
 Msg:='';
 case wFunc of
   FO_COPY:    Msg:=Format('Действительно ли Вы хотите копировать директорию %s в %s?', [pszSrcFile,pszDestFile]);
   FO_DELETE: Msg:=Format('Действительно ли Вы хотите удалить директорию %s?', [pszSrcFile]);
   FO_MOVE: Msg:=Format('Действительно ли Вы хотите переместить директорию %s в %s?', [pszSrcFile,pszDestFile]);
   FO_RENAME: Msg:=Format('Действительно ли Вы хотите назвать директорию %s именем %s?', [pszSrcFile,pszDestFile]);
 end;
 if length(Msg)>0
 then
   Result:=MessageDlg(Msg, mtConfirmation, [mbYes,mbNo,mbCancel], 0)
 else
   Result:=id_Yes;
end;

procedure TWEHookFactory.UpdateRegistry(Register: Boolean);
begin
 if Register then begin
   CreateRegKey('Directory\shellex\CopyHookHandlers\WEHook', '', GUIDToString(CLSID_WEHook));
   CreateRegKey('CLSID\'+GUIDToString(CLSID_WEHook)+'\InprocServer32', 'ThreadingModel', 'Apartment');
   inherited UpdateRegistry(Register);
 end else begin
   DeleteRegKey('Directory\shellex\CopyHookHandlers\WEHook');
   inherited UpdateRegistry (Register);
 end;
end;

initialization

 TWEHookFactory.Create(ComServer, TWEHook, CLSID_WEHook, 'WEHook', 'WE Folder Test Hook', ciMultiInstance);

end.


Kolan   (2005-07-21 14:53:00) [7]


> дают много лишне инфы

Ну и что?


Наверх

Титульная страница Поиск, карта сайта Написать письмо