Entwickler-Ecke

Windows API - hardwareid auslesen


Handycommander - So 31.07.05 11:37
Titel: hardwareid auslesen
hi,

also ich möchte die hardwareid eines wechseldatenträgers auslesen. wie kann ich das machen?
danke


AXMD - So 31.07.05 11:42

Was verstehst du unter einer Hardware-ID? Die Seriennummer, die (auch) außen draufsteht?

AXMD


Handycommander - So 31.07.05 11:54

ja auf einem wechseldatenträger wie zum beispiel einer MMC karte steht ja aussen keine seriennummer drauf. kann man die dann trotzdem auslesen oder gibts da eine andere ID zum auslesen?


sibbe - So 31.07.05 12:46

Hi,

versuchs mal mit der API-Funktion Suche im MSDN GETVOLUMEINFORMATION.
Interessant dürfte da der lpVolumeSerialNumber-Parameter für dich sein.

Inwieweit das aber mit Wechseldatenträgern funktioniert weiß ich nicht, musste halt ausprobieren. :wink:

greetz sibbe


Handycommander - So 31.07.05 13:38

hab des jetzt so probiert. da bekomm ich die seriennummer der wechseldatenträger, wenn sie ne MMC karte ist. aber von einem speicherstift bekomm ich sie nicht.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function GetHardDiskSerial(const DriveLetter: Char): string;
var
  NotUsed:     DWORD;
  VolumeFlags: DWORD;
  VolumeInfo:  array[0..MAX_PATH] of Char;
  VolumeSerialNumber: DWORD;
begin
  GetVolumeInformation(PChar(DriveLetter + ':\'),
    nil, SizeOf(VolumeInfo), @VolumeSerialNumber, NotUsed,
    VolumeFlags, nil0);
  Result := Format('Label = %s   VolSer = %8.8X',
    [VolumeInfo, VolumeSerialNumber])
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetHardDiskSerial('c'));
end;


sibbe - So 31.07.05 15:25

So hab nochmal ein bisschen rumgeschaut und dabei folgendes gefunden:

Zum einen ist die Seriennummer wahrscheinlich gar nicht die, die du haben willst, weil
Zitat:
GetVolumeInformation [...] This function returns the volume serial number that the operating system assigns when a hard disk is formatted. To programmatically obtain the hard disk's serial number that the manufacturer assigns, use the Windows Management Instrumentation (WMI) Win32_PhysicalMedia property SerialNumber.

oder gehe ich falsch in der Annahme, dass du die Seriennummer quasi "vom Werk" haben willst?

Eine Möglichkeit wär also mit WMI an die Sache ranzugehen (wovon ich mal überhaupt keinen Plan hab, ist das in Delphi überhaupt implementiert??)

Eine weitere, in meinen Augen einfachere, Sache wäre, die Daten über die Registry auszulesen. Allerdings hab ich keine Ahnung, was da jetzt genau was ist.
Unter WinXP würd ich unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum mal schauen, unter Win98 war das glaub ich nur HKEY_LOCAL_MACHINE\Enum.

Aber alle Angaben ohne Gewähr :)
Hab auch keinen Speicherstift oder ähnliches, kann es also auch nicht selbst ausprobieren.

greetz sibbe


Handycommander - So 31.07.05 15:33

ja ok. da sind die ganzen seriennummern vorhanden. aber auch von denen, die nicht gerade angeschlossen sind! kann ich das nicht irgendwie machen, dass ich nur die seriennummer bekomme, von denen, die auch gerade angeschlossen sind?


Handycommander - So 31.07.05 15:56

so hab jetzt den code hergenommen.
der funktioniert wunderbar!
ABER:
bei den MMC karten, wird der code ausgelesen, bei einem speicherstift aber nicht!
warum?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
var
  SerialNum: DWord;
  A,B: DWord;
  C: array [0..255of Char;
  Buffer: array [0..255of Char;
begin
  if GetVolumeInformation(
    PChar('F:\'),
    Buffer,
    256,
    @SerialNum,
    A,
    B,
    C,
    256then Label1.Caption:=IntToStr(SerialNum);
end;


AXMD - So 31.07.05 16:01

user profile iconHandycommander hat folgendes geschrieben:
bei den MMC karten, wird der code ausgelesen, bei einem speicherstift aber nicht!


Und du bist sicher, dass dieser Speicherstift auch einen solchen hat? Schau mal in den Gerätemanager...

AXMD


Handycommander - So 31.07.05 16:05

ja ist er. er wird genauso behandelt wie die mmc karten. also als wechseldatenträger.
aber wenn ich jetzt die seriennummer prüfe, bekomm ich als ergebnis immer 0


AXMD - So 31.07.05 16:07

Nur, weil ihn Windows als Wechseldatenträger erkennt, muss er keine Seriennummer haben.

AXMD


Handycommander - So 31.07.05 16:14

kann ich dann überhaupt irgendwas davon auslesen?


Sprint - So 31.07.05 16:17

user profile iconAXMD hat folgendes geschrieben:
Nur, weil ihn Windows als Wechseldatenträger erkennt, muss er keine Seriennummer haben.

Dann ist aber vermutlich auf dem Datenträger ein Dateisystem wie z.B. FAT oder NTFS. Und dann muss auch eine Volume Seriennummer vorhanden sein.


Handycommander - So 31.07.05 16:25

also das problem hat sich erledigt. habe den speicherstift formatiert und jetzt ließt er die seriennummer aus!