C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Номер процессора, Проверка номера процессора
Steam-x
Отправлено: 29.09.2006, 17:43


Дежурный стрелочник

Группа: Участник
Сообщений: 60



Есть проблема — необходимо привязать программу к одному компу. Простейший, на мой взгляд, выход — узнать номер процессора, задать его в программе. При переносе программы на другой комп прога работать не будет. В ДОСе это делается легко, а как сие сделать в Винде.
EpoxDe1u
Отправлено: 29.09.2006, 18:14


Ученик-кочегар

Группа: Участник
Сообщений: 3



Такое чудо есть в реестре.
HLM->HARDWARE->....
Steam-x
Отправлено: 02.10.2006, 08:21


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (EpoxDe1u @ 29.09.2006, 18:14)
Такое чудо есть в реестре.
HLM->HARDWARE->....

Если это — HLM->HARDWARE->CentralProcessor, то это не то что нужно. Мне нужен уникальный серийный номер процессора который стоит на данном компе. Модель и модификация процессора меня не интерисует, т.к. это не конфидециальная информация и она может быть одинаковой для целой кучи компов.
AVC
Отправлено: 02.10.2006, 10:46


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (Steam-x @ 29.09.2006, 16:43)
Есть проблема — необходимо привязать программу к одному компу. Простейший, на мой взгляд, выход — узнать номер процессора...

Пара замечаний:
1. Далеко не все процессоры имеют серийный номер.

2. Таким образом программа привязывается не к "компу" (как хотелось) а к одной из его сменных составных частей ("процы" горят и заменяются не так редко).

3. Посмотрите в сторону специализированного ПО для защиты приложений. Ссылки можно легко найти в инете.

4. Если программу крадут — значит она кому-то нужна. Гордитесь. biggrin.gif
Steam-x
Отправлено: 03.10.2006, 09:27


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (AVC @ 02.10.2006, 10:46)
2. Таким образом программа привязывается не к "компу" (как хотелось) а к одной из его сменных составных частей ("процы" горят и заменяются не так редко).

На моей памяти ни один процессор не сгорел, и я ни разу не слышал о таком. Специфика моей работы исключает разброд и шатание в аппаратуре, поэтому если я буду знать о каких-то уникальных свойствах компа, то это даст мне "Безграничную Власть, типа кольца власти" wizard.gif
AVC
Отправлено: 03.10.2006, 10:46


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE
На моей памяти ни один процессор не сгорел

Вам или крупно везет или недостаточен объем памяти smile.gif

QUOTE
И я ни разу не слышал о таком.

Неправда. Я вам об этом говорил.
А еще бывают апргрейды, да мало-ли что еще.

Постановка вопроса в корне неправильна. Лицензия выделяется не компьютеру и тем более не какой либо его части а работнику. А уж при помощи чего он работает "правильное" приложение не должно интересовать. Это мое мнение.
Gedeon
Отправлено: 04.10.2006, 12:16


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (AVC @ 03.10.2006, 10:46)
Лицензия выделяется не компьютеру и тем более не какой либо его части а работнику. А уж при помощи чего он работает "правильное" приложение не должно интересовать. Это мое мнение.

Кроме эмбэддед версий. Но это уже другая песня.
Steam-x
Отправлено: 13.10.2006, 08:59


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (AVC @ 03.10.2006, 11:46)

Постановка вопроса в корне неправильна. Лицензия выделяется не компьютеру и тем более не какой либо его части а работнику. А уж при помощи чего он работает "правильное" приложение не должно интересовать. Это мое мнение.

Если честно, мне уже надоели филосоФФские размышления.
Постановка вопроса и в корне и в стебле и даже в листьях и цветочках и в пестиках и тычинках ПРАВИЛЬНАЯ. Возьмем это за аксиому. Я спросил именно то, что меня ИНТЕРЕСОВАЛО. Мне как раз и нужно привязать прогу к железу, а не к человеку, который может уволиться, заболеть или его могут забрать инопланетяни(Истина где-то рядом). А гонять за 2000 км для переустановки прог уменя особого желания нет. Защита паролями не катит, т.к. мы все знаем как обстоят дела с поролями Виндов и иных ПО(Наши еще и умудряются лезть на официальные сайты прог, водить ворованый код и чего-то еще требовать...) yahoo.gif
Защита всякими железными примочками — вещь дорогая и в моем случае неоправданная.
Поэтому я хочу знать КАК ПРИВЯЗАТЬ ПРОГУ К КОНКРЕТНОМУ ЖЕЛЕЗУ.
Если Вы не знаете как это сделать, то просьба не тратить время на набор ответа. Я ценю Ваше время.
Admin
Отправлено: 13.10.2006, 10:17


Владимир

Группа: Администратор
Сообщений: 1190



Привяжите к mac-адресу сетевой карты.
http://borland.xportal.ru/forum/viewtopic.php?t=19330

Тогда при необходимости — сетевая карта переставляется
в другой компьютер и программа работает с этим компьютером,
но все равно только с одним, где установлена сетевуха с этим
mac-адресом.

CODE


#include "nb30.h"
#include <windows.h>
#include <wincon.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<conio.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <stdlib.h>
#include <sys\stat.h>

