The folling little 16 bit program produces the following output on my computer:
LOCAL C: FAT LOCAL D: HPFS LOCAL E: HPFS LOCAL F: FAT REMOTE P: LAN \\SERV1\C$ REMOTE Q: LAN \\SERV1\D$ REMOTE R: LAN \\SERV1\E$
Code....
/* qdisk.c */
#define INCL_NOPM
#define INCL_DOS
#include <os2.h>
#include <stdio.h>
#include <stdlib.h>
void errorRC(USHORT rc)
{
char msg[256];
USHORT bc;
if(0 != (rc=DosGetMessage(NULL, 0, msg, sizeof(msg), rc,
"OSO001.MSG", &bc))) {
printf("SYS%04u: Unable to access OSO001.MSG\n", rc);
}
else DosWrite(2, msg, bc, &bc);
}
void qdisk(char drv)
{
USHORT rc, len;
char dev[3];
void *buf;
char *p;
if(drv < 'C')
return;
sprintf(dev, "%c:", drv);
buf = malloc(2048);
len = 2048;
rc = DosQFSAttach(dev, 0, FSAIL_QUERYNAME, buf, &len, 0L);
if(rc){
errorRC(rc);
return;
}
switch((*(PUSHORT)buf)){
case FSAT_CHARDEV : printf("CHAR "); break;
case FSAT_PSEUDODEV: printf("DEV "); break;
case FSAT_LOCALDRV : printf("LOCAL "); break;
case FSAT_REMOTEDRV: printf("REMOTE "); break;
default: printf("Unknown "); break;
}
p = buf;
p += sizeof(USHORT); /* itype */
printf("%-3s ", p+sizeof(USHORT));
p += (sizeof(USHORT) + (*(USHORT *)p) + 1); /* cbName */
printf("%-8s ", p+sizeof(USHORT));
p += (sizeof(USHORT) + (*(USHORT *)p) + 1); /* cbFSDName */
if((*(USHORT *)p)) /* cbFSAData */
printf("%s", p+sizeof(USHORT));
printf("\n");
free(buf);
}
void cdecl main(void)
{
char drv;
USHORT usDisk;
ULONG ulDrives;
DosQCurDisk(&usDisk, &ulDrives); /* gets current drive */
for (drv = 'A'; drv <= 'Z'; drv++) {
if (ulDrives & 1) /* if the drive bit is set, */
qdisk(drv);
ulDrives >>= 1;
}
}
ps: DosQSysInfo() will return the max path length that your version of OS/2 supports. But since this API is specific to OS/2, and not to a particular drive, it does not answer your original question.
Credit: Peter Fitzsimmons