![]() |
Computer ID und Verarbeitung
Hallo,
im Moment stehe ich vor einem Problem: :wall: 1. Ich möchte gerne eine Computer ID auslesen. Keine Seriennummer von einer Festplatte. In der Form: ####-####-####-#### (in der Art :wink:) Wie zum Beispiel bei den MAGIX (R) Produkten 2. Ich möchte noch im Zusammenhang mit eins zum Beispiel einen Bestimmnten Teil auslesen. 2541-5623-8868-6854 einzeln auslesen und Spiechern (= Speichern kann ich). Sollte auch mit Buchstaben gehen. DANKE |
AW: Computer ID und Verarbeitung
Zitat:
Zitat:
Man nimmt sich einige Eigenschaften ... Festplatten-Seriennummer, CPU-IDs, RAM-Größe, Betriebssystem/Benutzer-IDs usw. Berechnet daraus eine "eigene ID" und schon hat man sowas. Es sollte aber fehlertollerant sein, also möglichst viele/eindeutige Infos und falls sich ein/zwei ändern (z.B. RAM aufgerüstet oder neue Festplatte), dann sollte sowas "kleines" ignoriert werden können. PS: Dazu gibt es schon mehrere Themen in der DP und dort wurden auch fertige Komponenten erwähnt, falls man es nicht selber machen will. |
AW: Computer ID und Verarbeitung
OK, Danke.
Für eine Antwort auf 2 wäre ich noch Dankbar |
AW: Computer ID und Verarbeitung
Zitat:
(*) wenn jetzt einer mit Klonen kommt, dann verweise ich direkt an Russinovich und die Gründe das Tool "newsid" einzustellen. Bis XP inklusive (ich selber habe es nur bis XP SP1 getestet) hat das Tool aber zuverlässig funktioniert. Nur bringt das so ziemlich garnix, weil es bspw. in einem Domänenumfeld die Server durcheinander bringt. |
AW: Computer ID und Verarbeitung
Njoar ... doch, denn auch die ID ist ja irgendwie berechnet? :angle2:
Nja, man könnte ja auch erstmal fragen wozu diese "ID" benötigt wird, bzw. wie sicher/aufwändig die Seriennummernberechnung/-behandlung SystemID-Berechnung sein muß? OK, Wobei man doch auch einfach die System- oder User-SID nehmen könnte, welche oftmals ebenfalls recht "eindeutig" wäre, wie Olli erwähnte, auch wenn sie nur die aktuelle Windowinstallation oder den Benutzer kennzeichnet. Wie gesagt, es gibt schon ein paar fertige Module, welche man nur noch in sein Programm einbauen muß und sich dann selber um fast nix mehr kümmern muß. Eine ID des Systems, auf welchem das Programm grade läuft, braucht man ja "nur", um das System möglichst sicher identifizieren zu können, aber wozu man sowas braucht, wäre schon praktisch zu wissen, um wirklich helfen zu können. ![]() ![]() ![]() |
AW: Computer ID und Verarbeitung
Also ich würde so vorgehen,
zu Frage 1: Die Systemsid ermitteln
Delphi-Quellcode:
Zu Frage 2:
function ConvertSidToStringSid(SID: PSID; var StringSid: LPSTR): Boolean; stdcall;
external 'advapi32.dll' name 'ConvertSidToStringSidA'; function GetAccountSid(const Server, User: WideString; var Sid: PSID): DWORD; var dwDomainSize, dwSidSize: DWord; R: LongBool; wDomain: WideString; Use: DWord; begin Result := 0; SetLastError(0); dwSidSize := 0; dwDomainSize := 0; R := LookupAccountNameW(PWideChar(Server), PWideChar(User), nil, dwSidSize, nil, dwDomainSize, Use); if (not R) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin SetLength(wDomain, dwDomainSize); Sid := GetMemory(dwSidSize); R := LookupAccountNameW(PWideChar(Server), PWideChar(User), Sid, dwSidSize, PWideChar(wDomain), dwDomainSize, Use); if not R then begin FreeMemory(Sid); Sid := nil; end; end else Result := GetLastError; end; function GetSystemSID: string; var SID: PSID; strSID: PChar; CName: array[0..255] of Char; nSize: Cardinal; begin Result := ''; GetComputerName(CName, nSize); if GetAccountSid('', CName, SID) = 0 then begin ConvertSidToStringSid(SID, strSID); Result := strSid; end; end; procedure TForm1.Button1Click(Sender: TObject); begin memo1.Lines.Add('System SID:'+GetSystemSID); end; Eine Möglichkeit wäre einen CRC32 ( in uses crc32 aufnehmen ) aus dieser Sid zu erstellen zb.
Delphi-Quellcode:
Und daraus kannst du deine Seriennummer erstellen und mit Bindestrichen versehen.
function CheckSum(Sid: string): string;
var CRC32: DWORD; STemp: string; SS: string; begin STemp := ''; ss := ''; ss := Sid; CRC32 := $FFFFFFFF; if LENGTH(ss) > 0 then CalcCRC32(Addr(ss[1]), LENGTH(ss), CRC32); STemp := IntToHex(CRC32, 8); Result := STemp; end; |
AW: Computer ID und Verarbeitung
Zitat:
|
AW: Computer ID und Verarbeitung
Nun das man versalzen sollte ist mir schon klar, crc32 finde ich jedoch zu Anschauungszwecken unkomplizierter. :wink:
|
AW: Computer ID und Verarbeitung
Zitat:
Ich wollte nur den Unterschied zwischen Fehlerfindung und Identifizierung klarmachen. |
AW: Computer ID und Verarbeitung
Nur daß CRC32 die "lange" SID auf schlappe 32 Bit reduziert. Wenn, dann doch lieber 'ne größere Hash-Funktion verwenden.
MD5 und SHA1 sind da schon ein paar Bits größer. ![]() Und vor dem Hashen der eigentlichen Daten noch ein bissl SALZ mit einrechnen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz