如何检测是否安装了virusscanner和/或防火墙? (以及其他一些与安全相关的问题。)

时间:2009-09-22 10:45:41

标签: windows-vista antivirus

我有一个应用程序,我正在尝试确保它在安全的环境中运行。首先,我检查是否Windows is genuine,这使得用户更有可能使其保持最新状态。如果没有,我只是弹出一条消息,警告用户可能存在风险,因为他仍然需要验证Windows。

现在,我想多做一点。我还想检查用户是否安装了virusscanner。我不在乎哪一个,只要他安装了一个。然后检查是否安装了防火墙。如果可能的话,我想检查用户上次更新Windows /扫描仪/防火墙的时间,以确保它不会太旧。所以:

1)如何检查是否安装了virusscanner? 2)如何确定更新病毒扫描仪的时间? 3)如何检测virusscanner何时进行最后一次全系统检查? 4)如何检测防火墙是否已安装并处于活动状态? 5)如何检查Windows何时收到最新更新?

基本上,当我的应用程序启动时,我想显示一个带警告的屏幕(每天只有一次)以防万一这些事情都有问题。这是因为我的应用程序处理用户从其客户收集的各种敏感信息。 (其中包括银行帐号,护照号码,NAW + DOB,收入等等。)基本上,如果系统出现问题,用户必须确认他已经知道这些问题。如果他继续知道他的系统可能不安全,那么它可能会从我的申请中承担责任......


语言?基本上是C ++或Delphi for WIN32示例和C#for .NET示例。它更多地是关于.NET / Windows API / .NET而不是语言。

2 个答案:

答案 0 :(得分:7)

我认为你可以通过WMI

完成大部分工作

这样的事情:

ManagementObjectSearcher wmiData = new ManagementObjectSearcher(@"root\SecurityCenter", "SELECT * FROM AntiVirusProduct");
ManagementObjectCollection data = wmiData.Get();

foreach (ManagementObject virusChecker in data)
{
    // This is the virus checkers name.
    String virusCheckerName = virusChecker["displayName"];
}

[你没有提到什么语言,所以上面的例子是在C#中,但WMI可以从几乎任何东西完成]

[编辑:您可以执行相同操作,但使用“FirewallProduct”代替防火墙信息。另外,对于反病毒,您可以查看结果上的“productUptoDate”属性,了解其是否为最新信息。

WMI reference应该可以帮助您找到其他人。 (1,2,3和4我很确定可以通过WMI获得.5我不太确定,但我认为应该是这样)

您可能会发现WMI Code Creator有助于测试和确定您需要使用的查询/对象。 ScriptomaticWMI Admin tools也许有用。

答案 1 :(得分:3)

由于我一直在寻找C ++而不是.NET依赖的方式,我将这个答案和MSDN example: Getting WMI Data from the Local Computer混合在一起。

为了获取AV名称,需要更改的命令是:

  • _bstr_t(L"ROOT\\CIMV2")_bstr_t(L"ROOT\\SecurityCenter2")。请记住,根据this,SecurityCenter2适用于Win 7,Vista SP2及更高版本。在Vista SP2下,您需要使用 SecurityCenter
  • bstr_t("SELECT * FROM Win32_OperatingSystem")bstr_t("SELECT * FROM AntivirusProduct")
  • hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);hr = pclsObj->Get(L"displayName", 0, &vtProp, 0, 0);

此已更改的代码已经过检查并完全正常工作。

对于更简单的方法,您可以始终迭代this algorithm并按名称查找AV。