Как узнать номер материнской платы по серийному номеру


Как узнать серийный номер материнской платы

Проблема в следующем: необходимо прочитать серийный номер материнки либо любой другой УНИКАЛЬНЫЙ ДЛЯ ДАННОЙ МАШИНЫ (системного блока) номер средствами Delphi.

У материнских плат, за небольшим исключение серийный номер существует только в виде наклейки на плате, естественно его не узнать программными путями, то небольшое количество плат, которые имеют егов БИОС никак это не документируют.

А если юзер сделает апгрейд, то что тогда твоя программа будет делать?

CoCreateGuid - уникальнее номера не придумаешь

тогда как можно написать программу, то бы она запускалась только с одного компьютера?

В такой постановке, вообще то никак, скопирую и запущу

Можно прочитать серийный номер раздела на винчестере:
BOOL GetVolumeInformation(LPCTSTR lpRootPathName,
LPTSTR lpVolumeNameBuffer,
DWORD nVolumeNameSize,
LPDWORD lpVolumeSerialNumber,
LPDWORD lpMaximumComponentLength,
LPDWORD lpFileSystemFlags,
LPTSTR lpFileSystemNameBuffer,
DWORD nFileSystemNameSize);
Гарантировать его уникальность нельзя, но очень трудно найти другой винчестер с таким же номером.

2dXb group
а че не гарантийный?

>тогда как можно написать программу, то бы она запускалась >только с одного компьютера?


привязка к серийному номеру винта, к типу и частоте проца, к биосу

а конкретней можно, как взять эти значения (проц, биос) ?*

BOOL GetVolumeInformation(LPCTSTR lpRootPathName,
LPTSTR lpVolumeNameBuffer,
DWORD nVolumeNameSize,
LPDWORD lpVolumeSerialNumber,
LPDWORD lpMaximumComponentLength,
LPDWORD lpFileSystemFlags,
LPTSTR lpFileSystemNameBuffer,
DWORD nFileSystemNameSize);
+ CoCreateGuid - уникальнее номера не придумаешь
+ номер сетевухи если есть и еще какая нить фигня записанная в реест при установке программы и скопировать Чайнику или Ламеру будет сложно, очень сложно.
Но абсолютной защиты ни когда не сделать. Защита должна быть экономически эффективна. т.е. 1) Взламывать дороже чем купить.
2) Разработка Защиты должна стоить дешевле самой программы т.е. если программа стоит 100баксов то защита на 10 баксов уже хорошая!

Все эти методы хороши, но программно ты все равно будешь делать логические сопоставления которые прекрасно обходятся при вскрытии. Абсолютной защиты не существует. В таком случае лучше сделай генератор ключей или лицензий и сныкай подальше, а при использовании БД производи шифрование с помощью своего шифратора с ключами зарытыми в отдельном приложении или вообще на внешнем носителе. Это не так много времени занимает по времени и можно использовать в комбинации с другими средствами защиты.

Пошарьтесь в "Новостях мира компонент" - точно есть компонент, с исходниками, который позволяет считывать всякие вот параметры железа. Его же (если не ошибаюсь) перенесли уже и в кладовку. Так что ищите.

Вот исходник на Paskale серийний номер HDD (РОДНОЙ. )
<$IFDEF Windows>
uses WinCrt;
<$ENDIF>
var
InfoArray. array[0..255] of word;
IdeInfo. record
Config. word;
CylsTotal. word;
Unused. word;
HeadTotal. word;
BPT. word;
BPS. word;
SPT. word;
Vendor. array[0..2] of word;
Serial.

array[1..20] of char;
BufType. Word;
BufSize. Word;
ECC. Word;
Revision. array[1..8] of char;
Model. array[1..40] of char;
end absolute InfoArray;
Count. byte;
i. byte;
begin
writeln("?­д®а¬ жЁп ® ¤ЁбЄ®ў®¤ е IDE:"^M^J);
<$IFDEF WINDOWS>
for count := 1 to mem[ $0040:$0075] do begin
<$ELSE>
for count := 1 to mem[Seg0040:$0075] do begin
<$ENDIF>
FillChar(InfoArray, SizeOf(InfoArray), 0);
<Џа®ўҐаЁвм Ј®в®ў­®бвм>
while (port[$1F7] and $80<>0) do ;
<‡ ЇаҐвЁвм ЇаҐалў ­Ёп>
port[$3f6] := 2;
port[$1f6] := $A0 + ((count-1) shl 4);
port[$1f7] := $EC;
<Џа®ўҐаЁвм Ј®в®ў­®бвм>
while (port[$1F7] and $80<>0) do ;
<Џ®«гзЁвм Ё­д®а¬ жЁо>
for i := 0 to 255 do InfoArray[i] := swap(portw[$1F0]);

writeln("?­д®а¬ жЁп ® дЁ§ЁзҐбЄ®¬ ¤ЁбЄҐ ",count-1,^M^J);
with IdeInfo do begin
writeln("…¬Є®бвм ­Ґд®а¬ вЁа®ў ­­ п :", 9.5367431641E-7* <1/2^20>
swap(BPT)*swap(CylsTotal)*swap(HeadTotal):5:0, "Mb");
writeln("…¬Є®бвм д®а¬ вЁа®ў ­­ п :",
longint(swap(SPT))*swap(CylsTotal)*swap(HeadTotal) div 2048:5, "Mb");
writeln("—Ёб«® жЁ«Ё­¤а®ў :", swap(CylsTotal):7);
writeln("—Ёб«® Ј®«®ў®Є :", swap(HeadTotal):7);
writeln("—Ёб«® ᥪв®а®ў ­ ¤®а®¦Єг :", swap(SPT):7);
writeln("—Ёб«® Ў ©в ­ ¤®а®¦Єг* :", swap(BPT):7);
writeln("—Ёб«® Ў ©в ­ ᥪв®а* :", swap(BPS):7);
writeln("ђ §¬Ґа ЎгдҐа :", swap(BufSize):7);
writeln("Љ®¤ ECC :", swap(ECC):7);
writeln(" * -- ­Ґд®а¬ вЁа®ў ­­ п Ґ¬Є®бвм", ^M^J);
writeln("‘ҐаЁ©­л© ­®¬Ґа :", serial);
writeln("‚ҐабЁп :",revision);
writeln("Њ®¤Ґ«м :",model);
end;
write("H ¦¬ЁвҐ «оЎго Є« ўЁиг. ");
<$IFDEF WINDOWS>
readkey;
<$ELSE>
asm xor ah,ah ; int 16h end;
<$ENDIF>
writeln(^M^J);
end;
end.

Память: 0.75 MB
Время: 0.047 c



Как узнать номер материнской платы по серийному номеру:Как узнать серийный номер материнской платы Проблема в следующем: необходимо прочитать серийный номер материнки либо любой другой УНИКАЛЬНЫЙ ДЛЯ ДАННОЙ МАШИНЫ (системного блока) номер средствами

Как узнать номер материнской платы по серийному номеру