有一软件实现禁止新建文件,重命名文件,拖动文件,不知怎么实现(100分)

盛利

Unregistered / Unconfirmed
GUEST, unregistred user!
http://newxx.nease.net/suntongbu.htm<br>该软件在这里下载的,安装运行卸载后没有发现对系统有什么大的修改<br>其中禁止删除文件,禁止下载文件等估计是通过监视有没有确认删除文件的对话框<br>下载另存为的对话框来实现的,如果有这样的对话框则发消息关闭<br><br>但是实现禁止新建文件,重命名文件,拖动文件,不知怎么实现<br>望高手解答。
 
是针对NTFS格式还是WIN32也行,如果是NTFS的话系统有自带的设置权限的功能。
 
当然跟格式没有关系了,这个软件起码在98下和ntfs下都好用的。<br>不允许人新建文件,但是运行一些软件,比如自动新建了一个ini文件作为保存配置文件还是可以的。
 
应该是用了HOOK API的技术吧<br>查查相关资料看看
 
只是禁止Explorer的功能还是所有软件?<br>前者 扩展<br>后者 APIHOOK or 系统自带的监视机制
 
估计是HOOK吧<br>文件移动等操作的API是 SHFileOperation SHFileOperationA SHFileOperationW<br>这3个
 
晕,大家没有下载看看吧<br>应该是没有使用Hook<br>他只要这么几个文件<br>2003-07-28 &nbsp;12:43 &nbsp; &nbsp; &nbsp; &nbsp; 1,388,544 Msvbvm601.dll<br>2000-12-06 &nbsp;00:00 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 109,248 MSWINSCK.OCX<br>2003-11-29 &nbsp;21:18 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 232,427 sunflowerTools.exe<br>2003-07-28 &nbsp;12:43 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 102,160 Vb6chs.dll<br>2003-01-01 &nbsp;23:32 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1,177 xingfustop.dat<br>2003-11-29 &nbsp;20:04 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;32,768 sunmt.tew<br>2003-11-05 &nbsp;16:45 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;16,384 update.sun<br>2003-01-01 &nbsp;13:10 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;64 sunflowerTools.SUP<br>应该是vb6编的吧<br>使用hook起码该有个Dll吧<br>其中的3个Dll我看都是vb用的Dll文件哪<br>所有应该不会是Dll<br><br>大家不要考虑复杂了,<br>我原来想实现禁止文件删除的操作<br>想了很多办法,什么hook什么的,对于文件夹好实现<br>对于文件没有办法,<br>其实解决很简单,不关是直接删除还是删除到回收站<br>都会有确认框,那么不停的扫描有没有这个确认框就可以了<br>有确认框发个消息关闭就ok<br>多简单<br><br>大家还是帮我看看吧,免安装的,而且不会对系统有什么危害<br>这个程序技术可能不高,都是一些简单的东西<br>主要就是扫描窗口标题,发个消息关系<br>因为我建了个文件夹,名字是“确认文件删除”,这个文件夹一打开就被关闭了<br>但是解决了很多大家一直认为用很高的技术才能解决的问题<br>白猫黑猫,能抓老鼠就是好猫啊
 
晕 &nbsp;知道还问。。。。<br>&gt;&gt;其实解决很简单,不关是直接删除还是删除到回收站 都会有确认框&gt;&gt;不一定<br><br><br>&gt;&gt;Msvbvm601.dll<br>&nbsp; 懂VB的朋友 这个是什么啊??是不是VB.net的运行库啊?<br>&nbsp; Microsoft Visual Basic Virtual Machine?????<br>&nbsp; VB.net也带库运行???<br>
 
&gt;&gt;知道还问。。。。<br>我问的是实现禁止新建文件,重命名文件,拖动文件,不知怎么实现<br>从何而来的知道还问<br>&gt;&gt;其实解决很简单,不关是直接删除还是删除到回收站 都会有确认框&gt;&gt;不一定<br>不一定的情况是什么<br><br>我所要禁止的是用户通过键盘、鼠标进行删除文件(或新建等)操作,<br>程序内新建删除文件可以自由,要不成硬盘保护卡了。
 
学习吧!!
 
netproxy:<br>&nbsp; &nbsp; 晕,你要是不会,就不要答了,踢一脚就可以!<br>&nbsp; &nbsp;你要是会,答个shellapi,这能算答案呢???<br>&nbsp;<br>&nbsp; &nbsp;晕。。。晕。。。晕。。。晕。。。晕。。。晕。。。
 
&gt;&gt;其实解决很简单,不关是直接删除还是删除到回收站 都会有确认框&gt;&gt;不一定<br>不一定的情况是什么<br><br>不一定的情况是:<br>在<回收站>上按右键,点属性,然后把“显示删除确认对话框”的勾勾去掉。<br><br>其他不懂。
 
