COMMAND
kernel
SYSTEMS AFFECTED
WinNT 4.0
PROBLEM
Alvaro Gilabert found following. You can exceed the limit in the
number of chars allowed in a filename. WinNT does allow it. You
can move a folder to a deeper one exceeding it. But, when you try
to backup that folder, the backup program (BackupExec and WinNT
Backup) crashes and reboots the server. If you try to backup thru
a network drive (using another server and mapping that folder),
then it crashes and reboot the server also. Not the server that
is making the backup but the server that has the wrong folder.
That's a but because WinNT, supposing to be a fileserver, should
take care of this.
SOLUTION
That's because the limit isn't where you think it is. From the
documentation on CreateFile in the SDK:
Windows NT: You can use paths longer than MAX_PATH characters by
calling the wide (W) version of CreateFile and prepending “\\?\”
to the path. The “\\?\” tells the function to turn off path
parsing. This lets you use paths that are nearly 32,000
Unicode characters long. You must use fully-qualified paths with
this technique. This also works with UNC names. The “\\?\” is
ignored as part of the path. For example,
“\\?\C:\myworld\private”
is seen as
“C:\myworld\private”
and
“\\?\UNC\tom_1\hotstuff\coolapps”
is seen as
“\\tom_1\hotstuff\coolapps”.
So it seems that if you use the APIs properly, you can deal with
extremely long paths. When you move things around, it is very
likely that you are dealing with relative names, not absolute
names. But what about a carefully designed program installabel
on the server, using the wide variant to create directories -
creating paths exceeding MAX_PATH then setting a share to such a
program? WinNT crashes within this scenario, every time a client
wants to access this share. One simpler scenario: install a
service. Exceed MAX_PATH. Start this service at system startup -
watch the server rebooting.