Holy cow, I wrote a book!
(Windows was released on November 20, 1985,
twenty-five years ago tomorrow.
You have GetWindowsDirectory
and you have
Why do we need both?
They're both read-only directories.
They are both searched by LoadLibrary.
They seem to be redundant.
(There are other directories like GetWindowsSystemDirectory
which are not relevant to the discussion.)
Back in the old days, the distinction was important.
The Windows directory was read-write, and it's where
user configuration settings were kept.
See for example,
GetProfileInt, which reads from WIN.INI
in the Windows directory,
which defaults to the Windows directory if you don't give a full path
to the configuration file.
This was in the days before user profiles;
the Windows directory acted as your de facto user profile directory.
the bulk of the Windows files go into the System directory.
Windows was designed so that it never wrote to the System directory
(at least not during normal operation,
outside of application install/uninstall or other system maintenance).
This separation of duties (Windows directory: writeable, users store
their stuff there; System directory: read-only) permitted a number
Each computer had a Windows directory and a System directory
on a local drive (either a floppy disk, or if you were rich,
a hard drive),
and the System directory was a subdirectory of the Windows directory.
This was how most people ran Windows.
Even though the System directory was physically read-write on the
local drive, Windows itself never wrote to it.
Each computer had a Windows directory on a local drive,
but the System directory was on a ROM-drive.
As you might guess,
a ROM-drive is like a RAM-drive, except it's in ROM.
In the parlance of kids today,
"Think of it as a permanently write-protected SSD."
That's right, Windows was using SSDs over 25 years ago.
("You kids think you invented everything.")
Once you burned the System directory into a ROM-drive,
you didn't have to waste valuable floppy disk or hard drive space
for all those files that never changed anyway.
Each computer came with just a Windows directory,
but it also had network drivers (wow, fancy, a computer
that could communicate with other computers), and the
AUTOEXEC.BAT file mapped a drive letter to a
network share maintained by your company's IT department.
That network share might be set up like this:
All directories on that network share were read-only.
Everybody in the company connected to the same share,
so every computer in the company was using the same physical
files for their System directory as well as their applications.
If the IT department wanted to upgrade or install software,
they could just kick everybody off the server
(or, if they were nice, wait until everybody logged off),
mount the M: volume read-write,
upgrade or install the software, and then set M: back to read-only.
When everybody logged back on, bingo, the new software was
installed and ready to use.
The computer boots off a ROM, a floppy disk,
the local hard drive, or off the network.
A drive letter is mapped to a network server,
which contains both the Windows directory (a different one
for each user)
and the System directory.
Windows then runs completely over the network.
User files are stored in the Windows directory (on the server);
system files are retrieved from the System directory (also on the server).
This was commonly known as a
local drives are not used once Windows has booted.
Even paging took place over the network.
Given all the possible arrangements, you can see that there
was no requirement that the System directory be a subdirectory
of the Windows directory,
nor was there a requirement that either the Windows or the System
directory be on your boot drive.
I suspect many (most?) of these configurations
are no longer supported by Windows,
but at least that's the history behind the separation
of the Windows and System directories.