我使用WMI来检测操作系统上存在反病毒,并使用Namespace:\root\SecurityCenter和\root\SecurityCenter、\root\SecurityCenter、\root\
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操作系统。
发布于 2011-03-02 17:30:34
该名称空间在Windows平台上是不可用的,我认为它可能不适合于工作站(即离开)。
您可能可以使用WscGetSecurityProviderHealth()获得相同的结果。
请参阅http://msdn.microsoft.com/en-us/library/bb432506.aspx
下面是我的一些看似有用的简单示例:
#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来查询程序。
https://stackoverflow.com/questions/4396757
复制相似问题