С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Gentoos
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 38
#1

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

20.05.2013, 08:15. Просмотров 1968. Ответов 4
Метки нет (Все метки)

Поделитесь кодом.
Хотелось бы получить информацию о железе, которые используется и по данной информации привязать библиотеку или исполняемый exe

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

Dll файл в exe файле. Вшить dll libcurl - C++
Проблема такая что приходится таскать всегда libcurl.dll с собой. Надо все носить в одном exe. Enigma Virtual Box использовать нельзя,...

Привязка: как сделать лоадер для приложения (exe) с проверкой и выдачей ключей активации? - C++
Здравствуйте. У меня есть приложение .exe. Как сделать для него лоадер с проверкой и выдачей ключей активации.

[C++] dll в exe - C++
Как можно сделать так чтобы dll засунуть в exe программу чтоб при запуске она инжектилась в процесс hl.exe

Встроить dll в exe - C++
Создал простое окно в WinAPI, однако у пользователей у которых не стоит вижуал студио, требует msvcp120.dll Можно её как-то встроить в...

Внедрение DLL в EXE - C++
Здравствуйте, хочу написать свой объединитель exe и dll. Подскажите, как это можно сделать так, чтобы можно было при запуске использовать...

Dll и exe в одном файле - C++
Здравствуйте! Можно ли добавить свою dll в файл exe так чтобы при компиляции получился один файл. И при переносе не надо было таскать...

4
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
20.05.2013, 08:38 #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;
2
Gentoos
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 38
01.06.2013, 21:56  [ТС] #3
АП.
Еще варианты есть какие-либо?
0
Убежденный
Ушел с форума
Эксперт С++
15708 / 7219 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
02.06.2013, 09:48 #4
Извлечение информации о "железе": интерфейс WMI, функции SetupDi, инструкция cpuid...
Только дело это темное: стоит пользователю поменять что-нибудь, как привязка отваливается.
0
Ab
75 / 75 / 1
Регистрация: 03.05.2012
Сообщений: 161
02.06.2013, 10:10 #5
Цитата Сообщение от Gentoos Посмотреть сообщение
Еще варианты есть какие-либо?
Вариантов огромное множество, начиная с самой простой (и, пожалуй, самой популярной) привязки к логическому диску, его S\N возвращает функция GetVolumeInformation(A,W). Возможна привязка к процессору, физическому диску, сетевой карте, мат. плате, видеоадаптеру и т. д. Или ко всему перечисленному вместе, через WMI можно очень много инфы о железе собрать. Только стоит ли игра свеч? Если ваш софт будет достаточно востребованным, то его всё равно "отвяжут". А для легальных пользователей - лишний геморрой.
0
02.06.2013, 10:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2013, 10:10
Привет! Вот еще темы с ответами:

Редактировании файла .DLL и .exe - C++
Доброго времени суток дорогие форумчане! Прошу прощение если я ошибся разделом (перенесите пож.) :sorry: В общем нужно отредактировать...

Создание DLL и EXE в одном проекте - C++
Привет всем, я хочу создать большой проект и встала одна очень маленькая проблема, я чтобы не запутаться создал такую систему несколько...

Модули. Ассоциативный массив. (DLL, EXE) - C++
Добрый день, нужна помощь в следующем задании: написать программу. программа состоит из двух модулей (не понимаю, как они...

Как определить разрядность .EXE или .DLL? - C++
Как определить разрядность .EXE или .DLL? WINAPI функций вроде для етого нет. Я делаю сортировщик dll файлов. Остановился на том, што...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.