This example returns information about an attached file system.
#define INCL_DOSFILEMGR /* File manager values */
#define INCL_DOSERRORS /* DOS error values */
#include <os2.h>
#include <stdio.h>
#include <string.h>
int main(VOID)
{
UCHAR szDeviceName[8] = "C:"; /* Device name or drive letter string */
ULONG ulOrdinal = 0; /* Ordinal of entry in name list */
PBYTE pszFSDName = NULL; /* pointer to FS name */
PBYTE prgFSAData = NULL; /* pointer to FS data */
APIRET rc = NO_ERROR; /* Return code */
/* Return-data buffer should be large enough to hold FSQBUFFER2 */
/* and the maximum data for szName, szFSDName, and rgFSAData */
/* Typically, the data isn't that large. */
BYTE fsqBuffer[sizeof(FSQBUFFER2) + (3 * CCHMAXPATH)] = {0};
ULONG cbBuffer = sizeof(fsqBuffer); /* Buffer length) */
PFSQBUFFER2 pfsqBuffer = (PFSQBUFFER2) fsqBuffer;
rc = DosQueryFSAttach(
szDeviceName, /* Logical drive of attached FS */
ulOrdinal, /* ignored for FSAIL_QUERYNAME */
FSAIL_QUERYNAME, /* Return data for a Drive or Device */
pfsqBuffer, /* returned data */
&cbBuffer); /* returned data length */
/* On successful return, the fsqBuffer structure contains */
/* a set of information describing the specified attached */
/* file system and the DataBufferLen variable contains */
/* the size of information within the structure */
if (rc != NO_ERROR) {
printf("DosQueryFSAttach error: return code = %u\n", rc);
return 1;
} else {
/* The data for the last three fields in the FSQBUFFER2 */
/* structure are stored at the offset of fsqBuffer.szName. */
/* Each data field following fsqBuffer.szName begins */
/* immediately after the previous item. */
pszFSDName = pfsqBuffer->szName + pfsqBuffer->cbName + 1;
prgFSAData = pszFSDName + pfsqBuffer->cbFSDName + 1;
printf("iType = %d\n", pfsqBuffer->iType);
printf("szName = %s\n", pfsqBuffer->szName);
printf("szFSDName = %s\n", pszFSDName);
printf("rgFSAData = %s\n", prgFSAData);
}
return NO_ERROR;
}