Friday, September 22, 2006
Windows reparse points. Not so transparent after all.
We use NDOC to build some of the documentation for our Windows product. I recently moved to a new machine with Windows XP x64 Edition and this was the first time I tried to build the docs after the move. I got the following strange error:
Error: Could not find file "C:\SOMEDIR\JavaDoc\JavaDoc.css"
Turns out that C:\SOMEDIR is in fact a junction point, i.e. a reparse point, and is really C:\OTHERDIR. Apparently this somehow confused NDOC (or whatever .NET functionality NDOC is using). Running from the real folder C:\OTHERDIR made the problem go away.
Of course I knew that C:\SOMEDIR is a junction point but this never caused a problem before. I got the clue as to the cause of the problem by running Filemon from
Sysinternals. Selecting "Log Errors" showed a lot of operations as failing with REPARSE in the Result-column. These failures may actually be normal when traversing a reparse point but it was the hint I needed to try running from a real folder.
Error: Could not find file "C:\SOMEDIR\JavaDoc\JavaDoc.css"
Turns out that C:\SOMEDIR is in fact a junction point, i.e. a reparse point, and is really C:\OTHERDIR. Apparently this somehow confused NDOC (or whatever .NET functionality NDOC is using). Running from the real folder C:\OTHERDIR made the problem go away.
Of course I knew that C:\SOMEDIR is a junction point but this never caused a problem before. I got the clue as to the cause of the problem by running Filemon from
Sysinternals. Selecting "Log Errors" showed a lot of operations as failing with REPARSE in the Result-column. These failures may actually be normal when traversing a reparse point but it was the hint I needed to try running from a real folder.