Entwickler-Ecke

Windows API - Seriennummer eines Datenträgers ermitteln


Peter18 - Fr 25.05.12 16:51
Titel: Seriennummer eines Datenträgers ermitteln
Ein freundliches Hallo an alle,

und wieder ein Datenträgerproblem: Ich möchte die Seriennummer eines wechselbaren Datenträgers ermitteln, um ihn eindeutig zu identifizieren. Dazu habe ich die "GetVolumeInformation" verwendet. Ich erhalte aber nur "1" als Ergebnis oder eine Fehlermeldung, wenn ich einen Pointer verwende.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function VolumeSN(Drive: string): string;
var
  OldErrorMode      : Integer;
  NotUsed, VolFlags : DWORD;
  SN                : LPDWORD;
  Buf               : array [0..MAX_PATH] of Char;
begin
  OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    GetVolumeInformation(PChar(Drive), Buf,
                         sizeof(Buf), SN, NotUsed, VolFlags,
                         nil0);
    Result := IntToStr( Integer( SN ) );
  finally
    SetErrorMode(OldErrorMode);
  end;
end;

Hat jemand einen Tipp?

Dank im voraus mit Grüßen von der Nordsee

Peter


bummi - Fr 25.05.12 17:17


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function VolumeSN(Drive: Char): string;
var
 sn,cl,sf:DWord;
begin
  sn :=0;
  cl := 0;
  sf := 0;
  GetVolumeInformation(PChar(Drive + ':\') , nil0 , @SN  , cl  ,sf  , nil0);
  Result := IntToHex(HiWord(sn), 4) + '-' + IntToHex(Word(sn), 4);
end;


jaenicke - Fr 25.05.12 17:44

Wobei es wenig Sinn macht den Rückgabewert zu ignorieren... Wenn die Funktion fehlschlägt, sollte man das schon behandeln. ;-)


Peter18 - Sa 26.05.12 11:33

Hallo bummi, hallo jaenicke,

dank euch beiden, :D die Hilfe hat das nicht hergegeben, aber warscheinlich hätte ich mich auch noch bei Windows umsehen sollen.

Danke noch mal und Grüße von der Nordsee

Peter