Войти
ПрограммированиеФорумОбщее

Как определить конфигурацию оборудования?

Страницы: 1 2 3 4 Следующая »
#0
0:35, 3 окт. 2009

Вот такая задача. ЦП и все, что с ним связано, я получу командой CPUID. А как насчет видеокарты, памяти, мат. платы и т.д.? Как это вообще делается?
Заранее спасибо за советы.


#1
0:52, 3 окт. 2009

Память допустим определить удастся.

Модель шейдеров и капсы карты допустим удастся. Видеопамять в принципе можно узнать, но на Висте/Вин7 с включенным Аэро ни одна программа не владеет всей видеопамятью, винда тебе выделяет её по мере надобности, и часть держит под свои нужды.

Мат плату можно попробовать выудить из реестра винды, но очень часто она даст какой-нибудь общий ответ типа "Супер-совместимый драйвер материнской платы Microsoft", надо как-то иначе обнюхивать порты ввода-вывода, диапазоны памяти BIOS, причём по особому волшебному алгоритму уникальному для каждой железяки, так примерно делает CPUZ и разные идентификаторы железа - получают коды устройств из PCI шины, и сравнивают по своей базе данных с названиями производителей и моделей.

А зочем?
Оно тебе надо?
Капсы видеокарты, и память определил и запускай игру пусть тормоза будут на совести юзера. Если надо подстроить настройки графики - запусти при первом запуске мини-тест производительности, за пару секунд пока юзер барабанит пальцами по столу и ждёт логотипа игры на экране. Это уже на форуме обсуждалось попробуй поиском найти.

#2
2:58, 3 окт. 2009

По части железа можно прочитать и распарсить DMI. По видяхе обычно все очень спорно.
Может помочь знакомство с WMI.

#3
9:09, 3 окт. 2009

У меня не игра. Мне нужно именно написать такую программу-детектор.
А нет каких-то библиотек для этого?
Не могу найти сведения по DMI. С этим вообще реально разобраться с нуля и написать такую прогу?

#4
10:41, 3 окт. 2009

теоретически, можно попробовать реверс Everest'а или подобной ему проги, но это не есть законно.

#5
10:55, 3 окт. 2009

Woland
Мне кажется, должен быть более простой способ. Сейчас пытаюсь разобраться с WMI, но там пока что темный лес для меня...

#6
14:12, 3 окт. 2009

С DMI я погорячился, правильно взять SMBIOS. Начиная с MS XPx64 и Висты в API появилась функция GetSystemFirmwareTable.
С помощью этой функции можно получить "сырой" блок SMBIOS и распарсить его руками (описание формата есть в стандарте).
Если все делать лениво - есть простой способ через WMI, там уже все в структурах и распарсено. Где-то у меня был исходник
с небольшой оберткой для WMI, для упрощения работы, могу поискать.

PS. Без функции GetSystemFirmwareTable на более ранних версиях ОС доступ тоже получить можно, через обращение к нижней
физической памяти \\device\\physicalmemory В этом тебе помогут функции NtOpenSection и NtMapViewOfSection. Гугл да поможет.

#7
14:30, 3 окт. 2009

KpeHDeJIb
> Где-то у меня был исходник с небольшой оберткой для WMI, для упрощения работы, могу поискать
Если можно, поищите, пожалуйста.
Я как раз 20 минут назад узнал про получение данных SMBIOS через WMI, скачал стандарт.
WMI сносит мне мозг. Точнее, COM-технология. Не могу ничего получить на С++, хотя VB скрипты работают отлично и просты для понимания.

#8
14:57, 3 окт. 2009

alex8
Вместо WMI лучше использовать Setup API, Configuration Manager API и реестр, желательно в такой последовательности. Перечислить все основные шины, иерархию, Device Instance ID, etc.
SMBIOS как сказал KpeHDeJIb, можно читать SPD памяти если очень нужно, EDID для монитора есть в реестре, о видеокарте можно подробно узнать через GDI/DirectX/ADL/NvAPI функции (не так давно писал нечто подобное).
Почти всё это можно сделать в user mode без прав администратора, если делать по принципу CPU-Z с драйвером, то возможности практически безграничные )

#9
15:14, 3 окт. 2009

Yamazaru
> Setup API, Configuration Manager API

В MSDN практически ничего не описано. Такое впечатление, что каждый из этих API состоит из 5 функций неизвестного назначения.
Насчет видеокарты все туманно: через WMI (возможно, еще как-то) можно получить шестнадцатиричный идентификатор модели, а вот таблицу этих идентификаторов мне пока найти не удалось.

#10
15:23, 3 окт. 2009

alex8
Для получения многих данных по WMI нужны админские права в системе. Вот код обертки: Обертка для WMI
Пример работы: http://www.everfall.com/paste/id.php?18w4bpomt2ut (собирать надо UNICODE приложение).

ЗЫ. Сильно я обертку не тестировал - так что AS IS по BSD лицензии. Если найдешь какие глюки - сообщай.
ЗЗЫ. Для работы с WMI из C++ нужен Platform SDK. Но это я думаю ты уже понял.

#11
15:31, 3 окт. 2009

Производители в D3DADAPTER_IDENTIFIER9::VendorId

0x10DE: NVIDIA
0x1002: ATI
0x163C, 0x8086: INTEL
0x5333: S3
0x3D3D: 3DLABS
0x102B: MATROX
0x1039: SIS

\

#12
15:32, 3 окт. 2009

alex8
Там нет примеров, но написано довольно подробно ) Начни с Setup API, Configuration Manager нужен только если у тебя NT ниже 6.0.
Делается примерно так:

SetupDiGetClassDevs();
while(SetupDiEnumDeviceInfo() == TRUE)
{
  SetupDiGetDeviceProperty();
  SetupDiGetDeviceRegistryProperty();
  ...
}
SetupDiDestroyDeviceInfoList();

Идентификаторы карт берутся тут и тут.

#13
15:43, 3 окт. 2009

KpeHDeJIb, извините за дурацкий вопрос, но как скачать файл?

#14
15:49, 3 окт. 2009

Yamazaru
> Идентификаторы карт берутся тут и тут.

Спасибо. Как-то у АМД странно, 4850 от 4870 не отличить...

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.