Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CPU ID - Ausleseproblem bei einem Dualboard (https://www.delphipraxis.net/38244-cpu-id-ausleseproblem-bei-einem-dualboard.html)

delphi_newbie_123 16. Jan 2005 18:02


CPU ID - Ausleseproblem bei einem Dualboard
 
Hallo,
mit folgendem Code versuche ich die CPU-ID zu generieren.
Doch, falls der PC 2 CPUs also ein Dualboard besitzt, funktioniert der code nicht mehr so wie er soll.
Wie kann man erreichen, dass immmer nur 1 CPU ausgelesen wird?
Oder könnte man irgendwie irgendwelche andere Hardware-IDs auslesen, die auch anch dem Formatieren gleich bleiben.
Danke euch !
Delphi-Quellcode:
const
  ID_BIT = $200000; // EFLAGS ID bit
type
  TCPUID = array[1..4] of Longint;

function IsCPUID_Available: Boolean; register;
asm
PUSHFD            {direct access to flags no possible, only via stack}
POP    EAX       {flags to EAX}
MOV    EDX,EAX   {save current flags}
XOR    EAX,ID_BIT {not ID bit}
PUSH   EAX       {onto stack}
POPFD             {from stack to flags, with not ID bit}
PUSHFD            {back to stack}
POP    EAX       {get back to EAX}
XOR    EAX,EDX   {check if ID bit affected}
JZ     @exit     {no, CPUID not availavle}
MOV    AL,True   {Result=True}
@exit:
end;

function GetCPUID: TCPUID; assembler; register;
asm
PUSH   EBX      {Save affected register}
PUSH   EDI
MOV    EDI,EAX  {@Resukt}
MOV    EAX,1
DW     $A20F    {CPUID Command}
STOSD            {CPUID[1]}
MOV    EAX,EBX
STOSD            {CPUID[2]}
MOV    EAX,ECX
STOSD            {CPUID[3]}
MOV    EAX,EDX
STOSD            {CPUID[4]}
POP    EDI      {Restore registers}
POP    EBX
end;
function GetID: string;
//IntToPos ist notwendig, da in extrem seltenen Fällen negative CPU-ID's vorkommen
  function IntToPos(Value: Integer): integer; overload;
  begin
    if Value < 0 then
      Result := -Value
    else
      Result := Value;
  end;
  function IntToPos(Value: Int64): int64; overload;
  begin
    if Value < 0 then
      Result := -Value
    else
      Result := Value;
  end;

begin
  if IsCPUID_Available then
    result := IntToStr(IntToPos(GetCPUID[1])) + IntToStr(IntToPos(GetCPUID[2]))
      + IntToStr(IntToPos(GetCPUID[3])) + IntToStr(IntToPos(GetCPUID[4]))
  else

    result := '70000'; //Dummywert
end;

Tubos 16. Jan 2005 18:07

Re: CPU ID - Ausleseproblem bei einem Dualboard
 
Zitat:

Oder könnte man irgendwie irgendwelche andere Hardware-IDs auslesen, die auch anch dem Formatieren gleich bleiben.
Seriennummer der Festplatte, MAC-Adresse der LAN-Karte...

delphi_newbie_123 16. Jan 2005 18:42

Re: CPU ID - Ausleseproblem bei einem Dualboard
 
hi,
wurde irgendetwas davon schon im Forum besprochen?
Festplattennummer soll, einem Beitrag zufolge nach dem Formatieren verloren gehen.
Danke sehr fuer die Antwort

PierreB 16. Jan 2005 18:49

Re: CPU ID - Ausleseproblem bei einem Dualboard
 
Zitat:

Festplattennummer soll, einem Beitrag zufolge nach dem Formatieren verloren gehen.
Jo, nach jedem Formatieren ändert sich die Datenträgerbezeichnung der Festplatte.
Und das mit der Mac-Adresse der Netzwerkkarte ist auch net sehr sicher, da es im Internet einige Software gibt mit der man diese Nummer ändern kann bzw. eine andere Nummer vortäuschen kann.

tommie-lie 16. Jan 2005 18:54

Re: CPU ID - Ausleseproblem bei einem Dualboard
 
Zitat:

Zitat von delphman
Zitat:

Festplattennummer soll, einem Beitrag zufolge nach dem Formatieren verloren gehen.
Jo, nach jedem Formatieren ändert sich die Datenträgerbezeichnung der Festplatte.

Die Datenträgerbezeichnung und die FAT-ID mit Sicherheit auch, aber die Seriennummer wird sich ganz bestimmt nicht ändern. Allerdings weiß ich nicht, ob man die überhaupt bei jeder Platte softwareseitig auslesen kann und ob das seit Windows auch noch unter Delphi geht.

delphi_newbie_123 16. Jan 2005 19:01

Re: CPU ID - Ausleseproblem bei einem Dualboard
 
welche Möglichkeit habe ich, wenn ich dann die Serialnummer des Mainboards auslesen will`?
Ich brauche unbedingt eine feste ID, die isch niemals ändert :/.
Villeicht vom Bioschip.
Was ist eigenlich egal ..
Danche fuer eure Antworten

SirThornberry 16. Jan 2005 19:22

Re: CPU ID - Ausleseproblem bei einem Dualboard
 
Also da dies öfters auftaucht muss ich mich dazu mal äußern.

Hier wird zwar immerwieder geschrieben das sich die Festplatten-ID nach dem formatieren ändert, aber vielmehr meinen die Leute damit die VolumeID. Leider wissen da manche den Unterschied nicht. Wenn eine partition formatiert wird, so wird dieser partition eine ID zugewiesen. Diese ID ändert sich logicherweise wenn man die platte neu schreibt. Dann gibt es aber noch eine FestplattenID welche sich nicht ändert. Die VolumeID gibt es also für Laufwerk C, D, E, F etc. und dann gibt es die Festplatten ID welche nichts mit Laufwerk C, D, E etc. zu tun hat sondern wirklich nur mit der Festplatte, unabhängig davon ob diese formatiert/partitioniert wurde oder nicht.

Zitat:

Allerdings weiß ich nicht, ob man die überhaupt bei jeder Platte softwareseitig auslesen kann und ob das seit Windows auch noch unter Delphi geht.
Ja, es ist auch unter windows möglich diese Nummer auszulesen, Google ist dein Freund...

delphi_newbie_123 16. Jan 2005 19:29

Re: CPU ID - Ausleseproblem bei einem Dualboard
 
ok danke.
Ich such dann mal weiter...

Robert Marquardt 17. Jan 2005 06:12

Re: CPU ID - Ausleseproblem bei einem Dualboard
 
Du musst vermutlich sicherstellen das der Thread auf einer bestimmten CPU laeuft.
Dazu gibt es eine Funktion ProcessorAffinityMask (oder so aehnlich).
Such mal bei Google mit den Wortbestandteilen.

delphi_newbie_123 17. Jan 2005 11:17

Re: CPU ID - Ausleseproblem bei einem Dualboard
 
Danke, habe einen Beitrag gefunden,
wo erklärt wird wie man die Festplattenserialnummer auslesen kann.
Ich verwende wahrscheinlich die angebotene lösung.
Danke euch!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz