Based upon some code taken from PureArea :
Code: Select all
Structure DriveInfo
DriveLetter$
Volume$
EndStructure
Procedure GetAllDrives(List Drive.DriveInfo())
Protected memLen, *buffer, numDrives, *ptrChar.CHARACTER, i
memLen = GetLogicalDriveStrings_(0, 0)
If memlen
*buffer = AllocateMemory(memLen * SizeOf(CHARACTER))
If *buffer
numDrives = GetLogicalDriveStrings_(memLen,*buffer)>>2
*ptrChar = *buffer
For i = 1 To numDrives
AddElement(Drive())
Drive()\DriveLetter$ = UCase(PeekS(*ptrChar,3))
*ptrChar + SizeOf(CHARACTER)<<2
Drive()\Volume$ = Space(256)
GetVolumeInformation_(Drive()\DriveLetter$, @Drive()\Volume$,255,0,0,0,0,0)
Next
FreeMemory(*buffer)
EndIf
EndIf
EndProcedure
;Test.
NewList Drive.DriveInfo()
GetAllDrives(Drive())
;Take a look at the results.
ForEach Drive()
Debug Drive()\DriveLetter$ + " " + Drive()\Volume$
Next
I may look like a mule, but I'm not a complete ass.