void __fastcall TForm1::Button2Click(TObject *Sender)
{
NCB   Ncb;
LANA_ENUM lans;
struct
{ADAPTER_STATUS   adapt;
NAME_BUFFER   NameBuff [30];
} Adapter;


memset(&Ncb, 0, sizeof(Ncb));
Ncb.ncb_command   = NCBENUM;
Ncb.ncb_buffer   = (char *)(&lans);
Ncb.ncb_length   = sizeof(lans);
Netbios(&Ncb);
if (Ncb.ncb_retcode != NRC_GOODRET)
{   Memo1->Lines->Add("NCBENUM: " + AnsiString(Ncb.ncb_retcode));
  return;
}

AnsiString   text;
for (int i(0); i < lans.length; i++, Memo1->Lines->Add(text))
{   text = "LanN " + AnsiString(i) + " ";
  memset(&Ncb, 0, sizeof(Ncb));
  Ncb.ncb_command = NCBRESET;
  Ncb.ncb_lana_num = lans.lana[i];
  Netbios(&Ncb);
  if (Ncb.ncb_retcode != NRC_GOODRET)
   {   text +=  "NCBRESET: error " + AnsiString(Ncb.ncb_retcode);
     continue;
   }

  memset(&Ncb, 0, sizeof (Ncb));
  Ncb.ncb_command = NCBASTAT;
  Ncb.ncb_lana_num = lans.lana[i];
                       //    0123456789ABCDEF
  strcpy((char*)Ncb.ncb_callname, "*               ");
  Ncb.ncb_buffer = (char *) &Adapter;
  Ncb.ncb_length = sizeof(Adapter);

  Netbios(&Ncb);
  if (Ncb.ncb_retcode != NRC_GOODRET)
     text +=  "NCBASTAT: error " + AnsiString(Ncb.ncb_retcode);
  else
   {   for (int i(0); i < 6; i++) //// формируется строка mac для данного адаптера
        text += AnsiString(i? "." : "") + IntToHex(int(Adapter.adapt.adapter_address[i] & 0xFF), 2);
   }
}   // all lana_num

}
//---------------------------------------------------------------------------


AVC
Отправлено: 13.10.2006, 12:13


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (Steam-x @ 13.10.2006, 08:59)
Если честно, мне уже надоели филосоФФские размышления.
...
Если Вы не знаете как это сделать, то просьба не тратить время на набор ответа.

Я знаю как это сделать и даже разными способами для разных вариантов привязки. Но если помните, это началось как "пара замечаний" со скрытым предложением пересмотреть постановку задачи.

PS. Если вам надоели мосты посты можете смело их не читать.
Admin
Отправлено: 13.10.2006, 13:32


Владимир

Группа: Администратор
Сообщений: 1190



Про процессор: (стр 40)
http://download.intel.com/design/Xeon/appl...ts/24161831.pdf

CODE

void __fastcall TForm1::Button1Click(TObject *Sender)
{

DWORD t,m,b; //top,middle,botttom
DWORD serial[3];
_asm
{
mov eax,1 //programmer: I need a Service ?
//processor: what type baby?
//eax = 3 -->
//eax: top 32 bits are the processor signature bits


//programmer:this
cpuid //_emit 0x0f |cpuid mean this tow instruction
//_emit 0xa2 |instead of writing them
//
//mean:the sevice i want the processor serial number

mov t,eax // top 32 bits are the processor signature bits
/*
eax = 3 -->
ecx: middle 32 bits are the processor signature bits
edx: bottom 32 bits are the processor signature bits
*/
mov eax,3
cpuid
mov m,edx// middle 32 bits are the processor signature bits
mov b,ecx// bottom 32 bits are the processor signature bits
}

// copy the locals into the pointer variables passed in
serial[0] = b;
serial[1] = m;
serial[2] = t;


char temp;
AnsiString m_SN;

static char hex_chars[16] = {'0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F'};
for (int dw_count = 2; dw_count>=0; dw_count--)
{
for (int bp=28; bp>=0; bp-=4)
{
DWORD nibble = (serial[dw_count] >> bp) & 0x0f;
temp = (char) hex_chars[nibble];
m_SN+=temp;
if ((bp == 16) || ((bp == 0) && (dw_count!=0)) )
m_SN+="-";
}
}
ShowMessage(m_SN); // серийный номер процессора ?
}


//---------------------------------------------------------------------------
Steam-x
Отправлено: 16.10.2006, 13:08


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (Admin @ 13.10.2006, 14:32)
Про процессор...

Большое спасибо! Буду пробовать.
Идея насчет сетевухи тоже неплохо, интересно, а со встроенными сетевухами все так же. Если да, то это получится привязка к материнке, что само по себе — хорошо.
Steam-x
Отправлено: 16.10.2006, 13:14


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (AVC @ 13.10.2006, 13:13)
Я знаю как это сделать и даже разными ...

PS. Если вам надоели мосты посты можете смело их не читать.

Знание-сила!
Спасибо за совет. В данном случае очень ценный
AVC
Отправлено: 16.10.2006, 15:58


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (кто-то @ когда-то)

Каждый сам должен выхлебать свою меру глупостей, невежества и заблуждений. И пока он ее не выхлебал, с ним бесполезно разумно разговаривать.
Steam-x
Отправлено: 17.10.2006, 14:06


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (AVC @ 16.10.2006, 16:58)
кто-то, когда-то

Я так и понял, что Вы сейчас очень занятой человек. И у Вас не остается времени отвечать на вопросы.

yahoo.gif
AVC
Отправлено: 17.10.2006, 15:39


Ветеран

Группа: Модератор
Сообщений: 1583



Если у вас есть информация "кто" и "когда" можете поделиться ею. Давно хотел узнать кто такую умную вещь сказал.

Вернуться в Вопросы программирования в C++Builder