我的IIS服务上上设有一个论坛,它允许用户上传资料.虽然限制了其上传文件的扩展名.但有人还可以将木马上传上去.我想能过Delphi制作一个后台监控程序.主要是监控一个目录中,只允许有指定的扩展名的文件.其他扩展名的文件将其删除,请问如何实现谢谢
解决方案 »
- 一个算法!
- 如何判断一个QuickRep的打印任务完成?
- 小弟斗胆发个贴:我准备写一本关于Delphi的书籍先把目录贴出来,准备接受大家的板砖
- 怎样将编写好的程序打包
- 弄不出来了……??
- 怎么让自定义的属性在Object inspector出现下拉框?
- 关于在private里定义procedure的问题
- 简单问题:类里面的属性可以定义默认值吗?
- ★★★快来抢100分★★★:<<delphi5开发人员指南程序>>第11章NOSYNCH.dpr中GlobalArray从(0,0,0,0....)到(1,3,5,7,9.....)变化的原理是什么?
- 数据表中记录的查找问题
- 如何在动态创建的控件上使用setfocus?急,在线等,分不够再加!!!
- 小問題!
//注册一个事件响应~~
//代码如下~~
unit unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShlObj, ShellAPI, Menus;const
WM_SHNOTIFY = WM_USER + 10;type
Tform1 = class(TForm)
MemoNotifyLog: TMemo;
MainMenu1: TMainMenu;
N1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
FNotifyHandle: THandle;
procedure WMSHNOTIFY(var Msg: TMessage); message WM_SHNOTIFY;
public
{ Public declarations }
end;var
form1: Tform1;implementation
uses FileCtrl;
{$R *.dfm}type
NOTIFYREGISTER = packed record
pidlPath: PItemIDList;
bWatchSubtree: BOOL;
end;
PNotifyRegister = ^NOTIFYREGISTER;{$WARNINGS OFF}
function SHChangeNotifyRegister(hWnd: HWND; dwFlags: Integer;
wEventMask: Cardinal; uMsg: UINT; cItems: Integer;
lpItems: PNotifyRegister): HWND; stdcall; external Shell32 index 2;function SHChangeNotifyDeregister(hWnd: HWND): Boolean; stdcall;
external Shell32 index 4;function SHILCreateFromPath(pszPath: PChar; ppidl: PItemIDList;
rgflnOut: PDWORD): HResult; stdcall; external Shell32 index 28;
{$WARNINGS ON}
procedure Tform1.FormCreate(Sender: TObject);
var
vNotifyRegister: NOTIFYREGISTER;
vAttributes: WORD;
vItemIDList: PItemIDList;
Dir: string;
const
SELDIRHELP = 1000;
begin
Dir := '我的电脑';
//if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],SELDIRHELP) then ;
caption:='目录监视:'+Dir;
SHILCreatefromPath(pchar(Dir), @vItemIDList, @vAttributes);
vNotifyRegister.pidlPath := vItemIDList;
vNotifyRegister.bWatchSubtree := True; FNotifyHandle := SHChangeNotifyRegister(Handle,
SHCNF_TYPE or SHCNF_IDLIST,
SHCNE_ALLEVENTS or SHCNE_INTERRUPT, WM_SHNOTIFY, 1, @vNotifyRegister); MemoNotifyLog.Clear;
end;procedure Tform1.FormDestroy(Sender: TObject);
begin
SHChangeNotifyDeregister(FNotifyHandle);
end;procedure Tform1.WMSHNOTIFY(var Msg: TMessage);
type
PSHNOTIFYSTRUCT = ^SHNOTIFYSTRUCT;
SHNOTIFYSTRUCT = packed record
dwItem1: PItemIDList;
dwItem2: PItemIDList;
end;
var
vBuffer: array[0..MAX_PATH] of Char;
pidlItem: PSHNOTIFYSTRUCT;
S: string;
begin
pidlItem := PSHNOTIFYSTRUCT(Msg.wParam);
SHGetPathFromIDList(pidlItem.dwItem1, vBuffer);
S := vBuffer;
SHGetPathFromIDList(pidlItem.dwItem2, vBuffer);
case Msg.lParam of //根据参数设置提示消息
SHCNE_RENAMEITEM: S := '重命名文件' + S + '为' + vBuffer;
SHCNE_CREATE: S := '建立文件 文件名:' + S;
SHCNE_DELETE: S := '删除文件 文件名:' + S;
SHCNE_MKDIR: S := '新建目录 目录名:' + S;
SHCNE_RMDIR: S := '删除目录 目录名:' + S;
SHCNE_MEDIAINSERTED: S := S + '中插入可移动存储介质';
SHCNE_MEDIAREMOVED: S := S + '中移去可移动存储介质' + S + ' ' + vBuffer;
SHCNE_DRIVEREMOVED: S := '移去驱动器' + S;
SHCNE_DRIVEADD: S := '添加驱动器' + S;
SHCNE_NETSHARE: S := '改变目录' + S + '的共享属性';
SHCNE_ATTRIBUTES: S := '改变文件目录属性 文件名' + S;
SHCNE_UPDATEDIR: S := '更新目录' + S;
SHCNE_UPDATEITEM: S := '更新文件 文件名:' + S;
SHCNE_SERVERDISCONNECT: S := '断开与服务器的连接' + S + ' ' + vBuffer;
SHCNE_UPDATEIMAGE: S := 'SHCNE_UPDATEIMAGE';
SHCNE_DRIVEADDGUI: S := 'SHCNE_DRIVEADDGUI';
SHCNE_RENAMEFOLDER: S := '重命名文件夹' + S + '为' + vBuffer;
SHCNE_FREESPACE: S := '磁盘空间大小改变';
SHCNE_ASSOCCHANGED: S := '改变文件关联';
else S := '未知操作' + IntToStr(Msg.lParam);
end;
MemoNotifyLog.Lines.Add(DateTimeTostr(Now)+' '+S);
end;procedure Tform1.N5Click(Sender: TObject);
var s:string;
begin
end;procedure Tform1.N3Click(Sender: TObject);
begin
close;
end;end.
这里检查到如果是 建立文件 --并检查文件名,不符合的去删掉
讨论。IIS是以服务方式启动了,其上传文件也就...,你这样能成吗?