Код:
char *listds()
{
HANDLE hh=GetProcessHeap();
char buff[1024],out[1024];
void *rbuf=HeapAlloc(hh,HEAP_ZERO_MEMORY,1024*4);
void *rbuf1=HeapAlloc(hh,HEAP_ZERO_MEMORY,1024*4);
void *rbuf2=HeapAlloc(hh,HEAP_ZERO_MEMORY,1024*4);
void *rbuf3=HeapAlloc(hh,HEAP_ZERO_MEMORY,1024*4);
char *buf=(char*)rbuf;char *buf1=(char*)rbuf1;char *buf2=(char*)rbuf2;
char *buf3=(char*)rbuf3;
struct {
UINT type;
LPCSTR name;
} DTF [] = {
{ DRIVE_UNKNOWN, " (Unknown) " },
{ DRIVE_NO_ROOT_DIR, " (Invalid path) " },
{ DRIVE_REMOVABLE, " (Removable) " },
{ DRIVE_FIXED, " (Logic Volume) " },
{ DRIVE_REMOTE, " (Network drive) " },
{ DRIVE_CDROM, " (CD-ROM) " },
{ DRIVE_RAMDISK, " (RAM disk) " },
{ 0, NULL},
};
GetLogicalDriveStrings(sizeof(buff)/sizeof(char),buff);
DWORD FBA;DWORD TNOB;DWORD TNOFB;
for(int i=0; i<1024-1; i++)
if( buff[i]==0)
{
if(buff[i+1] != 0)
buff[i] =(char) 0xD;
else
break;
}strcpy(buf,buff);
for(;;)
{
strncpy(buf1,buf,3);buf+=4;
strcat(buf2,buf1);strcat(buf2,DTF[GetDriveType(buf1)].name);
if(GetVolumeInformation(buf1,0,0,0,0,0,0,0)==true)
{
GetDiskFreeSpaceEx(buf1,(PULARGE_INTEGER)&FBA,(PULARGE_INTEGER)&TNOB,(PULARGE_INTEGER)&TNOFB);
sprintf(buf3,"%d",TNOFB/(1024));strcat(buf2,"avalaible kbytes:");
strcat(buf2,buf3);strcat(buf2,"\n");
memset(buf3,NULL,1024);
}
if(GetVolumeInformation(buf1,0,0,0,0,0,0,0)!=true)
{
strcat(buf2,"<No Disk>\n");
}
if(strlen(buf)==0){break;}
}
strcpy(out,buf2);
HeapFree(hh,0,rbuf);
HeapFree(hh,0,rbuf1);
HeapFree(hh,0,rbuf2);
HeapFree(hh,0,rbuf3);
return(out);
}