首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用WMI或其他WMI检测安装在windows 2003 server和2008 server 2003 server R2and 2008 server R2上的杀毒软件

如何使用WMI或其他WMI检测安装在windows 2003 server和2008 server 2003 server R2and 2008 server R2上的杀毒软件
EN

Stack Overflow用户
提问于 2010-12-09 09:41:43
回答 1查看 6.8K关注 0票数 3

我使用WMI来检测操作系统上存在反病毒,并使用Namespace:\root\SecurityCenter和\root\SecurityCenter、\root\SecurityCenter、\root\

代码语言:javascript
复制
if(isHLOSVersion( ))

 hres = pLoc->ConnectServer( _bstr_t(L"root\\SecurityCenter2"),
 // Object path of SecurityCenter 

 NULL,                    // User name. NULL = current user 

         NULL,                    // User password. NULL = current 

         0,                       // Locale. NULL indicates current 

         NULL,                    // Security flags. 

         0,                       // Authority (e.g. Kerberos) 

         0,                       // Context object  

         &pSvc                    // pointer to IWbemServices proxy 

         ); 
 else
  hres = pLoc->ConnectServer( _bstr_t(L"root\\SecurityCenter"),
 // Object path of SecurityCenter 

   NULL,                    // User name. NULL = current user 

         NULL,                    // User password. NULL = current 

         0,                       // Locale. NULL indicates current 

         NULL,                    // Security flags. 

         0,                       // Authority (e.g. Kerberos) 

         0,                       // Context object  

         &pSvc                    // pointer to IWbemServices proxy 

         ); 

但是,对于Windows2003Server和2008Server2003Server R2and 2008Server R2,这些名称空间是不存在的,因此在那里不起作用。

请让我知道如何检测杀毒是否存在windows 2003服务器和2008年服务器2003服务器R2and 2008服务器R2操作系统。

EN

回答 1

Stack Overflow用户

发布于 2011-03-02 17:30:34

该名称空间在Windows平台上是不可用的,我认为它可能不适合于工作站(即离开)。

您可能可以使用WscGetSecurityProviderHealth()获得相同的结果。

请参阅http://msdn.microsoft.com/en-us/library/bb432506.aspx

下面是我的一些看似有用的简单示例:

代码语言:javascript
复制
#define _WIN32_WINNT _WIN32_WINNT_WIN7
#include <Windows.h>
#include <Wscapi.h>
#include <iostream>

#pragma comment(lib, "Wscapi")


int main(int argc, char* argv[])
{
   WSC_SECURITY_PROVIDER_HEALTH health;
   const DWORD dwAntivirus(WSC_SECURITY_PROVIDER_ANTIVIRUS);

   HRESULT hr = WscGetSecurityProviderHealth(dwAntivirus, &health);
   if (FAILED(hr))
   {
      std::cerr << "Error " << std::hex 
                << std::showbase << hr << "\n";
      return -1;
   }
   switch (health)
   {
      case WSC_SECURITY_PROVIDER_HEALTH_GOOD:
         std::cout << "Antivirus health is good\n";
         return 0;
      case WSC_SECURITY_PROVIDER_HEALTH_NOTMONITORED:
         std::cout << "Antivirus health is not monitored\n";
         return 1;
      case WSC_SECURITY_PROVIDER_HEALTH_POOR:
         std::cout << "Antivirus health is poor\n";
         return 2;
      case WSC_SECURITY_PROVIDER_HEALTH_SNOOZE:
         std::cout << "Antivirus health is snooze\n";
         return 3;
      default:
         std::cout << "Unexpected antivirus health value: "
                   << std::hex << std::showbase 
                   << health << "\n";
         return 4;
   }
}

更新2012年12月9日

Alex指出(下面),这不适用于Windows,只适用于Windows的工作站版本。经过思考,我突然意识到,这可能是故意的,而且实际上可能是最好的。

应用程序真的需要知道服务器的状态吗?大多数服务器的安全程序都有当服务器失败时设置警报的机制。管理员将监视这些警报,并修复什么是坏的。应用程序应该简单地表现为安全是完全可操作的。

如果您确实必须了解某个特定程序,您可以在进程中查找它的exe名称,并查看进程是否正在运行并正在消耗cpu (而不是挂起)。除此之外,您可能需要与安全程序的供应商一起工作:他们可能有一个API来查询程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4396757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档