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.