![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мониторинг работы с файлами...
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]
> дают много лишне инфы
Ну и что?