Entwickler-Ecke

Sonstiges (Delphi) - ProzessorID auslesen (auch MultiCore)


NetSpider - Mo 04.06.07 19:56
Titel: ProzessorID auslesen (auch MultiCore)
Ich hab hier ein kleines Progrem.
Dieses kleine Programm soll die ID der installierten Prozessoren auslesen - das Problem ist aber, dass ich das Program bereits auf zwei Computern laufen hab lassen und die ID Nummern sind absolut identisch! Allerdings sind beide Computer mit einem Intel E6600 und einem Mainboard von Gigabyte (auch selbes Modell) ausgestattet. Normalerweise duerfte doch das nicht passieren, oder?

Hier mal der Code der die ID ausliest - ich gebs zu, der Code ist irgendwo ausm Internet und ich hab keine Ahnung von asm.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
const
  ID_BIT = $200000// EFLAGS ID bit

type
  TCPUID = array[1..4of Longint;


// ID des Prozessors
function GetCPUID: 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;

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; assemblerregister;
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;

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

    result := '00000'//Dummywert
end;


Ich hoffe, dass ich nichts vergessen hab. Die Funktion hab ich ineinandergeschachtelt, damit fuer diesen Test alles schoen beieinander ist.

Also, wie gesagt, ich hab auf zwei verschiedenen Rechnern (beide selbes Board und CPU) die gleichen IDs bekommen - das sollte eigentlich nicht sein, oder ist die Funktion die falsche?

Hier noch mein kleines Program. Es zahlt die vorhandenen Prozessoren und fuehrt so lange eine repeat-Schleife aus, bis sie durch alle Prozessorkerne mal durchgerauscht ist. Also nicht mit der Affinity rumspielen bevor man auf Start clickt.

Meine beiden IDs:
1782133120583011075053569
178216910336583011075053569

Vielleicht koennt ihr auch eure IDs posten.

lg NetSpider

Hier noch das Progg:


Delete - Di 05.06.07 08:32

AMD Athlon 64 3200+ Clawhammer
ID: 391220480126614527

BTW:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure GetProcessorSerialNumber(var Z1,Z2,Z3:Integer); stdcall;
const  CPUID = $A20F;
asm
   MOV EAX,1
DW CPUID
   MOV [Z1],EAX
   MOV EAX,3
DW CPUID
   MOV [Z2],EDX
   MOV [Z3],ECX
end;


passiv - Di 05.06.07 09:01

nachdem ich nicht genau weiß was für CPU-Version ich hab:
Intel Pentium M processor 1.60GHz
175220703841343620097


Silas - Di 05.06.07 09:19

Prozessor: Intel Celeron M 1.40 GHz
ID: 1752206601343620097 ( :shock: )


Silas - Di 05.06.07 11:40

Ich weiß nicht, ob dir das was hilft, aber ich hab mal schnell ein Prog geschrieben, das den eingebrannten Prozessorstring in Hex ausliest und ausgibt.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows,
  Unit1 in 'Unit1.pas';

var estr1, estr2, estr3, estr4:  DWord;
    estring: String;

begin
  try
    asm
        // Testen, ob cpuid verfügbar
        pushfd
        pop eax
        mov ebx,eax
        xor eax, 00200000h
        push eax
        popfd
        pushfd
        pop eax
        xor eax, ebx
        jnz @cpuidok
        // Wenn nicht, beenden
        push 0
        call ExitProcess
      @cpuidok:
        mov eax, 80000002h
        cpuid
        mov estr1, eax
        mov estr2, ebx
        mov estr3, ecx
        mov estr3, edx
    end;
      estring := inttohex(estr1, 8) + inttohex(estr2, 8) + 
        inttohex(estr3, 8) + inttohex(estr4, 8);
    asm
        mov eax, 80000003h
        cpuid
        mov estr1, eax
        mov estr2, ebx
        mov estr3, ecx
        mov estr3, edx
    end;
      estring := estring + inttohex(estr1, 8) + 
        inttohex(estr2, 8) + inttohex(estr3, 8) + 
        inttohex(estr4, 8);
    asm
         mov eax, 80000004h
        cpuid
        mov estr1, eax
        mov estr2, ebx
        mov estr3, ecx
        mov estr4, edx
    end;
      estring := estring + inttohex(estr1, 8) + 
        inttohex(estr2, 8) + inttohex(estr3, 8) + 
        inttohex(estr4, 8);
    writeln('CPUID verfuegbar, eingebrannter String (Hex): ' + 
      estring);
    readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.


NetSpider - Di 05.06.07 13:42

Also, bis jetzt scheint ja jeder eine andere ID zu haben... Jetzt wuerd mich mal interessieren, was die ID eines Intel Core2 Duo E6600 - also, sollte einer von euch den selben Prozessor haben wie ich - bitte macht den ID-Test. Ich hab auf verschiedenen System komplett identische ID erhalten.

@Silas:
Hab dein Program getestet - das gibt einen ziemlich langen Hex-Wert aus. Wie bereits gesagt - in Assembler kenn ich micht aus. Der Code liest den Prozessor-String aus? Ist das sowas wie die Prozessor-ID? Mein Program liest ja irgendwie irgendeine Nummer aus dem Kern aus - d.h. viele Kerne viele Nummern...
Jedenfalls ist bei deinem Program die Nummer immer gleich - d.h. egal wie ich die Affinity setze - das Resultat bleibt gleich. Diese Nummer sollte dann auch immer ein Unikat sein, oder?

lg, NetSpider


mister_x - Di 05.06.07 14:31

user profile iconNetSpider hat folgendes geschrieben:
Also, bis jetzt scheint ja jeder eine andere ID zu haben... Jetzt wuerd mich mal interessieren, was die ID eines Intel Core2 Duo E6600 - also, sollte einer von euch den selben Prozessor haben wie ich - bitte macht den ID-Test. Ich hab auf verschiedenen System komplett identische ID erhalten.

@Silas:
Hab dein Program getestet - das gibt einen ziemlich langen Hex-Wert aus. Wie bereits gesagt - in Assembler kenn ich micht aus. Der Code liest den Prozessor-String aus? Ist das sowas wie die Prozessor-ID? Mein Program liest ja irgendwie irgendeine Nummer aus dem Kern aus - d.h. viele Kerne viele Nummern...
Jedenfalls ist bei deinem Program die Nummer immer gleich - d.h. egal wie ich die Affinity setze - das Resultat bleibt gleich. Diese Nummer sollte dann auch immer ein Unikat sein, oder?

lg, NetSpider


Ich hab den test gemacht bei meinen E6600
beide ham die selbe ID

178216910336583011075053569
1782133120583011075053569

also des gleiche wie bei dir....
ich hab auch en gigabyte mainboard (GA-965P-DS3)


Kroko - Di 05.06.07 14:51

@NetSpider, was kommt denn bei Dir hier [http://www.delphi-forum.de/viewtopic.php?t=60754] raus?

Bei Interesse suche ich mal die Quellen :?


NetSpider - Di 05.06.07 15:04

@mister_x:
*g*g*g* - das gleiche Board hab ich auch... Man oh man! Also irgendwie taugt diese Funktion gar net... Vielleicht is das so ne Nummer aus der man rausfinden kann welche Hardware installiert ist :-)

@Kroko:
Dein Progg lauft unter Vista nicht - werds aber sofort unter XP testen...

OK, hab jetzt den Test gemacht:


MrSaint - Di 05.06.07 15:11

http://www.sandpile.org/ia32/cpuid.htm

Dein Rückgabewert der Funktion beschreibt den Prozessor-Typ also eindeutig, nicht den Prozessor. Vonn du EAX = 1 reinschiebst kommen nur Typ-Daten des prozessors zurück (z.B. was für Features er unterstützt etc.), welche natürlich gleich sind bei zwei Prozessoren gleicher Bauart. Vllt wäre es besser, wenn du einfach mal eine 3 in EAX reinschiebst statt der 1, laut Sandpile bekommst du dann die Seriennummer des Prozessors. Also etwa so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
asm
PUSH    EBX       {Save affected register}
PUSH    EDI
MOV     EDI,EAX   {@Resukt} 
MOV     EAX,3
DW      CPUID     {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;


Damit kommt bei mir, Intel Centrino mit 1,5 GHz folgende ID raus: 453304332400738472061



MrSaint

EDIT: seh gerade, dass die Methode von hathor oben auch mit EAX = 3 arbeitet, die sollte also auch besser sein als die ursprüngliche....

EDIT2: Oh, laut sandpile soll man die CPU-Seriennummer mit CPU type/family etc. verknüpfen, evtl. noch mit dem Vendor-ID String. Ersteres macht hathors Code, der ist also besser als meiner... Wenn jetzt jemand den Vendor_ID String auch noch mit rein haben will, kann man die "Rückgabestruktur" ja noch etwas erweitern, und noch EAX = 0 mit CPUID auswerten....


Silas - Di 05.06.07 15:14

Joachim Rhode/Marcus Roming: Assembler hat folgendes geschrieben:
Funktion 8000_0002h:
EAX - Eingebrannter String
EBX - Eingebrannter String (Fortsetzung)
ECX - Eingebrannter String (Fortsetzung)
EDX - Eingebrannter String (Fortsetzung)
Funktion 8000_0003h:
EAX - Eingebrannter String
EBX - Eingebrannter String (Fortsetzung)
ECX - Eingebrannter String (Fortsetzung)
EDX - Eingebrannter String (Fortsetzung)
8000_0004h
EAX- -Eingebrannter String
EBX - Eingebrannter String (Fortsetzung)
ECX - Eingebrannter String (Fortsetzung)
EDX - Eingebrannter String (Fortsetzung)

Ehrlich gesagt - mehr weiß ich nicht. Mein Programm gibt den String allerdings der einfachheit halber nicht als Solchen aus, sondern als Hex-Zahl, deswegen. Ich nehme aber mal an, dass er sowas wie eine Seriennummer darstellt.


MrSaint - Di 05.06.07 15:17

user profile iconSilas hat folgendes geschrieben:

Ehrlich gesagt - mehr weiß ich nicht. Mein Programm gibt den String allerdings der einfachheit halber nicht als Solchen aus, sondern als Hex-Zahl, deswegen. Ich nehme aber mal an, dass er sowas wie eine Seriennummer darstellt.


Nein. Das ist ein Beschreibungsstring des Prozessors, keine Seriennummer. Bei mir zum Beispiel irgendwas á la "Intel Pentium M 1,5 GHz" oder so... Der ist also _noch_ allgemeiner als die ursprüngliche Lösung....


Kroko - Di 05.06.07 15:20

Sagt mir, wenn ich falsch liege, aber laut Deiner Anzeige, steht dort, dass die Seriennummer disabled ist, da wird sie ja dann auch nicht ausgelesen, oder?


MrSaint - Di 05.06.07 15:22

user profile iconKroko hat folgendes geschrieben:
Sagt mir, wenn ich falsch liege, aber laut Deiner Anzeige, steht dort, dass die Seriennummer disabled ist, da wird sie ja dann auch nicht ausgelesen, oder?


Meinst du mich? Wo steht das?


Kroko - Di 05.06.07 15:26

user profile iconMrSaint hat folgendes geschrieben:
user profile iconKroko hat folgendes geschrieben:
Sagt mir, wenn ich falsch liege, aber laut Deiner Anzeige, steht dort, dass die Seriennummer disabled ist, da wird sie ja dann auch nicht ausgelesen, oder?


Meinst du mich? Wo steht das?

Nein, ich meine NetSpider in Bezug auf Result.jpg


NetSpider - Di 05.06.07 15:32

@MrSaint:
also, wenn ich 1 auf 3 aendere, dann kommt bei mir als Ergebnis 0000. Mach ich da irgendwas falsch?

@Kroko:
Ich hab mich auch gewundert, warum da 'disabled' steht - aber, ich kann dir da keine Antwort drauf geben. Was ist mit der Nummer drunter? Da steht doch was dort. Was ist das denn fuer eine Nummer? Erkennt dein Programm einen DualCore? Das wuerde das disabled vielleicht erklaeren - vielleicht. Und es ist ja eigentlich nur ein Prozessor - trotz 2 physikalischen Einheiten.

Also, wenns irgendwie moeglich ist, dann sollte das Programm am Ende die (richtige)Serien-Nummer des Prozessors ausgeben. Jetzt - wie oben schon gesagt - ist es ja eigentlich nur ein Prozessor - aber meine CPUCount-Funktion zeigt 2 an. Ist ja soweit in Ordnung, aber hat jetzt so ein DualCore eigentlich 2 Seriennummern wegen 2 Kernen oder nur eine, weil ich nur ein Bauteil in meinen PC reinstecke?

Und noch was - Assembler is echt lustig - im Moment verteh ich echt nur Bahnhof was diese Zeilen da machen... Trotzdem muss das Problem geloest werden!

Danke schonmal an alle!


Kroko - Di 05.06.07 15:42

user profile iconNetSpider hat folgendes geschrieben:
...
@Kroko:
Ich hab mich auch gewundert, warum da 'disabled' steht - aber, ich kann dir da keine Antwort drauf geben. Was ist mit der Nummer drunter? Da steht doch was dort. Was ist das denn fuer eine Nummer? Erkennt dein Programm einen DualCore? Das wuerde das disabled vielleicht erklaeren - vielleicht. Und es ist ja eigentlich nur ein Prozessor - trotz 2 physikalischen Einheiten.

Alle Antworten ohne Garantie:
(1)Um diese ID gab es mal ein riesen Hickhack, die Datenschützer leifen Sturm, weil damit bestimmt Dinge möglich sein sollten, die es nicht geben sollte/dürfte. Daher wurde die ID schnellsten enabled/disabled per BIOS (?) gemacht. MS hätte damit ein zBsp eine todsicheren HardwareKey gehabt und ...
(2) mein Prog. erkennt keinen Dualcore, und bei ID disabled wird halt Blödsinn gelesen!
user profile iconNetSpider hat folgendes geschrieben:
Also, wenns irgendwie moeglich ist, dann sollte das Programm am Ende die (richtige)Serien-Nummer des Prozessors ausgeben. Jetzt - wie oben schon gesagt - ist es ja eigentlich nur ein Prozessor - aber meine CPUCount-Funktion zeigt 2 an. Ist ja soweit in Ordnung, aber hat jetzt so ein DualCore eigentlich 2 Seriennummern wegen 2 Kernen oder nur eine, weil ich nur ein Bauteil in meinen PC reinstecke?

(3) keine Ahnung, aber ich schätze mal ein Prozessor(mit zwei Kernen) eine ID
(4) Disabled heißt Disabled und sollte meiner Meinung nur per Bios änderbar sein.

user profile iconNetSpider hat folgendes geschrieben:
Und noch was - Assembler is echt lustig - im Moment verteh ich echt nur Bahnhof was diese Zeilen da machen... Trotzdem muss das Problem geloest werden!

Danke schonmal an alle!


(5) Viel Spaß!


NetSpider - Di 05.06.07 15:59

Nun gut - ich moechte ja jetzt nicht das versuchen, was Microsoft nicht geschafft hat (:-)). Ich meine diesen eindeutigen Hardware-Key.

Also - wenn ich das jetzt noch mal alles ein bisschen zusammenfasse:
Mein Programm liest Informationen ueber den Prozessor-Typ aus. D.h. Gleiche Prozessoren -> gleiche ID-Nummern.
Mein Programm zaehlt die installierten CPUs (SingleCPU = 1, DualCore = 2, QuadCore = 4, usw.) und liest die Seriennummern fuer jeden Kern aus...

Silas Version soll nicht so eindeutig sein, weil das Programm nur den Prozessor-String ausliest? Aber der aendert sich doch auch von Model zu Model, oder nicht? Also, im Endeffekt muesste es doch eigentlich das selbe sein - was die Unterschiedlichkeit der Nummern angeht.

Also - kann man jetzt eindeutige Hardware-IDs auslesen oder ist das gaenzlich nicht machbar? CPU braucht jeder (moderne) PC - wie schauts aus mit Mainboard, Southbridge, Northbridge oder dem RAM? Ist das da auch nicht moeglich?

NetSpider


MrSaint - Di 05.06.07 16:10

So, hab jetzt nochmal was wegen der Seriennummer. Habe festgestellt, dass die bei meiner CPU auch disabled ist :shock: naja, auf jeden Fall sollte der Code tun:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
type
  TPSN = record
    h,
    m,
    l     : Cardinal;
  end;

function PSNAvailable: boolean;
var
  edx_out   : Cardinal;
begin
  asm
    mov   eax, 1
    cpuid
    mov   edx_out, edx
  end;
  // Test auf Bit #18 -> PSN Bit
  Result := (edx_out and $40000) <> 0;
end;

function GetPSN: TPSN; register;
begin
  Result.h := 0;
  Result.m := 0;
  Result.l := 0;
  asm
    PUSH    EBX       {Save affected register}
    PUSH    EDI
    MOV     EDI,EAX   {@Resukt}
    MOV     EAX,1
    DW      $A20F     {CPUID Command}
    STOSD             {CPUID[1]}
    MOV     EAX, 3
    DW      $A20F
    MOV     EAX, EDX
    STOSD
    MOV     EAX,ECX
    STOSD
    POP     EDI       {Restore registers}
    POP     EBX
  end;
end;

function PSNToString(p: TPSN): string;
begin
  Result := IntToStr(p.h) + '-' + IntTostr(p.m) + '-' + IntToStr(p.l);
end;


Habe unter http://www.codeproject.com/system/PIIISN.asp gefunden, dass die "CPU-Seriennummer" sich wohl aus "Processor-signature-Bits" (EAX = 1) und "Seriennummer" (EAX = 3) berechnet.... Hab das nun mal gemahct. Inklusive Funktion, die überprüft, ob die CPU überhaupt eine Seriennummer hat oder ob nur Schrott raus kommt.... Ich weiß jetzt nicht wie's mit Multicores ist, hab sowas nicht und kann deshalb nix probieren...


Zu Silas' Version: Es ist halt so, dass es möglich wäre (keine Ahnung ob das gemacht wird, wäre aber durhcaus möglich) zwei CPUs zu fertigen, die die gleiche Taktfrequenz haben, aber eine andere "brand ID" haben (das mit dem µm). Dann wäre der String von Silas bei beiden CPUs identisch, die erste Version hätte aber unterschiedliche Werte..


Eine eindeutige Hardware-ID ist sowieso immer etwas problematisch, da der User ja auch einfach genau dieses Hardware-Teil ausbauen kann und ein neues einsetzen kann. Besser ist da ein Wert über viele Hardware-Teile zu machen, bei dem man dann rausrechnen kann, wieviele Teile sich geändert haben. Wenn sich dann > 3 Teile geändet haben nimmt man z.B. an, dass es nicht der gleiche Rechner ist. So macht das ja Windows mit seiner Aktivierung etc. Keine Ahnung wie die das aber genau berechnen, ist mit Sicherheit nicht ganz trivial.



MrSaint


Kroko - Di 05.06.07 16:13

user profile iconMrSaint hat folgendes geschrieben:
...
Eine eindeutige Hardware-ID ist sowieso immer etwas problematisch, da der User ja auch einfach genau dieses Hardware-Teil ausbauen kann und ein neues einsetzen kann. Besser ist da ein Wert über viele Hardware-Teile zu machen, bei dem man dann rausrechnen kann, wieviele Teile sich geändert haben. Wenn sich dann > 3 Teile geändet haben nimmt man z.B. an, dass es nicht der gleiche Rechner ist. So macht das ja Windows mit seiner Aktivierung etc. Keine Ahnung wie die das aber genau berechnen, ist mit Sicherheit nicht ganz trivial.



MrSaint

erzähle das mal MS: ich habe nur den Speicher aufgestockt und schon mußte ich mein WinDoofs neu identifizieren lassen :cry:


NetSpider - Di 05.06.07 16:41

OK - deinen Code werd ich spaeter mal testen - und vielleicht nochmal ein kleines Prog machen - und dann muesste ich das nochmal mit Mister_x vergleichen, was dessen PC da fabriziert...

Nun gut - also danke erstmal und das mit dem MultiCore - naja - mal sehen.

NetSpider


NetSpider - Mi 06.06.07 06:04

Hi noch mal,

@MrSaint:
Ich hab dinen Code mal ausprobiert - allerdings bekomme ich da immer eine Access Violation 000000 oder so. Ich hab mir deine Quelle mal angesehen, die lesen die ID-Nummer eines P3 aus - weiter unten steht bereits, dass es mit einem P4 nichtmehr funktioniert. P3 ist eine 32Bit CPU... Ich hab ne 64 Bit CPU... Kann es sein, dass da erneut alles ueber den Haufen geworfen wurde und die Informationen in einem anderen Register/Offset/Position -was weiss ich- gespeichert sind?

Ich werd mich wahrscheinlich an den Code halten den ich zu Begin gepostet habe - der hat ueberall funktioniert und es ist nicht so schlimm, wenn er nicht 100%ig eindeutig ist.
In Verbindung mit der MAC und anderen Nummern kann man eine Identifikation eines Computers fast eindeutig machen - fast. Und das reicht.

Es geht hier um die Registrierung (intern) einer Client/Server Software. Wenn der Server nur eine 10-Platz-Lizens hat, dann koennen sich maximal 10 Computer bei ihm registrieren und dann ist der Server voll. Wenn der 11 daherkommt und anbandeln moechte und keinen gueltigen Pass hat - wird er abgeschoben...

Danke an alle - NetSpider


Delete - Mi 06.06.07 17:13

Im Anhang habe ich noch was Schönes gefunden:


NetSpider - Mi 06.06.07 19:16

Hi hathor,

dieses Program hab ich auch schon gefunden... Nur ist das auch wieder bei selben Modellen die selbe Nummer.

BTW - ich hab mal alle Funktionen die ich so gefunden hab in eine Kompo gepackt - wen's interessiert: