如何获得防火墙和防病毒状态与WinAPI(不是WMI)

How to get Firewall and Antivirus Status with WinAPI (NOT WMI)

本文关键字:WinAPI 不是 WMI 状态 何获得 防火墙 防病毒      更新时间:2023-10-16

如何使用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