[comp.sys.ibm.pc.programmer] Software interface to drive/directory mapping

pruss@ria.ccs.uwo.ca (? pruss) (05/30/90)

Basically I am wondering what SUBST and JOIN actually do.

Is there some portable way of accessing the SUBST/JOIN data area?
I found it at a different address under DOS 3.3 and 4.01.  Also,
has the format of this data area been released?

It seems that this data area lists the actual unmapped drive:path
for each drive letter and indicates whether the mapping is from
drive:path -> letter or letter -> drive:path. 

I would be interested in a way of doing the drive/dir mapping under
software control.

--;--
pruss@ria.ccs.uwo.ca     //    pruss@ria.UUCP

ralf@b.gp.cs.cmu.edu (Ralf Brown) (05/30/90)

In article <431@ria.ccs.uwo.ca> pruss@ria.ccs.uwo.ca (? pruss) writes:
}Basically I am wondering what SUBST and JOIN actually do.
}
}Is there some portable way of accessing the SUBST/JOIN data area?
}I found it at a different address under DOS 3.3 and 4.01.  Also,
}has the format of this data area been released?

Yes, there is a portable way of accessing it.  No, the format has not 
officially been released.  However, it is described in INTER290.ZIP.

Call INT 21h with AH=52h.  On return, the DWORD at ES:BX+17h points at an
array of current directory structures.

Format of current directory structure (array, 51h bytes [58h for DOS 4.x] per
drive):
Offset  Size    Description
 00h 67 BYTEs   current path as ASCIZ, starting with 'x:\'
 43h    WORD    bit flags
                bit 15: network drive   \ installable file system if both set
                bit 14: physical drive  / invalid drive if neither bit set
                bit 13: JOIN'ed, current path is actual path without JOIN
                        drive letter in path may differ from logical drive name
                bit 12: SUBST'ed, current path is actual path without SUBST
                        drive letter in path may differ from logical drive name
 45h    DWORD   pointer to DOS Disk Block for this drive
---local drives---
 49h    WORD    starting cluster of current directory
                0000h = root, FFFFh never accessed
 4Bh    WORD    ??? seems always to be FFFFh
 4Dh    WORD    ??? seems always to be FFFFh
---network drives---
 49h    DWORD   pointer to a redirector/REDIRIFS record, else FFFFFFFFh
 4Dh    WORD    stored parameter from INT 21/AX=5F03h???
------
 4Fh    WORD    Offset of '\' in current path field representing root directory
                of logical drive (2 if not SUBST'ed or JOIN'ed, otherwise
                number of bytes in SUBST/JOIN path)
---DOS 4.x---
 51h    BYTE    ??? used by network
 52h    DWORD   pointer to IFS driver for this drive, 00000000h if native DOS
 56h    WORD    ???

-- 
{backbone}!cs.cmu.edu!ralf   ARPA: RALF@CS.CMU.EDU   FIDO: Ralf Brown 1:129/46
BITnet: RALF%CS.CMU.EDU@CMUCCVMA   AT&Tnet: (412)268-3053 (school)   FAX: ask
DISCLAIMER? | _How_to_Prove_It_ by Dana Angluin  20. by vehement assertion: It
What's that?|is useful to have some kind of authority relation to the audience

ralf@b.gp.cs.cmu.edu (Ralf Brown) (05/30/90)

Oops, made a typo.  That's ES:BX+16h in DOS 3.1 and up, not 17h (which is only
valid for DOS 3.0).

-- 
{backbone}!cs.cmu.edu!ralf   ARPA: RALF@CS.CMU.EDU   FIDO: Ralf Brown 1:129/46
BITnet: RALF%CS.CMU.EDU@CMUCCVMA   AT&Tnet: (412)268-3053 (school)   FAX: ask
DISCLAIMER? | _How_to_Prove_It_ by Dana Angluin  20. by vehement assertion: It
What's that?|is useful to have some kind of authority relation to the audience

nelson@sun.soe.clarkson.edu (Russ Nelson) (05/31/90)

In article <9456@pt.cs.cmu.edu> ralf@b.gp.cs.cmu.edu (Ralf Brown) writes:

   In article <431@ria.ccs.uwo.ca> pruss@ria.ccs.uwo.ca (? pruss) writes:
   }Basically I am wondering what SUBST and JOIN actually do.
   }
   }Is there some portable way of accessing the SUBST/JOIN data area?
   }I found it at a different address under DOS 3.3 and 4.01.  Also,
   }has the format of this data area been released?

   Yes, there is a portable way of accessing it.  No, the format has not 
   officially been released.  However, it is described in INTER290.ZIP.

Yeah, but you have to be very careful about *what* you mount *where*.
Basically, DOS gets very upset if you try to join a network drive, or
if you try to join something anywhere but root, or if the directory
you're joining it to doesn't exist, ad nauseum.  JOIN does an awful lot
of checking before it tells you "bad parameter".  Real *good* error
message, that.

--
--russ (nelson@clutx [.bitnet | .clarkson.edu])  Russ.Nelson@$315.268.6667
Violence never solves problems, it just changes them into more subtle problems