INFO: Processes Maintain Only One Current Directory (84244)
The information in this article applies to:
- Microsoft Win32 Application Programming Interface (API), when used with:
- the operating system: Microsoft Windows NT 3.1
- the operating system: Microsoft Windows NT 3.5
- the operating system: Microsoft Windows NT 3.51
- the operating system: Microsoft Windows NT 4.0
- the operating system: Microsoft Windows 2000
- the operating system: Microsoft Windows XP
This article was previously published under Q84244 SUMMARY
Processes under Microsoft Windows NT, Windows 2000, or Windows XP maintain only one current directory. Under MS-DOS or OS/2, a process will maintain a current directory for each drive.
MORE INFORMATION
For example, if you do the following:
- Set the current drive to be drive C and set the current directory to be \MAINC\MAINSUBC.
- Change the current drive to be drive D and set the current directory to be \MAIND\MAINSUBD.
When you reset the current drive to drive C, the current directory will be
the original directory: \MAINC\MAINSUBC.
MS-DOS and OS/2 use a current directory structure (CDS) to maintain this
information. The memory for this structure is allocated at boot time, and
is set by the LASTDRIVE= line in the CONFIG.SYS file. For example, if you
set LASTDRIVE=Z, you will have 26 entries in the CDS and will be able to
track 26 current directories.
Windows NT, Windows 2000, or Windows XP by default allows a process to track only one current directory--the one for the current drive--because the underlying operating system does not use drive letters; it always uses fully-qualified names such as:
\Device\HardDisk0\Partition1\autoexec.bat
The Win32 subsystem maintains drive letters by setting up symbolic links
such as:
\??\C: == \Device\HardDisk0\Paritition1
\??\D: == \Device\HardDisk0\Paritition2
\??\E: == \Device\HardDisk1\Paritition1
(Partitions are 1-based while hard disks are 0-based because Partition0
refers to the entire physical device, which is the "file" that FDISK opens
to do its work.) Therefore, when you do SetCurrentDirectory("c:\tmp\sub"),
the Win32 subsystem translates that to "\??\c:\tmp\sub", "...".
As far as Windows NT, Windows 2000, or Windows XP is concerned, there are no "drives," there is one object name space.
CMD.EXE maintains a private current directory for each drive it has touched
and uses environment variables to associate a current directory with each
drive.
Modification Type: | Major | Last Reviewed: | 4/12/2004 |
---|
Keywords: | kbAPI kbFileIO kbinfo kbKernBase KB84244 |
---|
|