This one's easy. You need to use the cunningly-named GetLogicalDriveStrings API.
int iStrsLen; char smzDrives [(3+1)*26+1]; char szDrive [3+1]; int i; iStrsLen = GetLogicalDriveStrings (sizeof(smzDrives), smzDrives); if (iStrsLen == 0) { // Handle error } else { if (iStrsLen > sizeof(smzDrives)) { // Buffer not big enough... eh? - I provided space for all 26 !?! } else { // Parse the returned multi-string array. i = 0; while (smzDrives[i]) { strcpy (szDrive, &(smzDrives[i])); // szDrive now contains the root folder of this drive. I // put this in a listbox here: m_ctrlListbox.AddString (szDrive); while (smzDrives[i]) i++; i++; } } }Download