procedure GetFixedDrives(var Drives:TStringList);
var
buf, bufNew:PChar;
s:string;
lenBuf:Integer;
begin
lenBuf:=GetLogicalDriveStrings(0, nil);
buf:=StrAlloc(lenBuf);
try
FillChar(buf^, lenBuf, #0);
GetLogicalDriveStrings(lenBuf, buf);
bufNew:=buf;
s:=string(bufNew);
repeat
If GetDriveType(PChar(s))=DRIVE_FIXED then
Drives.Add(s);
bufNew:=PChar(Integer(StrScan(bufNew, #0)+1));
s:=string(bufNew);
lenBuf:=lenBuf-1-Length(s);
until (lenBuf<=0) or (s='');
finally
StrDispose(buf);
end;
end;