Einzelnen Beitrag anzeigen

neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#8

AW: USB-Seriennummer auslesen

  Alt 4. Feb 2012, 08:57
Hier noch als Ergänzung ein Code-Fragment über den WMI-Ansatz:

Delphi-Quellcode:
var
  objWMIService: OLEVariant;
  colItems: OLEVariant;
  colItem: OLEVariant;
  oEnum: IEnumvariant;
  i: Integer;

  aUSBSerial : string;
  aRegexpr : TArray<string>;
  aDeviceID : string;

begin
  try
    objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
    colItems := objWMIService.ExecQuery('Select * From Win32_DiskDrive Where InterfaceType="USB"', 'WQL', 0);
    oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
    for i := 0 to colItems.Count - 1 do
      if oEnum.Next(1, colItem, iValue) = 0 then
      begin
        // Get the first part:
        aRegexpr := TRegEx.Split(colItem.PNPDeviceID, '\\');
        // Split with & and get the first part.
        aRegexpr := TRegEx.Split(aRegexpr[High(aRegexpr)], '&');
        aUSBSerial := aRegexpr[0];

        //Escape the `\` chars in the DeviceID value because the '\' is a reserved character in WMI.
        aDeviceID := StringReplace(VarStrNull(colItem.DeviceID),'\','\\',[rfReplaceAll]);
Beim Einsatz von zugelassenen USB-Sticks ist darauf zu achten, dass es für eine Reihe von OEM-Produkten (z.B. ChipsBank etc.) inoffizielle Software gibt, mit der man u.a. die Seriennr. und den Sticknamen setzen kann. Damit muss mein freundlicher Raubkopierer noch nicht mal mehr ein Hacker sein. AFAIK gibt es für einige Marken-Produkte (Sandisk) das - bislang - noch nicht. Wen es interessiert, der sucht einfach nach einer russischen Flashboot-Seite und erkundigt sich nach dem Stand der Dinge. Auf jeden Fall darf man sich mit der Abfrage einer zugelassenen Seriennr. allein auch nicht allzu sicher sein.
Andreas
  Mit Zitat antworten Zitat