Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

serijski broj motherboard-a

[es] :: Pascal / Delphi / Kylix :: serijski broj motherboard-a

[ Pregleda: 2197 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi2
Franjo Tahi
Zagreb

Član broj: 289851
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon serijski broj motherboard-a18.11.2011. u 08:13 - pre 100 meseci
Kako iz D2007 očitati serijski broj motherboard-a.
Na netu sam našao ovo, ali mi izgldea prekomplicirano: [url] http://www.delphitricks.com/so.../retrieve_cpu_information.html [/url]

a sljedeći kod ne radi, tj. ne vraća broj:
Code:

program GetWMI_MotherBoardSerial;

{$APPTYPE CONSOLE}

uses
  SysUtils
  ,ActiveX
  ,ComObj
  ,Variants;


function GetMotherBoardSerial:String;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;
    Moniker: IMoniker;
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
  end;

begin
  Result:='';
  objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
  colItems      := objWMIService.ExecQuery('SELECT SerialNumber FROM Win32_BaseBoard','WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  if oEnum.Next(1, colItem, iValue) = 0 then
  Result:=VarToStr(colItem.SerialNumber);
end;


begin
 try
    CoInitialize(nil);
    try
      Writeln('Serial MotherBoard '+GetMotherBoardSerial);
      Readln;
    finally
    CoUninitialize;
    end;
 except
    on E:Exception do
    Begin
        Writeln(E.Classname, ': ', E.Message);
        Readln;
    End;
  end;
end.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: serijski broj motherboard-a18.11.2011. u 17:06 - pre 100 meseci
http://www.magsys.co.uk/delphi/magwmi.asp
 
Odgovor na temu

Aleksandar Đokić

Član broj: 13478
Poruke: 4793
*.dynamic.isp.telekom.rs.



+638 Profil

icon Re: serijski broj motherboard-a18.11.2011. u 21:43 - pre 100 meseci
kod koji postovao mi je nesto sumnjiv, ali zato kod na linku mi se cini ok, neophodno je koriscenje asemblera
 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.dynamic.isp.telekom.rs.



+5 Profil

icon Re: serijski broj motherboard-a19.11.2011. u 10:45 - pre 100 meseci
@franjo_tahi2
Kod koji si postovao je ok, odnosno vraca serijski broj maticne ploce.
Pogledaj malo Microsoft WMI dokumentaciju http://msdn.microsoft.com/en-u...top/aa394582%28v=vs.85%29.aspx
WMI klasa Win32_BaseBoard vraca serijski broj maticne ploce i tvoj kod i Magenta systems koriste nju.

pozdrav
 
Odgovor na temu

franjo_tahi2
Franjo Tahi
Zagreb

Član broj: 289851
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: serijski broj motherboard-a21.11.2011. u 08:40 - pre 100 meseci
Ne zanam u čem je štos. qry:
Code:
 ... 'SELECT SerialNumber FROM Win32_BaseBoard' ... 


kod kolege vraća serijski broj, a kod mene ne.

On ima ThinkPad, a ja HP laptop. Oba su dvojezgrena, oba imaju Win 7.
 
Odgovor na temu

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
..135.228-dsl.net.metronet.hr.

ICQ: 13387003


+8 Profil

icon Re: serijski broj motherboard-a24.11.2011. u 07:49 - pre 100 meseci
Ja sam prije koji mjesec kod zamjene ploče na laptopu nekim serviserskim programom za hp računala bez problema upisao novi serijski borj laptopa, oznaku ploče, serijski ploče (ona njihova 3 broja). tako da ako pucaš na to kao vid zaštite programa baš i nije neka zaštita.
Slijedeći problem je kada će neki jopac iz čista mira u servisima pogasiti WMI servis (kao što to neki sigurnosni stručnjaci savjetuju) i imaš problem. Isto tako, pitanje je kada će idući SP ili generacija windoza promijeniti rad s WMI, izbaciti neke klase i sl.
God is real unless is declared as integer.
 
Odgovor na temu

franjo_tahi2
Franjo Tahi
Zagreb

Član broj: 289851
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: serijski broj motherboard-a24.11.2011. u 14:15 - pre 100 meseci
Je, pucam na zaštitu preko broja ploče. :(
A kako onda? Što uzeti da bih znao da je to upravo taj komp? Broj diska - ne valja jer se diskovi mijenjaju. Me mogu dozvoliti da netko kupi program, zamjeni disk pa mu program više ne radi. Mislio sam uzeti broj diska i ploče pa dozvoliti rad ako jedno od ta dva broja odgovaraju.

Nije moj program bog zna što da bi se netko upustio u razbijanje zaštite. Tek toliko da ne možeš kupiti jednu kopiju, a onda ju podijeliti svim kompičima.

Ima li tko ideju kako se zaštiti od kopiranja programa (nelegalnog)?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2602



+68 Profil

icon Re: serijski broj motherboard-a24.11.2011. u 16:13 - pre 100 meseci
> A kako onda? Što uzeti da bih znao da je to upravo taj komp? Broj diska - ne valja jer se diskovi mijenjaju. Me mogu dozvoliti da netko kupi program, zamjeni disk pa
> mu program više ne radi. Mislio sam uzeti broj diska i ploče pa dozvoliti rad ako jedno od ta dva broja odgovaraju.

Mislim da se najviše koristi kombinacija nekoliko stvari, broj mrežne kartice, broj windowsa, CPU, motherboard, pa sad šta bude dostupno od toga se gleda.


[Ovu poruku je menjao savkic dana 24.11.2011. u 18:08 GMT+1]
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: serijski broj motherboard-a24.11.2011. u 16:20 - pre 100 meseci
Jel ti dolazis na licu mesta da instaliras program po kupovini ? Ako je tako, napravi mali aktivator, koji ce napraviti key fajl kad ga pokrenes, u kome ce biti serijski broj ploce, hard diska i NIC MAC adresa. Dodjes kod korisnika sa aktivatorom, pokrenes ga, dobijes key fajl koji mu ostavis i to je to.

Tvoj program ce uporedjivati serijske brojeve sa tim brojevima iz tog kljuca, i ako se bar jedan poklapa onda je ok. Ako korisnik odluci da kupi novu masinu onda ces morati da mu napravis novi aktivacioni fajl.
 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.dynamic.isp.telekom.rs.



+5 Profil

icon Re: serijski broj motherboard-a24.11.2011. u 17:37 - pre 100 meseci
Za tvoje potrebe sasvim je dovoljno uzeti serijski broj HDD-a i MAC na primer. Sve vise racunara imaju integrisan NIC tako da mu u neku ruku to dodje i kao identifikator ploce.
Ako zelis da izbegnes WMI probaj nesto ovako:
uzimanje serijskog broja HDD-a http://www.elitesecurity.org/t418469-0#2773671,
a za MAC imam unit koji sam pronasao negde na netu:
Code:

unit ethernet_address;

interface

uses classes, sysutils;

const
     MAX_INTERFACE_NAME_LEN             = $100;
     ERROR_SUCCESS                      = 0;
     MAXLEN_IFDESCR                     = $100;
     MAXLEN_PHYSADDR                    = 8;

     MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0 ;
     MIB_IF_OPER_STATUS_UNREACHABLE     = 1;
     MIB_IF_OPER_STATUS_DISCONNECTED    = 2;
     MIB_IF_OPER_STATUS_CONNECTING      = 3;
     MIB_IF_OPER_STATUS_CONNECTED       = 4;
     MIB_IF_OPER_STATUS_OPERATIONAL     = 5;

     MIB_IF_TYPE_OTHER                  = 1;
     MIB_IF_TYPE_ETHERNET               = 6;
     MIB_IF_TYPE_TOKENRING              = 9;
     MIB_IF_TYPE_FDDI                   = 15;
     MIB_IF_TYPE_PPP                    = 23;
     MIB_IF_TYPE_LOOPBACK               = 24;
     MIB_IF_TYPE_SLIP                   = 28;

     MIB_IF_ADMIN_STATUS_UP             = 1;
     MIB_IF_ADMIN_STATUS_DOWN           = 2;
     MIB_IF_ADMIN_STATUS_TESTING        = 3;


type

   MIB_IFROW            = Record
     wszName : Array[0 .. (MAX_INTERFACE_NAME_LEN*2-1)] of char;
     dwIndex              : LongInt;
     dwType               : LongInt;
     dwMtu                : LongInt;
     dwSpeed              : LongInt;
     dwPhysAddrLen        : LongInt;
     bPhysAddr : Array[0 .. (MAXLEN_PHYSADDR-1)] of Byte;
     dwAdminStatus        : LongInt;
     dwOperStatus         : LongInt;
     dwLastChange         : LongInt;
     dwInOctets           : LongInt;
     dwInUcastPkts        : LongInt;
     dwInNUcastPkts       : LongInt;
     dwInDiscards         : LongInt;
     dwInErrors           : LongInt;
     dwInUnknownProtos    : LongInt;
     dwOutOctets          : LongInt;
     dwOutUcastPkts       : LongInt;
     dwOutNUcastPkts      : LongInt;
     dwOutDiscards        : LongInt;
     dwOutErrors          : LongInt;
     dwOutQLen            : LongInt;
     dwDescrLen           : LongInt;
     bDescr     : Array[0 .. (MAXLEN_IFDESCR - 1)] of Char;
     end;

function Get_EthernetAddresses: TStringList;

Function GetIfTable( pIfTable : Pointer;
                 VAR pdwSize  : LongInt;
                     bOrder   : LongInt ): LongInt; stdcall;


implementation

Function GetIfTable; stdcall; external 'IPHLPAPI.DLL';

function Get_EthernetAddresses: TStringList;
const
   _MAX_ROWS_ = 20;

type
   _IfTable = Record
                 nRows : LongInt;
                 ifRow : Array[1.._MAX_ROWS_] of MIB_IFROW;
              end;

VAR
   pIfTable  : ^_IfTable;
   TableSize : LongInt;
   tmp       : String;
   i,j       : Integer;
   ErrCode   : LongInt;
begin
   pIfTable := nil;
   //------------------------------------------------------------
   Result:=TStringList.Create;
   if Assigned(Result) then
   try
      //-------------------------------------------------------
      // First: just get the buffer size. 
      // TableSize returns the size needed.
      TableSize:=0; // Set to zero so the GetIfTabel function 
                    // won't try to fill the buffer yet, 
                    // but only return the actual size it needs.
      GetIfTable(pIfTable, TableSize, 1);
      if (TableSize < SizeOf(MIB_IFROW)+Sizeof(LongInt)) then
      begin
         Exit; // less than 1 table entry?!
      end; // if-end.

      // Second: 
      // allocate memory for the buffer and retrieve the 
      // entire table.
      GetMem(pIfTable, TableSize);
      ErrCode := GetIfTable(pIfTable, TableSize, 1);
      if ErrCode<>ERROR_SUCCESS then
      begin
         Exit; // OK, that did not work. 
               // Not enough memory i guess.
      end; // if-end.

      // Read the ETHERNET addresses.
      for i := 1 to pIfTable^.nRows do
      try
         if pIfTable^.ifRow[i].dwType=MIB_IF_TYPE_ETHERNET then
         begin
            tmp:='';
            for j:=0 to pIfTable^.ifRow[i].dwPhysAddrLen-1 do
            begin
               tmp := tmp + format('%.2x', 
                      [ pIfTable^.ifRow[i].bPhysAddr[j] ] );
            end; // for-end.
            //-------------------------------------
            if Length(tmp)>0 then Result.Add(tmp);
         end; // if-end.
      except
         Exit;
      end; // if-try-except-end.
   finally
      if Assigned(pIfTable) then FreeMem(pIfTable,TableSize);
   end; // if-try-finally-end.
end;

end.


pozdrav
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: serijski broj motherboard-a

[ Pregleda: 2197 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.