在<回收站>上按右键,点属性,然后把“显示删除确认对话框”的勾勾去掉。<br>这个到好办,我在注册表中设置,必需显示删除确认对话框,然后再禁止修改回收站的属性就可以了<br>不过hbsxcjp,还是谢了<br><br>大家还是没有说到我的问题上<br>我的问题是:<br>[h4]怎么实现禁止新建文件,重命名文件,拖动文件[/h4]<br>
 
采用HOOK<br>或<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>采用硬盘权限<br>
 
baomin:<br>&nbsp; &nbsp;你真招人讨厌,没看上面的内容啊,告诉你这样的内容就别发了<br>&nbsp; &nbsp;很多人都知道用apihook,硬盘什么,你会吗,把代码写出来<br>不会就不要说了,我说的那个软件肯定不是用apihook,硬盘保护之类的技术实现的
 
我没下载,不过看了网站上的说明和以上提示,我认为是应用了Policy就是<br>注册表的功能。
 
不是注册表<br>大多数功能是发close消息禁止那个窗口的
 
你是否想为你的Windows加上一双眼睛,察看使用者在机器上所做的各种操作(例如建立、删除文件;改变文件或目录名字)呢?<br><br>  这里介绍一种利用Windows未公开函数实现这个功能的方法。<br><br>  在Windows下有一个未公开函数SHChangeNotifyRegister可以把你的窗口添加到系统的系统消息监视链中,该函数在Delphi中的定义如下:<br><br>  Function SHChangeNotifyRegister(hWnd,uFlags,dwEventID,uMSG,cItems:LongWord;<br>  lpps:pIDLSTRUCT):integer;stdcall;external 'Shell32.dll' index 2;<br><br>  其中参数hWnd定义了监视系统操作的窗口得句柄,参数uFlags dwEventID定义监视操作参数,参数uMsg定义操作消息,参数cItems定义附加参数,参数lpps指定一个PIDLSTRUCT结构,该结构指定监视的目录。<br><br>  当函数调用成功之后,函数会返回一个监视操作句柄,同时系统就会将hWnd指定的窗口加入到操作监视链中,当有文件操作发生时,系统会向hWnd发送uMsg指定的消息,我们只要在程序中加入该消息的处理函数就可以实现对系统操作的监视了。<br><br>  如果要退出程序监视,就要调用另外一个未公开得函数SHChangeNotifyDeregister来取消程序监视。<br><br>  下面是使用Delphi编写的具体程序实现范例,首先建立一个新的工程文件,然后在Form1中加入一个Button控件和一个Memo控件,<br><br>  程序的代码如下:<br><br>  unit Unit1;<br>  interface<br>  uses<br>  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br>  StdCtrls,shlobj,Activex;<br>  const<br>  SHCNE_RENAMEITEM = $1;<br>  SHCNE_CREATE = $2;<br>  SHCNE_DELETE = $4;<br>  SHCNE_MKDIR = $8;<br>  SHCNE_RMDIR = $10;<br>  SHCNE_MEDIAINSERTED = $20;<br>  SHCNE_MEDIAREMOVED = $40;<br>  SHCNE_DRIVEREMOVED = $80;<br>  SHCNE_DRIVEADD = $100;<br>  SHCNE_NETSHARE = $200;<br>  SHCNE_NETUNSHARE = $400;<br>  SHCNE_ATTRIBUTES = $800;<br>  SHCNE_UPDATEDIR = $1000;<br>  SHCNE_UPDATEITEM = $2000;<br>  SHCNE_SERVERDISCONNECT = $4000;<br>  SHCNE_UPDATEIMAGE = $8000;<br>  SHCNE_DRIVEADDGUI = $10000;<br>  SHCNE_RENAMEFOLDER = $20000;<br>  SHCNE_FREESPACE = $40000;<br>  SHCNE_ASSOCCHANGED = $8000000;<br>  SHCNE_DISKEVENTS = $2381F;<br>  SHCNE_GLOBALEVENTS = $C0581E0;<br>  SHCNE_ALLEVENTS = $7FFFFFFF;<br>  SHCNE_INTERRUPT = $80000000;<br>  SHCNF_IDLIST = 0;<br>  // LPITEMIDLIST<br>  SHCNF_PATHA = $1;<br>  // path name<br>  SHCNF_PRINTERA = $2;<br>  // printer friendly name<br>  SHCNF_DWORD = $3;<br>  // DWORD<br>  SHCNF_PATHW = $5;<br>  // path name<br>  SHCNF_PRINTERW = $6;<br>  // printer friendly name<br>  SHCNF_TYPE = $FF;<br>  SHCNF_FLUSH = $1000;<br>  SHCNF_FLUSHNOWAIT = $2000;<br>  SHCNF_PATH = SHCNF_PATHW;<br>  SHCNF_PRINTER = SHCNF_PRINTERW;<br>  WM_SHNOTIFY = $401;<br>  NOERROR = 0;<br>  type<br>  TForm1 = class(TForm)<br>  Button1: TButton;<br>  Memo1: TMemo;<br>  procedure FormClose(Sender: TObject; var Action: TCloseAction);<br>  procedure Button1Click(Sender: TObject);<br>  procedure FormCreate(Sender: TObject);<br>  private<br>  { Private declarations }<br>  procedure WMShellReg(var Message:TMessage);message WM_SHNOTIFY;<br>  public<br>  { Public declarations }<br>  end;<br>  type PSHNOTIFYSTRUCT=^SHNOTIFYSTRUCT;<br>  SHNOTIFYSTRUCT = record<br>  dwItem1 : PItemIDList;<br>  dwItem2 : PItemIDList;<br>  end;<br>  Type PSHFileInfoByte=^SHFileInfoByte;<br>  _SHFileInfoByte = record<br>  hIcon :Integer;<br>  iIcon :Integer;<br>  dwAttributes : Integer;<br>  szDisplayName : array [0..259] of char;<br>  szTypeName : array [0..79] of char;<br>  end;<br>  SHFileInfoByte=_SHFileInfoByte;<br>  Type PIDLSTRUCT = ^IDLSTRUCT;<br>  _IDLSTRUCT = record<br>  pidl : PItemIDList;<br>  bWatchSubFolders : Integer;<br>  end;<br>  IDLSTRUCT =_IDLSTRUCT;<br>  function SHNotify_Register(hWnd : Integer) : Bool;<br>  function SHNotify_UnRegister:Bool;<br>  function SHEventName(strPath1,strPath2:string;lParam:Integer):string;<br>  Function SHChangeNotifyDeregister(hNotify:integer):integer;stdcall;<br>  external 'Shell32.dll' index 4;<br>  Function SHChangeNotifyRegister(hWnd,uFlags,dwEventID,uMSG,cItems:LongWord;<br>  lpps:pIDLSTRUCT):integer;stdcall;external 'Shell32.dll' index 2;<br>  Function SHGetFileInfoPidl(pidl : PItemIDList;<br>  dwFileAttributes : Integer;<br>  psfib : PSHFILEINFOBYTE;<br>  cbFileInfo : Integer;<br>  uFlags : Integer):Integer;stdcall;<br>  external 'Shell32.dll' name 'SHGetFileInfoA';<br>  var<br>  Form1: TForm1;<br>  m_hSHNotify:Integer;<br>  m_pidlDesktop : PItemIDList;<br>  implementation<br>  {$R *.DFM}<br>  function SHEventName(strPath1,strPath2:string;lParam:Integer):string;<br>  var<br>  sEvent:String;<br>  begin<br>  case lParam of //根据参数设置提示消息<br>  SHCNE_RENAMEITEM: sEvent := '重命名文件'+strPath1+'为'+strpath2;<br>  SHCNE_CREATE: sEvent := '建立文件 文件名:'+strPath1;<br>  SHCNE_DELETE: sEvent := '删除文件 文件名:'+strPath1;<br>  SHCNE_MKDIR: sEvent := '新建目录 目录名:'+strPath1;<br>  SHCNE_RMDIR: sEvent := '删除目录 目录名:'+strPath1;<br>  SHCNE_MEDIAINSERTED: sEvent := strPath1+'中插入可移动存储介质';<br>  SHCNE_MEDIAREMOVED: sEvent := strPath1+'中移去可移动存储介质'+strPath1+' '+strpath2;<br>  SHCNE_DRIVEREMOVED: sEvent := '移去驱动器'+strPath1;<br>  SHCNE_DRIVEADD: sEvent := '添加驱动器'+strPath1;<br>  SHCNE_NETSHARE: sEvent := '改变目录'+strPath1+'的共享属性';<br>  SHCNE_ATTRIBUTES: sEvent := '改变文件目录属性 文件名'+strPath1;<br>  SHCNE_UPDATEDIR: sEvent := '更新目录'+strPath1;<br>  SHCNE_UPDATEITEM: sEvent := '更新文件 文件名:'+strPath1;<br>  SHCNE_SERVERDISCONNECT: sEvent := '断开与服务器的连接'+strPath1+' '+strpath2;<br>  SHCNE_UPDATEIMAGE: sEvent := 'SHCNE_UPDATEIMAGE';<br>  SHCNE_DRIVEADDGUI: sEvent := 'SHCNE_DRIVEADDGUI';<br>  SHCNE_RENAMEFOLDER: sEvent := '重命名文件夹'+strPath1+'为'+strpath2;<br>  SHCNE_FREESPACE: sEvent := '磁盘空间大小改变';<br>  SHCNE_ASSOCCHANGED: sEvent := '改变文件关联';<br>  else<br>  sEvent:='未知操作'+IntToStr(lParam);<br>  end;<br>  Result:=sEvent;<br>  end;<br>  function SHNotify_Register(hWnd : Integer) : Bool;<br>  var<br>  ps:pIDLSTRUCT;<br>  begin<br>  {$R-}<br>  Result:=False;<br>  If m_hSHNotify = 0 then begin<br>  //获取桌面文件夹的Pidl<br>  if SHGetSpecialFolderLocation(0, CSIDL_DESKTOP,<br>  m_pidlDesktop)&lt;&gt; NOERROR then<br>  Form1.close;<br>  if Boolean(m_pidlDesktop) then begin<br>  ps.bWatchSubFolders := 1;<br>  ps.pidl := m_pidlDesktop;<br>  // 利用SHChangeNotifyRegister函数注册系统消息处理<br>  m_hSHNotify := SHChangeNotifyRegister(hWnd, (SHCNF_TYPE Or SHCNF_IDLIST),<br>  (SHCNE_ALLEVENTS Or SHCNE_INTERRUPT),<br>  WM_SHNOTIFY, 1, ps);<br>  Result := Boolean(m_hSHNotify);<br>  end<br>  Else<br>  // 如果出现错误就使用 CoTaskMemFree函数来释放句柄<br>  CoTaskMemFree(m_pidlDesktop);<br>  End;<br>  {$R+}<br>  end;<br>  function SHNotify_UnRegister:Bool;<br>  begin<br>  Result:=False;<br>  If Boolean(m_hSHNotify) Then<br>  //取消系统消息监视,同时释放桌面的Pidl<br>  If Boolean(SHChangeNotifyDeregister(m_hSHNotify)) Then begin<br>  {$R-}<br>  m_hSHNotify := 0;<br>  CoTaskMemFree(m_pidlDesktop);<br>  Result := True;<br>  {$R-}<br>  End;<br>  end;<br>  procedure TForm1.WMShellReg(var Message:TMessage); //系统消息处理函数<br>  var<br>  strPath1,strPath2:String;<br>charPath:array[0..259]of char;<br>  pidlItem:pSHNOTIFYSTRUCT;<br>  begin<br>  pidlItem:=PSHNOTIFYSTRUCT(Message.wParam);<br>   //获得系统消息相关得路径<br>  SHGetPathFromIDList(pidlItem.dwItem1,charPath);<br>  strPath1:=charPath;<br>  SHGetPathFromIDList(pidlItem.dwItem2,charPath);<br>  strPath2:=charPath;<br>  Memo1.Lines.Add(SHEvEntName(strPath1,strPath2,Message.lParam)+chr(13)+chr(10));<br>  end;<br>  procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>  begin<br>  //在程序退出的同时删除监视<br>  if Boolean(m_pidlDesktop) then<br>  SHNotify_Unregister;<br>  end;<br>  procedure TForm1.Button1Click(Sender: TObject); //Button1的Click消息<br>  begin<br>  m_hSHNotify:=0;<br>  if SHNotify_Register(Form1.Handle) then begin //注册Shell监视<br>  ShowMessage('Shell监视程序成功注册');<br>  Button1.Enabled := False;<br>  end<br>  else<br>  ShowMessage('Shell监视程序注册失败');<br>  end;<br>  procedure TForm1.FormCreate(Sender: TObject);<br>  begin<br>  Button1.Caption := '打开监视';<br>  end;<br>  end.<br><br>  运行程序,点击“打开监视”按钮,如果出现一个显示“Shell监视程序成功注册”的对话框,说明Form1已经加入到系统操作监视链中了,你可以试着在资源管理器中建立、删除文件夹,移动文件等操作,你可以发现这些操作都被记录下来并显示在文本框中。<br><br>  在上面的程序中多次使用到了一个PItemIDList的结构,这个数据结构指定Windows下得一个“项目”,在Windows下资源实现统一管理一个“项目”可以是一个文件或者一个文件夹,也可以是一个打印机等资源。另外一些API函数也涉及到了Shell(Windows外壳)操作,各位读者可以参考相应的参考资料。<br><br>  由于使用到了Windows的未公开函数,没有相关得参考资料,所以有一些未知得操作(在Memo1中会显示“未知操作”)。如果哪位读者有兴趣, http://member.netease.com/~blackcat 有实现该功能的VB程序下载。<br><br>  以上程序在Windows98、Windows2000、Delphi5下运行通过。 <br>这个你看看???
 
楼上的不管用 编译通过 但 不能运行
 
顶部