程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi深度探索之外殼執行操作記錄器(4)

Delphi深度探索之外殼執行操作記錄器(4)

編輯:Delphi

進一步,我們甚至可以利用這點實現一個自定義的安全認證機制,根據用戶要求限制運行的程序。有興趣的朋友可以試驗一下,一定很有意思。

有一點要注意的是,在Execute方法下不能調用ShellExecute和ShellExecuteEx函數外部程序,如果是這樣的話,我們的Execute方法又會被新的ShellExecute調用,這樣系統就會進入死循環。如果我們確實想在Execute方法中調用外部程序的話,可以使用CreateProcess或WinExec函數來替代。這兩個函數不會被ShellExecuteHook截獲。

對於外殼動作記錄器來說,只要在Execute方法中記錄程序信息到日志文件中就可以了,代碼非常簡單,因為所有需要的信息都在TShellExecuteInfo記錄中包含了,這裡只記錄運行的動作、文件名和時間,需要記錄其他信息的話,大家可自行修改,代碼示意如下:

function TTShellExecuteHook.Execute(
var ShellExecuteInfo: TShellExecuteInfo): HResult;
var
 FileStream: TFileStream;
 a:TStringList;
 S:string;
begin
 Result := S_FALSE;
 with ShellExecuteInfo do
 begin
  FileStream:=TFileStream.Create('c:\shellexecutehook.txt',fmopenwrite);
  S:=string(lpVerb)+':'+string(lpFile)+DateTimeToStr(Now)+#13#10;
  FileStream.Seek(FileStream.Size,soFromBeginning);
  FileStream.Write(PChar(S)^,Length(S));
  FileStream.Free;
 end;
end;
注冊ShellExecuteHook

要想使COM對象被外殼加載,需要在注冊表中注冊一些信息。在下面這個子鍵中添加COM類的GUID及描述字符串後就可以了(描述字符串可以不賦值,但不妨給一個以便於識別)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved