Как узнать серийный номер процессора
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |
Как определить серийный номер процессора?
Может быть кто-либо сталкивался с проблемой: необходимо определить серийный номер процессора. Спасибо.
anonymous
14.01.03 15:44:18 MSK
Re: Как определить серийный номер процессора?
Насколько я помню, серийный номер ввели в p-3.
Попробуй посмотреть в /proc/cpuinfo, возможно там лежит.
У себя проверить не имею возможности, так как у меня Celeron 300A. 🙂
Dead ★★★★
( 14.01.03 17:41:20 MSK )
Re: Как определить серийный номер процессора?
anonymous
( 14.01.03 19:28:37 MSK )
Re: Как определить серийный номер процессора?
IMXO не забыть в ядре включить опцию разрешения отдавания
серийного номера процессора а то фига будет вместо номера.
Да и вообще в линухе делать защиту или аудит использования вашей проги. На железнячих данных IMXO не правильно. Лучше на вебе
регистрилку в виде формы. А то ходят перцы с ядром 3.0 и ни че.
anonymous
( 15.01.03 03:40:50 MSK )
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Серийный номер (2001)
- Форум настройка named, серийный номер зоны (2003)
- Форум PostgreSQL работа с серийными номерами товара (2012)
- Форум серийный номер компакт диска (2004)
- Форум Определение серийного номера HDD (2005)
- Форум [xen] серийный номер жёсткого диска (2011)
- Форум серийные номера клавиатуры, мыши, видеокарты (2017)
- Форум Как определить серийный номер дискеты (&& компакт-диска) (2002)
- Форум Серийный номер Compact Flash (2019)
- Форум Серийный номер диска (2004)
Как получить уникальный идентификатор процессора (CPU) средствами C++?
@avp Задача состоит в получение данных от клиента для бана. Нужны любые уникальные данные о компьютере которые записываются в бд. Из наших наблюдений у людей с взломанной виндой совпадают айди матери и cpu. По этому ищем другие пути. Мак адрес должен быть уникален, но у некоторых юзеров встречаются ошибки с ACCESS_VIOLATION.
18 авг 2019 в 22:05
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Не каждый процессор возвращает в CPUID уникальный серийный номер. Чтобы уникально идентифицировать компьютер, имеет смысл использовать составной аппаратный идентификатор, состоящий из нескольких значений, например:
- CPUID
- SMBIOS System UUID
- Серийный номер системника
- Серийный номер материнской платы
Все эти значения можно программно получить из таблицы SMBIOS. MAC-адреса сетевых интерфейсов, конечно, тоже можно добавить, но следует помнить, что компьютер может иметь несколько сетевых интерфейсов, нельзя просто взять первый попавшийся — он может быть виртуальным.
Пример для Windows (код для чтения таблицы SMBIOS взят из проекта sysinv):
#include #include #include // SMBIOS Table Type numbers #define SMB_TABLE_BIOS 0 #define SMB_TABLE_SYSTEM 1 #define SMB_TABLE_BASEBOARD 2 #define SMB_TABLE_CHASSIS 3 #define SMB_TABLE_PROCESSOR 4 #define SMB_TABLE_MEMCTRL 5 #define SMB_TABLE_MEMMODULES 6 #define SMB_TABLE_PORTS 8 #define SMB_TABLE_SLOTS 9 #define SMB_TABLE_OEM_STRINGS 11 #define SMB_TABLE_SYS_CFG_OPTIONS 12 #define SMB_TABLE_MEM_ARRAY 16 #define SMB_TABLE_MEM_DEVICE 17 #define SMB_TABLE_END_OF_TABLE 127 // 64bit Word type typedef unsigned long long QWORD; /* * Structures */ typedef struct _RawSmbiosData < BYTE Used20CallingMethod; BYTE SMBIOSMajorVersion; BYTE SMBIOSMinorVersion; BYTE DmiRevision; DWORD Length; BYTE SMBIOSTableData[1]; >RAW_SMBIOS_DATA, * PRAW_SMBIOS_DATA; typedef struct _SmbiosStructHeader < BYTE Type; BYTE Length; WORD Handle; >SMBIOS_STRUCT_HEADER, *PSMBIOS_STRUCT_HEADER; // Structures typedef struct _NODE < wchar_t *Name; // Name of the node struct _NODE_ATT_LINK *Attributes; // Array of attributes linked to the node struct _NODE *Parent; // Parent node struct _NODE_LINK *Children; // Array of linked child nodes int Flags; // Node configuration flags >NODE, * PNODE; typedef struct _NODE_LINK < struct _NODE *LinkedNode; // Node attached to this node >NODE_LINK, * PNODE_LINK; typedef struct _NODE_ATT < wchar_t *Key; // Attribute name wchar_t *Value; // Attribute value string (may be null separated multistring if NAFLG_ARRAY is set) int Flags; // Attribute configuration flags >NODE_ATT, *PNODE_ATT; typedef struct _NODE_ATT_LINK < struct _NODE_ATT *LinkedAttribute; // Attribute linked to this node >NODE_ATT_LINK, *PNODE_ATT_LINK; /********************************************************************/ PRAW_SMBIOS_DATA GetSmbiosData() < DWORD bufferSize = 0; PRAW_SMBIOS_DATA smbios = NULL; // Get required buffer size bufferSize = GetSystemFirmwareTable('RSMB', 0, NULL, 0); if (bufferSize) < smbios = (PRAW_SMBIOS_DATA)LocalAlloc(LPTR, bufferSize); bufferSize = GetSystemFirmwareTable('RSMB', 0, (PVOID)smbios, bufferSize); >return smbios; > PSMBIOS_STRUCT_HEADER GetNextStructure(PRAW_SMBIOS_DATA smbios,PSMBIOS_STRUCT_HEADER previous) < PSMBIOS_STRUCT_HEADER next = NULL; PBYTE c = NULL; // Return NULL is no data found if (NULL == smbios) return NULL; // Return first table if previous was NULL if (NULL == previous) return (PSMBIOS_STRUCT_HEADER)(&smbios->SMBIOSTableData[0]); // Move to the end of the formatted structure c = ((PBYTE)previous) + previous->Length; // Search for the end of the unformatted structure (\0\0) while (true) < if ('\0' == *c && '\0' == *(c + 1)) < /* Make sure next table is not beyond end of SMBIOS data * (Thankyou Microsoft for ommitting the structure count * in GetSystemFirmwareTable */ if ((c + 2) < ((PBYTE)smbios->SMBIOSTableData + smbios->Length)) return (PSMBIOS_STRUCT_HEADER)(c + 2); else return NULL; // We reached the end > c++; > return NULL; > PSMBIOS_STRUCT_HEADER GetNextStructureOfType(PRAW_SMBIOS_DATA smbios,PSMBIOS_STRUCT_HEADER previous, DWORD type) < PSMBIOS_STRUCT_HEADER next = previous; while (NULL != (next = GetNextStructure(smbios,next))) < if (type == next->Type) return next; > return NULL; > PSMBIOS_STRUCT_HEADER GetStructureByHandle(PRAW_SMBIOS_DATA smbios,WORD handle) < PSMBIOS_STRUCT_HEADER header = NULL; while (NULL != (header = GetNextStructure(smbios,header))) if (handle == header->Handle) return header; return NULL; > void GetSmbiosString(PSMBIOS_STRUCT_HEADER table, BYTE index, LPWSTR output, int cchOutput) < DWORD i = 0; DWORD len = 0; wcscpy(output,L""); if (0 == index) return; char *c = NULL; for (i = 1, c = (char *)table + table->Length; '\0' != *c; c += strlen(c) + 1, i++) < if (i == index) < len = MultiByteToWideChar(CP_UTF8, 0, c, -1, output,cchOutput); break; >> > //вывод значения числового параметра таблицы SMBIOS по указанному смещению void PrintBiosValue(PRAW_SMBIOS_DATA smbios,DWORD type,DWORD offset, DWORD size) < PSMBIOS_STRUCT_HEADER head=NULL; PBYTE cursor = NULL; head = GetNextStructureOfType(smbios,head, type); if (NULL == head)< printf("PrintBiosValue Error!\n");return;>cursor=((PBYTE)head+offset); //value for(int i=0;i printf("\n"); > //вывод значения строкового параметра таблицы SMBIOS по указанному смещению void PrintBiosString(PRAW_SMBIOS_DATA smbios,DWORD type,DWORD offset) < PSMBIOS_STRUCT_HEADER head; head=NULL; PBYTE cursor = NULL; WCHAR buf[1024]; head = GetNextStructureOfType(smbios,head, type); if (NULL == head)cursor=((PBYTE)head+offset); BYTE val=*cursor; GetSmbiosString((head), *cursor,buf,1024); // value wprintf(L"%s\n",buf); > int main() < PRAW_SMBIOS_DATA data = GetSmbiosData(); if(data==NULL)< printf("Can't get SMBIOS data!"); return 1; >printf("System UUID: "); PrintBiosValue(data,SMB_TABLE_SYSTEM,8, 16); printf("Chassis serial: "); PrintBiosString(data,SMB_TABLE_CHASSIS,7); printf("Motherboard serial: "); PrintBiosString(data,SMB_TABLE_BASEBOARD,7); printf("CPUID: "); PrintBiosValue(data,SMB_TABLE_PROCESSOR,8, 8); //Таблица SMBIOS содержит только 2 DWORD-значения CPUID из 4, но этого обычно достаточно getchar(); >
Как программно узнать серийный номер процессора?
Суть такова, я хочу купить процессор и чтоб быть уверенным что мне отправили работоспособный процессор я хочу сверить на месте серийник и серийник когда чувак будет мне по скайпу показывать тесты проца.
Голосование за лучший ответ
Никак. Только посмотреть на теплораспределительной крышке.
На современных процессорах вывод серийного номера программным способом блокируется.
Никак. он нигде «внутри» не прошит.
если тебя «паранойка бьёт» — это не сюда, а к ДОКТОРУ надо ;)))
.
«серийники» гравируются на «крышке» проца и вряд-ли кто будет ради тебя «особенного» полировать её и «набивать» другой номер ;))
IncantarictusПросветленный (37151) 5 лет назад
Полировать и набивать, конечно, никто не будет, а вот крышки поменять — на раз два. Случаи, когда под видом i7 продавали Celeron-ы с хитспредерами от i7 — не редки.
Oleg Yefremov Искусственный Интеллект (131455) поменьше надо Х_НЮ всякую покупать в «левых» магазинах — тогда и не будут под видом i7 продавать Celeron-ы ;))