如何获得防火墙和防病毒状态与WinAPI(不是WMI)
How to get Firewall and Antivirus Status with WinAPI (NOT WMI)
如何使用WinAPI (NOT WMI)在c++中获取防火墙和防病毒状态?
在vista+中,这可以通过WscGetSecurityProviderHealth来完成。
的例子:
#include <Windows.h>
#include <string>
#include <iostream>
#include <Wscapi.h>
#pragma comment(lib, "Wscapi.lib")
using namespace std;
string printStatus(WSC_SECURITY_PROVIDER_HEALTH status)
{
switch (status)
{
case WSC_SECURITY_PROVIDER_HEALTH_GOOD: return "GOOD";
case WSC_SECURITY_PROVIDER_HEALTH_NOTMONITORED: return "NOTMONITORED";
case WSC_SECURITY_PROVIDER_HEALTH_POOR: return "POOR";
case WSC_SECURITY_PROVIDER_HEALTH_SNOOZE: return "SNOOZE";
default: return "Status Error";
}
}
void getHealth()
{
WSC_SECURITY_PROVIDER_HEALTH health;
if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_FIREWALL, &health))
cout << "FIREWALL: " << printStatus(health) << endl;
if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_AUTOUPDATE_SETTINGS, &health))
cout << "AUTOUPDATE: " << printStatus(health) << endl;
if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_ANTIVIRUS, &health))
cout << "ANTIVIRUS: " << printStatus(health) << endl;
if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_ANTISPYWARE, &health))
cout << "ANTISPYWARE: " << printStatus(health) << endl;
if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_INTERNET_SETTINGS, &health))
cout << "INTERNET SETTINGS: " << printStatus(health) << endl;
if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL, &health))
cout << "UAC: " << printStatus(health) << endl;
if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_SERVICE, &health))
cout << "SERVICE: " << printStatus(health) << endl;
if (S_OK == WscGetSecurityProviderHealth(WSC_SECURITY_PROVIDER_ALL, &health))
cout << "ALL: " << printStatus(health) << endl;
}
void main()
{
getHealth();
}
可能的输出:
FIREWALL: POOR
AUTOUPDATE: GOOD
ANTIVIRUS: POOR
ANTISPYWARE: POOR
INTERNET SETTINGS: GOOD
UAC: GOOD
SERVICE: GOOD
ALL: POOR
相关文章:
- 检查输入是否不是整数或数字
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 为什么使用SFINAE而不是函数重载
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 为什么std::valarray不是算术的
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- MSVC是否支持C++11样式的属性而不是__declspec
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 为什么make_tie不是一件事
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 为什么std::isnan 不是 constexpr?
- GlobalAlloc而不是其他分配方法
- 当比特(而不是字节)的顺序至关重要时的持久性
- 如何在类中使用WINAPI函数(不是回调)?
- 奇怪的字符而不是在WinAPI中使用Unicode的国家字母
- 如何使用自己的坐标而不是wParam?(使用winapi)
- WinAPI:如何强制DATETIMEPICK使用标准日历而不是本地日历设置
- 如何获得防火墙和防病毒状态与WinAPI(不是WMI)
- WINAPI -窗口显示在调试版本中,而不是在发布版本中