Windows Defender API 用于扫描目录中的恶意软件

Posted

技术标签:

【中文标题】Windows Defender API 用于扫描目录中的恶意软件【英文标题】:Windows Defender API to scan a directory for malwares 【发布时间】:2017-04-25 08:50:54 【问题描述】:

使用 Windows Defender API ,我正在尝试扫描文件夹中的恶意软件。 跟着The documentation我写了代码:

MPRESOURCE_INFO ResourceInfo =  0 ;
MPSCAN_RESOURCES ScanResource =  0 ;
PMPRESOURCE_INFO ResourceInfoArray = NULL;
...
ResourceInfo.Scheme = L"dir";
ResourceInfo.Path = L"C:\\temp";
ResourceInfo.Class = 0;

// ResourceInfoArray was Allocated before
*ResourceInfoArray = ResourceInfo;
ScanResource.dwResourceCount = 1;
ScanResource.pResourceList = ResourceInfoArray;

// Opened hMpManager before using MpScanStart
hRetval = MpScanStart(hMpManager, MPSCAN_TYPE_RESOURCE, 0, &ScanResource, NULL, &ScanHnadle);

我收到一条错误消息:An unexpected problem occurred. Install any available updates, and then try to start the program again. For information on installing updates, see Help and Support.

但是,如果我将 ResourceInfo 定义更改为:

ResourceInfo.Scheme = L"file";
ResourceInfo.Path = L"C:\\temp\\MyFile.exe";
ResourceInfo.Class = 0;

它工作得很好,以正确的方式检测文件。 归根结底-代码适用于文件,但不适用于目录。 有谁知道我在目录搜索中做错了什么?

【问题讨论】:

我猜它不扫描目录,只扫描文件,而且你需要自己遍历目录树。 上面写着"file" or "dir" 试试“C:\\Temp\\” 这个之前试过了,也不行 @KonstantinL: C:\\Temp\\​​ 没有命名目录。 C:\\Temp 确实如此。 【参考方案1】:

分析 MpCmdRun.exe 创建的事件日志我发现它使用方案“文件夹”而不是“目录”。这种变化使我的代码正常工作。

ResourceInfo.Scheme = L"folder";

文件夹路径不必以反斜杠结尾,但驱动器需要它:(F:\)。

【讨论】:

以上是关于Windows Defender API 用于扫描目录中的恶意软件的主要内容,如果未能解决你的问题,请参考以下文章

window server 2012 域策略 关闭 win10 Windows Defender

window server 2012 域策略 关闭 win10 Windows Defender

Windows defender怎么才能彻底关闭?

microsoft defender防病毒怎么打开

微软升级病毒库导致Win7/8.1端Defender出现bug

怎么关掉win10的windows defender