Let's have a snippet from one of my functions:
The 'ifdef M_I386's mean CSet/2
--- snip ---
EXPORT int GetFileSysAttach ( char cDrv, PVOID pInfo, UnsInt cbInfo ) { CHAR szFileSys [4]; szFileSys [0] = (CHAR) toupper ( cDrv ); szFileSys [1] = ':'; szFileSys [2] = '\0'; DosError ( EXCEPTION_DISABLE ); #ifdef M_I386 Errno = DosQueryFSAttach ( szFileSys, 0, FSAIL_QUERYNAME, pInfo, &cbInfo ); #else Errno = DosQFSAttach ( szFileSys, 0, FSAIL_QUERYNAME, pInfo, &cbInfo, 0L ); #endif DosError ( EXCEPTION_ENABLE ); return Errno ? -1 : 0; } EXPORT int GetFileSysInfo ( PSZ pszFileSys, PFSysInfo pfsi ) { USHORT idDrv; FSALLOCATE fsal; FSINFO fsinfo; #ifdef M_I386 PFSQBUFFER2 fsq = NULL; #else PFSQBUFFER fsq = NULL; PUSHORT pus; #endif CHAR hbuf [L_FILENAME]; PCHAR pch; #ifndef _MT BOOL fProt = ProtectedMode (); #else #define fProt TRUE #endif idDrv = tolower ( *pszFileSys ) - ('a' - 1); DosError ( EXCEPTION_DISABLE ); if ( ! (Errno = DosQFSInfo ( idDrv, 1, (PBYTE) &fsal, sizeof ( fsal ) )) ) Errno = DosQFSInfo ( idDrv, 2, (PBYTE) &fsinfo, sizeof ( fsinfo ) ); DosError ( EXCEPTION_ENABLE ); if ( Errno ) { if ( Errno == ERROR_NO_VOLUME_LABEL ) memset ( &fsinfo, 0, sizeof (fsinfo) ); else return -1; // No disk inserted } if ( fProt ) { if ( GetFileSysAttach ( (CHAR) (idDrv + 'a' - 1), hbuf, L_FILENAME ) ) return -1; #ifdef M_I386 fsq = (PFSQBUFFER2) hbuf; #else fsq = (PFSQBUFFER) hbuf; #endif } DosError ( EXCEPTION_ENABLE ); ...
--- snap ---
I think it's more than you want, the fsal-struct contains the size information, but I think if you want to retrieve ALL information about a logical drive that's what you need.
Credit: Rainer Prem