Форум программистов, компьютерный форум CyberForum.ru

Привязка dll\.exe (получить информацию о железе) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Gentoos
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 38
20.05.2013, 08:15     Привязка dll\.exe (получить информацию о железе) #1
Поделитесь кодом.
Хотелось бы получить информацию о железе, которые используется и по данной информации привязать библиотеку или исполняемый exe

Добавлено через 8 часов 35 минут
АП.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2013, 08:15     Привязка dll\.exe (получить информацию о железе)
Посмотрите здесь:

Dll и EXE,как их связать?)Очь нада) C++
Как из DLL вызвать функцию, находящуюся в exe? C++
[C++] dll в exe C++
Модули. Ассоциативный массив. (DLL, EXE) C++
Создание DLL и EXE в одном проекте C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
20.05.2013, 08:38     Привязка dll\.exe (получить информацию о железе) #2
Вот тебе для разбора один из вариантов получения каких то ID от железок. Разбирайся.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
CoUninitialize();
    CString wsClass="Win32_DiskDrive";
    HRESULT hres;
    hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 
    hres =  CoInitializeEx(0, COINIT_MULTITHREADED);
    hres =  CoInitializeSecurity(NULL,-1,NULL,NULL,RPC_C_AUTHN_LEVEL_DEFAULT,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE,NULL);             
    if (FAILED(hres)){  CoUninitialize();   return "";  }
 
    IWbemLocator *pLoc = NULL;
    hres = CoCreateInstance(CLSID_WbemLocator,0,CLSCTX_INPROC_SERVER,IID_IWbemLocator, (LPVOID *) &pLoc);
    if (FAILED(hres)){  CoUninitialize();   return "";  }
 
    IWbemServices *pSvc = NULL;
    hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"),NULL,NULL,0,NULL,0,0,&pSvc); 
    if (FAILED(hres)){  pLoc->Release();    CoUninitialize();   return ""; }
 
    hres = CoSetProxyBlanket(pSvc,RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_NONE,NULL,RPC_C_AUTHN_LEVEL_CALL,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE);
    if (FAILED(hres)){  pSvc->Release();    pLoc->Release();    CoUninitialize();   return "";  }
 
    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(bstr_t("WQL"),bstr_t("SELECT * FROM "+wsClass),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator);   
    if (FAILED(hres)){  pSvc->Release();    pLoc->Release();    CoUninitialize();   return "";  }
 
    IWbemClassObject *pclsObj;
    ULONG uReturn = 0;
    CString rezult="";
    CString wsKeyName;  
    char* buffer;
    buffer=new char[500];
    CString PNPDevID;
    USES_CONVERSION;
    while (pEnumerator)
    {
        VARIANT vtProp;
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE,1,&pclsObj, &uReturn);
        if(0 == uReturn){break;}
 
 
        CString wsKeyName="DeviceID";   
        LPCWSTR  str=T2W(wsKeyName);
        hr = pclsObj->Get(str, 0, &vtProp, NULL, 0);
        WideCharToMultiByte(CP_ACP, 0, vtProp.bstrVal,  -1,  buffer,  500, 0, 0);
        CString DevID=buffer;
        if(DevID=="\\\\.\\PHYSICALDRIVE0")
        {
            CString wsKeyName="PNPDeviceID";   
            LPCWSTR  str=T2W(wsKeyName);
            hr = pclsObj->Get(str, 0, &vtProp, NULL, 0);
            WideCharToMultiByte(CP_ACP, 0, vtProp.bstrVal,  -1,  buffer,  500, 0, 0);
            PNPDevID=buffer; 
        }
       
        VariantClear(&vtProp);
        pclsObj->Release();
    }
    delete buffer;
 
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    CoUninitialize();
 
    return PNPDevID;
Gentoos
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 38
01.06.2013, 21:56  [ТС]     Привязка dll\.exe (получить информацию о железе) #3
АП.
Еще варианты есть какие-либо?
Убежденный
Системный программист
 Аватар для Убежденный
14188 / 6203 / 984
Регистрация: 02.05.2013
Сообщений: 10,331
Завершенные тесты: 1
02.06.2013, 09:48     Привязка dll\.exe (получить информацию о железе) #4
Извлечение информации о "железе": интерфейс WMI, функции SetupDi, инструкция cpuid...
Только дело это темное: стоит пользователю поменять что-нибудь, как привязка отваливается.
Ab
75 / 75 / 1
Регистрация: 03.05.2012
Сообщений: 161
02.06.2013, 10:10     Привязка dll\.exe (получить информацию о железе) #5
Цитата Сообщение от Gentoos Посмотреть сообщение
Еще варианты есть какие-либо?
Вариантов огромное множество, начиная с самой простой (и, пожалуй, самой популярной) привязки к логическому диску, его S\N возвращает функция GetVolumeInformation(A,W). Возможна привязка к процессору, физическому диску, сетевой карте, мат. плате, видеоадаптеру и т. д. Или ко всему перечисленному вместе, через WMI можно очень много инфы о железе собрать. Только стоит ли игра свеч? Если ваш софт будет достаточно востребованным, то его всё равно "отвяжут". А для легальных пользователей - лишний геморрой.
Yandex
Объявления
02.06.2013, 10:10     Привязка dll\.exe (получить информацию о железе)
Ответ Создать тему
Опции темы

Текущее время: 15:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru