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.