防止資料夾被刪除的技巧

2021-12-29 19:41:02 字數 3034 閱讀 3141

librarycopyhook;

uses

comserv,

copymainin』copymain.pas』;

exports

dllgetclassobject,

dllcanunloadnow,

dllregisterserver,

dllunregisterserver;

begin

end.

//////////

unitcopymain;

inte***ce

useswindows,comobj,shlobj;

type

tcopyhook=class(tcomobject,icopyhook)

protected

functioncopycallback(wnd:hwnd;wfunc,wflags:uint;pszsrcfile:pansichar;

dwsrcattribs:dword;pszdestfile:pansichar;dwdestattribs:dword):uint;stdcall;

end;

tcopyhookfactory=class(tcomobjectfactory)

protected

functiongetprogid:string;override;

procedureapproveshellextension(register:boolean;constclsid:string);

virtual;

public

procedureupdateregistry(register:boolean);override;

end;

implementation

usescomserv,sysutils,registry;

//file://當windows外殼程式執行資料夾或者印表機埠操作時,copycallback

//file://方法就會被呼叫。

functiontcopyhook.copycallback(wnd:hwnd;wfunc,wflags:uint;

pszsrcfile:pansichar;dwsrcattribs:dword;pszdestfile:pansichar;

dwdestattribs:dword):uint;

const

fo_copy=2;

fo_delete=3;

fo_move=1;

fo_rename=4;

varsop:string;

begin

casewfuncof

fo_copy:sop:=format(』你確定要將%s拷貝到%s嗎?』,[pszsrcfile,pszdestfile]);

fo_delete:sop:=format(』你確定要將%s刪除嗎?』,[pszsrcfile]);

fo_move:sop:=format(』你確定要將%s轉移到%s嗎?』,[pszsrcfile,pszdestfile]);

fo_rename:sop:=format(』你確定要將%s重新命名為%s嗎?』,[pszsrcfile,pszdestfile]);

else

sop:=format(』無法識別的操作**%d』,[wflags]);

end;

//提示,讓使用者決定是否執行操作

result:=messagebox(wnd,pchar(sop),

』檔案掛鉤演示』,mb_yesnocancel);

end;

functiontcopyhookfactory.getprogid:string;

begin

result:=』』;

end;

proceduretcopyhookfactory.updateregistry(register:boolean);

varclsid:string;

begin

clsid:=guidtostring(classid);

inheritedupdateregistry(register);

approveshellextension(register,clsid);

ifregisterthen

//file://將clsid加入到登錄檔的copyhookhandlers中

createregkey(』directory/shellex/copyhookhandlers/』+classname,』』,

clsid)

else

deleteregkey(』directory/shellex/copyhookhandlers/』+classname);

end;

proceduretcopyhookfactory.approveshellextension(register:boolean;

constclsid:string);

const

sapprovekey=』software/microsoft/windows/currentversion/shellextensions/approved』;

begin

withtregistry.createdo

tryrootkey:=hkey_local_machine;

ifnotopenkey(sapprovekey,true)thenexit;

ifregisterthenwritestring(clsid,description)

elsedeletevalue(clsid);

finally

free;

end;

end;

const

clsid_copyhook:tguid=』』;

libid_copyhook:tguid=』』;

initialization

tcopyhookfactory.create(comserver,tcopyhook,clsid_copyhook,

』cr_copyhook』,』檔案操作掛鉤演示』,cimultiinstance,tmapartment);

end.

Linux防止檔案或資料夾被惡意刪除

在linux系統中,有個chattr命令,可修改檔案或資料夾的屬性。如果平時有些重要檔案需要防止被惡意刪除,可使用此命令實現。chattr rv v 版本編號 屬性 檔案或目錄 假如 important是個放置重要檔案的資料夾,可使用下面命令實現 sudo chattr r a important上...

git 恢復被刪除的檔案

剛接觸 git 的時候,當碰到之前刪除某個檔案 比如 後面開發又需要恢復的時候,會採取非常笨的方法。從某乙個檔案存在的 commit 切換出乙個新的分支,再將需要的某個檔案拷貝出來。像是類的檔案有時候會直接叫 ui 設計師再發乙份。這種需要恢復檔案情況不多時 好像確實也不是太多,目前本人遇到這種情況...

SQL SERVER 日誌檔案被刪除後的修復

今天一時間著急把sqlserver資料庫的日誌檔案給刪除了,結果怎麼附加也附加不上來了。急得只出汗,後來找到了下面這篇文章,試了試,還是真管用,謝天謝地。現 下來 sql server 修復,sql恢復,誤刪除表,sql 資料恢復,sql server 資料庫恢復修復,sql 找回業務。使用資料庫的...