BOOL __stdcall GetLetterOfAllDisk(CHAR cLetter[],BYTE bySize,BYTE * byRequired){
DWORD dwBitsMask;
CHAR cDrv = 'A';
if(byRequired == NULL)return FALSE;
*byRequired = 0;
if(!(dwBitsMask = GetLogicalDrives())) return FALSE;
do{
if(dwBitsMask & 1)
{
cLetter[*byRequired] = cDrv;
(*byRequired)++;
if(*byRequired > (bySize-1))break;
}
cDrv++;
}while(dwBitsMask >>= 1);
while(dwBitsMask >>= 1)
{
if(dwBitsMask & 1)
(*byRequired)++;
}
if(*byRequired > bySize)return FALSE;
else return TRUE;
}
Version 2, plus légère mais sans controle, appelant responsable de passer un buffer de 26 octets mini.
Retourne le nombre de volumes inscrits.
DWORD __stdcall bnLettresVolumes(BYTE *pvols26)
{
DWORD dwBitsMask, n = 0;
BYTE v = 'A';
if(!(dwBitsMask = GetLogicalDrives())) return 0;
do {
if(dwBitsMask & 1) pvols26[n++] = v;
v++;
} while(dwBitsMask >>= 1);
return n;
}