6

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

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

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

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


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

4

2 回答 2

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 参考应该可以帮助您找到其他参考。(1、2、3 和 4 我很确定可以通过 WMI 获得。5 我不太确定,但我认为应该可以)

您可能会发现WMI Code Creator有助于测试和找出您需要使用的查询/对象。ScriptomaticWMI 管理工具也可能有用。

于 2009-09-22T11:12:23.237 回答
3

由于我正在寻找 C++ 而不是 .NET 依赖的方式,因此我在这个答案和MSDN 示例之间混合:从本地计算机获取 WMI 数据

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

  • _bstr_t(L"ROOT\\CIMV2")_bstr_t(L"ROOT\\SecurityCenter2"). 请记住,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);.

此更改的代码已经过检查并且可以正常工作。

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

于 2015-03-05T08:53:31.893 回答