procedure List_CDROM_Drives(s : TStrings; ListAllDrives : boolean; DrivesToList : TDrivesSet); var r: LongWord; Drives: array[0..128] of char; pDrive: PChar; DriveType : DWord; begin s.Clear; r := GetLogicalDriveStrings(SizeOf(Drives), Drives); if r = 0 then Exit; if r > SizeOf(Drives) then raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY)); pDrive := Drives; while pDrive^ <> #0 do begin DriveType := GetDriveType(pDrive); if ListAllDrives then s.Add(pDrive) else if DriveType in DrivesToList then s.Add(pDrive); Inc(pDrive, 4); end; end;