gpt4 book ai didi

c++ - 如何在 C++ 中使用 WMI 或其他 WMI 检测安装在 Windows 2003 服务器和 2008 服务器 2003 服务器 R2 和 2008 服务器 R2 上的防病毒软件

转载 作者:太空狗 更新时间:2023-10-29 21:51:09 30 4
gpt4 key购买 nike

我已经使用 WMI 检测操作系统上是否存在防病毒软件,itz 正常工作并通过使用命名空间向我显示防病毒信息,例如 win xp 和 window7 上的名称和实例 ID:\root\SecurityCenter 和\root\SecurityCenter,\root\Security。

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

);

但在 Windows 2003 服务器和 2008 服务器 2003 服务器 R2 和 2008 服务器 R2 的情况下,上述命名空间不存在,因此它在那里不起作用。

请告诉我如何检测 Windows 2003 服务器和 2008 服务器、2003 服务器 R2 和 2008 服务器 R2 操作系统是否存在防病毒软件。

最佳答案

该命名空间在 Windows Server 平台上不可用,我认为它可能已被 Workstation 弃用(即消失)。

您或许可以使用 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 Server 上不起作用,只能在 Windows 的工作站版本上起作用。回想起来,我觉得这可能是故意的,事实上,可能是为了最好。

应用程序真的需要知道服务器的状态吗?大多数服务器安全程序都有在失败时设置警报的机制。管理员将监控这些警报并修复损坏的部分。应用程序应该简单地表现得好像安全性是完全可操作的。

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

关于c++ - 如何在 C++ 中使用 WMI 或其他 WMI 检测安装在 Windows 2003 服务器和 2008 服务器 2003 服务器 R2 和 2008 服务器 R2 上的防病毒软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4396757/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com