function GetSerial(Drive: Char): ShortString;
const InBuffer: array [0..7] of Cardinal = ($200,$10100,$ECB000,0,0,0,0,0);
var
hDevice, Dummy: Cardinal;
IdeInfo: array [0..$83] of Cardinal;
begin
Result[0] := #0;
hDevice := CreateFile(PChar('\\.\' + Drive + ':'), GENERIC_READ + GENERIC_WRITE, FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hDevice <> INVALID_HANDLE_VALUE then
begin
DeviceIoControl(hDevice, $7C088, @InBuffer, SizeOf(InBuffer), @IdeInfo, SizeOf(IdeInfo), Dummy, nil);
CloseHandle(hDevice);
Result[0] := #20;
Move(IdeInfo[9], Result[1], Byte(Result[0]));
end;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Caption := '"'+GetSerial(ComboBox1.Text[1])+'"'; end;