我正在尝试找到一种解决方案,我可以使用该解决方案对已上载到Azure blob存储的文件执行病毒扫描.我想知道是否可以将文件复制到Worker Role实例上的本地存储,调用Antimalware for Azure Cloud Services以对该特定文件执行扫描,然后根据文件是否干净,相应地处理文件.
如果工作者角色无法以编程方式调用扫描,是否有一种确定的方法来检查文件是否已被扫描以及文件是否已被清除(一旦将其复制到本地存储)(我不知道该服务是否真实存在)添加新文件时的时间扫描,还是只按计划运行?
最佳答案 我们没有找到直接的API,但反恶意软件服务符合
Windows桌面病毒检查程序使用的标准,因为它们实现了IAttachmentExecute COM API.
因此,我们最终实现了一个文件上载服务,该服务将上载的文件写入隔离区本地资源,然后调用IAttachmentExecute API.如果文件被感染,那么根据使用的反恶意软件服务,它将抛出异常,静默删除文件或将其标记为无法访问.因此,通过尝试读取文件的第一个字节,我们可以测试文件是否仍然可访问.
var type = Type.GetTypeFromCLSID(new Guid("4125DD96-E03A-4103-8F70-E0597D803B9C"));
var svc = (IAttachmentExecute)Activator.CreateInstance(type);
try {
svc.SetClientGuid(ref clientGuid);
svc.SetLocalPath(path);
svc.Save();
}
finally
{
svc.ClearClientState();
}
using (var fileStream = File.OpenRead(path))
{
fileStream.ReadByte();
}
[Guid("73DB1241-1E85-4581-8E4F-A81E1D0F8C57")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAttachmentExecute
{
void SetClientGuid(ref Guid guid);
void SetLocalPath(string pszLocalPath);
void Save();
void ClearClientState();
}