Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить имя установленного антивируса 
:(
    Опции темы
k0xz
  Дата 23.10.2013, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 1.2.2012

Репутация: нет
Всего: нет



Собственно сабж, есть ли какой нибудь более удобный способ получить имя установленного АВ продукта, кроме как парсить Uninstall ветку реестра?
PM MAIL   Вверх
Dem_max
Дата 25.10.2013, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Через СОМ объект и WMI
http://www.opswat.com/blog/windows-securit...g-wmi-consumers

Код

Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\SecurityCenter")
Set colItems = oWMI.ExecQuery("Select * from AntiVirusProduct")

For Each objAntiVirusProduct In colItems
  msg = msg & "companyName: " & objAntiVirusProduct.companyName & vbCrLf
  msg = msg & "displayName: " & objAntiVirusProduct.displayName & vbCrLf
  msg = msg & "instanceGuid: " & objAntiVirusProduct.instanceGuid & vbCrLf
  msg = msg & "onAccessScanningEnabled: " & objAntiVirusProduct.onAccessScanningEnabled & vbCrLf
  msg = msg & "productUptoDate: " & objAntiVirusProduct.productUptoDate & vbCrLf
  msg = msg & "versionNumber: " & objAntiVirusProduct.versionNumber & vbCrLf
  msg = msg & vbCrLf
Next

WScript.Echo msg


Пример работы с COM и WMI
Код

#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
...
//---------------------------------------------------------------------------
void GetWmiInfo(TStrings *lpList, wchar_t* wsQuery)
{
    HRESULT hres;
    // устанавливаем контекст бехопасности
    hres =  CoInitializeSecurity(
            NULL,
            -1,                          // COM authentication
            NULL,                        // Authentication services
            NULL,                        // Reserved
            RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication
            RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
            NULL,                        // Authentication info
            EOAC_NONE,                   // Additional capabilities
            NULL                         // Reserved
    );
 
    IWbemLocator *pWbemLocator = NULL;    // провайдер WMI
    // инициализируем провайдера
    if(CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&pWbemLocator) == S_OK) {
        IWbemServices *pWbemServices = NULL;    // обьект, которому будем скармливать запрос (целевая машина)
        wchar_t* wsNamespace = (L"ROOT\\CIMV2"); // пространство имён
        // подключаемся к целевой машине
        if(pWbemLocator->ConnectServer(wsNamespace, NULL, NULL, NULL, 0, NULL, NULL, &pWbemServices) == S_OK){
            IEnumWbemClassObject *pEnumClassObject = NULL; // энумератор записей
            wchar_t* wsWQL=(L"WQL"); // язык запросов WQL
            //wchar_t* wsQuery=(L"select * from WIN32_diskdrive");//+wsClass; // сам запрос к классу
            // выполняем запрос
            if(pWbemServices->ExecQuery(wsWQL, wsQuery, WBEM_FLAG_RETURN_IMMEDIATELY,NULL, &pEnumClassObject) == S_OK){
                // параметры для перебора коллекции записей
                IWbemClassObject *pClassObject = NULL;
                ULONG uCount = 1, uReturned = 0;
                if(pEnumClassObject->Reset() == S_OK) { // ?????????
                    int iEnumIdx = 0;
                    hres = pEnumClassObject->Next(WBEM_INFINITE, uCount, &pClassObject, &uReturned);
                    // перебираем колекцию
                    while( hres == S_OK) {
                        lpList->Add("---------------- ["+IntToStr(iEnumIdx)+"] -----------------");
                        SAFEARRAY *pvNames = NULL;
                        if(pClassObject->GetNames(NULL, WBEM_FLAG_ALWAYS | WBEM_MASK_CONDITION_ORIGIN, NULL, &pvNames) == S_OK) {
                            long vbl, vbu;
                            SafeArrayGetLBound(pvNames, 1, &vbl);
                            SafeArrayGetUBound(pvNames, 1, &vbu);
                            for(long idx=vbl; idx<=vbu; idx++) {
                                long aidx = idx;
                                wchar_t *wsName = 0;
                                VARIANT vValue;
                                VariantInit(&vValue);
                                SafeArrayGetElement(pvNames, &aidx, &wsName);
                                BSTR bs = SysAllocString(wsName);
                                HRESULT hRes = pClassObject->Get(bs, 0, &vValue, NULL, 0);
                                SysFreeString(bs);
                                if(hRes == S_OK) {
                                    AnsiString s;
                                    Variant v = *(Variant*)&vValue;
                                    if(v.IsArray()){
                                        for(int i=v.ArrayLowBound(); i<=v.ArrayHighBound(); i++){
                                            Variant a = v.GetElement(i);
                                            if(!s.IsEmpty()) s+=", ";
                                            s+=VarToStr(a);
                                        }
                                    } else {
                                        s = VarToStr(v);
                                    }
                                    lpList->Add(AnsiString(wsName)+"="+s);
                                }
                                VariantClear(&vValue);
                                SysFreeString(wsName);
                            }
                        }
                        if(pvNames)SafeArrayDestroy(pvNames);
                        iEnumIdx++;
                        hres = pEnumClassObject->Next(WBEM_INFINITE, uCount, &pClassObject, &uReturned);
                    } // конец по WHILE
                    if(hres != S_OK) lpList->Add((hres&0xFFFF));
                } // конец по pEnumClassObject->Reset()
                if(pClassObject)pClassObject->Release();
            } // конец по выполнению запроса
            if(pEnumClassObject)pEnumClassObject->Release();
        } // конец по подключению
        if(pWbemServices)pWbemServices->Release();
    } // конец инициализации провайдера
    if(pWbemLocator)pWbemLocator->Release();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Memo1->Lines->Add("================== [WMI WQL] =================");
    wchar_t* ss=(L"select * from WIN32_diskdrive where InterfaceType='IDE'");
    GetWmiInfo(Memo1->Lines, ss);
    Memo1->Lines->Add("");
}
//---------------------------------------------------------------------------



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.