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