program GetWMI_USBConnectedInfo;
{$APPTYPE CONSOLE}
uses
Windows,
Classes,
ActiveX,
Variants,
SysUtils,
WbemScripting_TLB;
procedure GetUSBDiskDriveInfo;
var
WMIServices : ISWbemServices;
Root,a,b : ISWbemObjectSet;
Item,Item2 : Variant;
i,ii,iii,iiii: Integer;
start,stop,freq:Int64;
begin
QueryPerformanceFrequency(freq);
QueryPerformanceCounter(start);
WMIServices := CoSWbemLocator.Create.ConnectServer('
.', '
root\cimv2','
', '
', '
', '
', 0,
nil);
Root := WMIServices.ExecQuery('
Select * From Win32_DiskDrive','
WQL', 0,
nil);
for i := 0
to Root.Count - 1
do
begin
Item := Root.ItemIndex(i);
for ii := VarArrayLowBound(Item.Capabilities, 1)
to VarArrayHighBound(Item.Capabilities, 1)
do if (Item.Capabilities[ii] = 7)
then begin
Writeln('
Caption '+VarToStr(Item.Caption));
Writeln('
Name '+VarToStr(Item.
Name));
Writeln('
DeviceID '+VarToStr(Item.DeviceID));
Writeln('
Partitions '+VarToStr(Item.Partitions));
Writeln('
PNPDeviceID '+VarToStr(Item.PNPDeviceID));
Writeln('
SerialNumber '+VarToStr(Item.SerialNumber));
Writeln('
Signature '+VarToStr(Item.Signature));
a := WMIServices.ExecQuery('
ASSOCIATORS OF {Win32_DiskDrive.DeviceID=''
' + VarToStr(Item.DeviceID) + '
''
} WHERE AssocClass = Win32_DiskDriveToDiskPartition','
WQL', 0,
nil);
for iiii := 0
to a.Count - 1
do begin
b := WMIServices.ExecQuery('
ASSOCIATORS OF {Win32_DiskPartition.DeviceID=''
' + VarToStr(Variant(a.ItemIndex(iiii)).DeviceID) + '
''
} WHERE AssocClass = Win32_LogicalDiskToPartition','
WQL', 0,
nil);
for iii := 0
to b.Count - 1
do begin
Item2 := b.ItemIndex(iii);
Writeln('
Drive = ' + Item2.Caption);
end;
end;
Writeln;
Writeln;
end;
end;
QueryPerformanceCounter(stop);
if (freq > 0)
then
Writeln('
Time took: ' + FloatToStr((stop-start) / freq))
else
Writeln('
Unable to measure time!');
end;
begin
try
CoInitialize(
nil);
GetUSBDiskDriveInfo;
Readln;
CoUninitialize;
except
on E:
Exception do
Begin
CoUninitialize;
Writeln(E.Classname, '
: ', E.
Message);
Readln;
End;
end;
end.