ADC Home > Reference Library > Technical Q&As > Carbon > File Management >

Determining if a Drive is a Network Volume


Q: How can I reliably determine if a volume is mounted over the network ?

A: The best way to determine whether a volume is mounted over the network is to compare the vMServerAdr field of the GetVolParmsInfoBuffer (returned by PBHGetVolParms) to zero. This field is zero on local volumes and non-zero on network volumes. This technique is illustrated by the isNetworkVolume routine defined in the DTS sample code MoreFiles.

The vMServerAdr field is actually defined to be the AppleTalk address (an AddrBlock) of the server which exports the volume. This makes sense for volumes mounted over AppleTalk, but not for other types of network file systems, such as AppleShare IP. However, a vMServerAdr value of non-zero implies a network file system, even for non-AppleTalk network file systems.

If you merely wish to determine whether a volume is an AppleShare volume, you can do so by comparing the volume's controlling driver reference number to the driver reference number of the ".AFPTranslator" driver.

The following code iterates the volume list, printing all the volumes that are controlled by AFP:

static void PrintAFPVolumes()
{
    OSErr err;
    HVolumeParam volPB;
    Str255 volName;
    DriverRefNum afpRefNum;
    SInt16 index;

    err = OpenDriver("\p.AFPTranslator", &afpRefNum);
    if (err == noErr) {
        index = 1;
        do {
            volName[0] = 0;
            volPB.ioNamePtr = volName;
            volPB.ioVRefNum = 0;
            volPB.ioVolIndex = index;
            err = PBHGetVInfoSync((HParmBlkPtr) &volPB);
            if (err == noErr) {
                if (volPB.ioVDrvInfo != 0 &&
                    volPB.ioVDRefNum == afpRefNum) {
                    printf("%#s\n", volName);
                }
            }
            index += 1;
        } while (err == noErr);
    }
}

[June 01 1998]


Did this document help you?
Yes: Tell us what works for you.
It’s good, but: Report typos, inaccuracies, and so forth.
It wasn’t helpful: Tell us what would have helped.