DELPHI 遍历PE文件


本文整理自网络,侵删。

 遍历除系统盘外的所有EXE文件,然后在过滤大小在5M以上的,然后在过滤检查剩下的是不是PE文件(PE文件的前俩字节是MZ,其实不要着步也可以,尽量提供把), 
然后把所有剩下的用MEMO显示出来
比如
d:\1.exe
d:\2.exe
让代码尽量简短.

var
dwDrivers: LongWord;
I: Integer;
sysDir: AnsiString;
strDriver,strCurrentDir: AnsiString;

FindFileData: TWIN32FindData;
hFindHandle: THandle;

dirList: TStringList;
begin
memo1.Lines.BeginUpdate;
dirList := TStringList.Create;
try
dwDrivers := GetLogicalDrives;
SetLength(sysDir,max_path);
SetLength(sysDir,GetSystemDirectory(PAnsiChar(sysDir),MAX_PATH));
sysDir := ExtractFileDrive(sysDir);
for I := 0 to 32 - 1 do
if 1= ((dwDrivers shr I) and 1) then begin

strDriver :=Chr(65 + i) + ':';
if strDriver <> sysDir then begin
//非系统盘
dirList.Add(strDriver);
end;
end;

while dirList.Count > 0 do begin
strCurrentDir := dirList.Strings[0];
dirList.Delete(0);

FillChar(FindFileData,sizeof(TWIN32FindData),0);
hFindHandle := FindFirstFile(PAnsiChar(strCurrentDir+'\*.*'),FindFileData);
if hFindHandle = INVALID_HANDLE_VALUE then continue;
try
if (FindFileData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then begin
if (AnsiString(FindFileData.cFileName) <> '.') and (AnsiString(FindFileData.cFileName) <> '..') then begin
dirList.Add(strCurrentDir + '\' + AnsiString(FindFileData.cFileName));
end;
end else begin
if (UpperCase(RightStr(FindFileData.cFileName,4)) = '.EXE')
and ((FindFileData.nFileSizeLow > 5*1024*1024) or (FindFileData.nFileSizeHigh <> 0)) then begin
//输出
Memo1.Lines.Add(strCurrentDir + '\' + AnsiString(FindFileData.cFileName));
end;
end;
finally
Windows.FindClose(hFindHandle);
end;
end;

finally
dirList.Free;
memo1.Lines.EndUpdate;
end;
end;

//取得所有逻辑盘符掩码
dwDrivers := GetLogicalDrives;

SetLength(sysDir,max_path);
//取得系统路径
SetLength(sysDir,GetSystemDirectory(PAnsiChar(sysDir),MAX_PATH));
//取得系统路径所在的盘符,即系统盘
sysDir := ExtractFileDrive(sysDir);
for I := 0 to 32 - 1 do
if 1= ((dwDrivers shr I) and 1) then begin

strDriver :=Chr(65 + i) + ':';
if strDriver <> sysDir then begin
//非系统盘时添加进扫描列表
dirList.Add(strDriver);
end;
end;

相关阅读 >>

Delphi try 抛出异常消息

Delphi使用indy组件http上传文件

Delphi fdmemtable1内存表字段排序

Delphi dateutils.ispm - 判断时间是否是下午

Delphi 设置richedit的行间距

Delphi判断字符是否是汉字

Delphi 根据邮箱地址分离出@前的内容

Delphi 实现php的urlencode编码效果

Delphi urldownloadtofile 实现文件下载

Delphi 连接 ssl tls 1.2

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...