1. Что-бы увидеть скрытые разделы и познать все тайны Darkneta Вам необходимо Зарегистрироваться или Войти.

Название установленного антивируса через WMI

Тема в разделе "С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby", создана пользователем Dr.Web, 3 апр 2020.

  1. Dr.Web

    Dr.Web Модератор | @dimadrweb
    Модератор

    Статус
    Оффлайн
    Регистрация:
    18 сен 2018
    Депозит:
    0 р.
    Гарант сделок:
    0
    Сообщения:
    592
    Розыгрышей:
    0
    Рейтинги:
    +121 / -0
    Страница Вконтакте:
    Telegram:
    Код:
    #include <wbemidl.h>
    #include <comutil.h>
    
    #pragma comment(lib, "wbemuuid.lib")
    #pragma comment(lib, "comsuppw.lib")
    
    HRESULT GetInstalledAvName(LPSTR installedAv)
    {
        HRESULT hr = S_OK;
        
        hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    
        if (FAILED(hr))
        {
            return hr;
        }
    
        hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE,
            NULL, EOAC_NONE, NULL);
    
        if (FAILED(hr))
        {
            CoUninitialize();
            return hr;
        }
    
        IWbemLocator* pWbemLocator = NULL;
        hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pWbemLocator);
    
        if (FAILED(hr))
        {
            CoUninitialize();
            return hr;
        }
    
        IWbemServices* pWbemServices = NULL;
        //в вин версиях ниже 7, вместо "root\\SecurityCenter2" - "\root\SecurityCenter", не проебитесь.
    //как получить версию винды смотрите в соседней теме
        hr = pWbemLocator->ConnectServer(_bstr_t(L"root\\SecurityCenter2"), NULL, NULL, 0, NULL, 0, NULL, &pWbemServices);
    
        if (FAILED(hr))
        {
            pWbemLocator->Release();
            CoUninitialize();
            return hr;
        }
    
        IEnumWbemClassObject* pEnum;
        hr = pWbemServices->ExecQuery(bstr_t("WQL"), bstr_t("Select * From AntivirusProduct"), WBEM_FLAG_FORWARD_ONLY, NULL, &pEnum);
    
        if (FAILED(hr))
        {
            pWbemLocator->Release();
            pWbemServices->Release();
            CoUninitialize();
            return hr;
        }
    
        ULONG uObjectCount = 0;
        IWbemClassObject* pWmiObject;
        hr = pEnum->Next(WBEM_INFINITE, 1, &pWmiObject, &uObjectCount);
    
        if (FAILED(hr))
        {
            pWbemLocator->Release();
            pWbemServices->Release();
            pEnum->Release();
            return hr;
        }
    
        VARIANT vtProp;
        hr = pWmiObject->Get(L"displayName", 0, &vtProp, 0, 0);
    
        if (FAILED(hr))
        {
            pWbemLocator->Release();
            pWbemServices->Release();
            pEnum->Release();
            pWmiObject->Release();
            return hr;
        }
    
        lstrcatA(installedAv, _com_util::ConvertBSTRToString(vtProp.bstrVal));
    
        return TRUE;
    }

    Использование:

    Код:
    int main()
    {
        static char installedAv[100];
        HRESULT hr = S_OK;
    
        hr = GetInstalledAvName(installedAv);
    
        if (FAILED(hr))
        {
            printf("Getting installedAv error\n");
        }
    
        printf("installedAv = %s\n", installedAv);
    
        return 0;
    }
    На Windows 7 SP1 отрабатывает корректно

    [​IMG]


    На Windows 10 1607 тоже всё ровно

    [​IMG]