/*++ Copyright (c) 2000 Microsoft Corporation Module Name: SxsPath.h Abstract: Author: Jay Krell (a-JayK) October 2000 Revision History: --*/ #pragma once /*----------------------------------------------------------------------------- \\machine\share -> \\?\unc\machine\share c:\foo -> \\?\c:\foo \\? -> \\? a\b\c -> \\?\c:\windows\a\b\c current-working-directory is c:\windows (can never be unc) -----------------------------------------------------------------------------*/ BOOL FusionpConvertToBigPath(PCWSTR Path, SIZE_T BufferSize, PWSTR Buffer); #define MAXIMUM_BIG_PATH_GROWTH_CCH (NUMBER_OF(L"\\\\?\\unc\\")) /*----------------------------------------------------------------------------- \\?\unc\machine\share\bob \\?\c:\foo\bar ^ --------^---------------------------------------------------------------------*/ BOOL FusionpSkipBigPathRoot(PCWSTR s, OUT SIZE_T*); /*----------------------------------------------------------------------------- '\\' or '/' -----------------------------------------------------------------------------*/ BOOL FusionpIsSlash( WCHAR ch ); /*----------------------------------------------------------------------------- just the 52 chars a-zA-Z, need to check with fs -----------------------------------------------------------------------------*/ BOOL FusionpIsDriveLetter( WCHAR ch ); /*----------------------------------------------------------------------------- -----------------------------------------------------------------------------*/ BOOL SxspIsUncPath( PCWSTR Path, BOOL* ); /*----------------------------------------------------------------------------- -----------------------------------------------------------------------------*/ // // This is not reliable. // // Nt Paths can look like absolute DOS/Win32 paths without the leading drive letter: // \foo\bar -> c:\foo\bar // // But we are not likely to get Nt paths that don't start with a double question mark: // \??\c:\foo\bar. // // (For example, on NT 3.x create a directory named \DosDevices, which is what \?? used to be // named..) // BOOL SxspIsNtPath( PCWSTR Path, BOOL* ); /*----------------------------------------------------------------------------- // // // The acceptable forms are // // Win32 \\machine\share // Win32 c:\foo // NT \??\c:\foo // NT \??\unc\machine\share // Win32 \\?\c:\foo // Win32 \\?\unc\machine\share // // Anything with a colon is ambiguous. The colon could mean an NTFS alternate stream. // We never take that interpretation. // // The non fullpath \foo\bar is ambiguous. It could be an NT path. // // We are only checking for NT paths currently to assert that we don't get them. // We used to get them. // // -----------------------------------------------------------------------------*/ BOOL SxspIsFullWin32OrNtPath( PCWSTR Path, BOOL* Result ); // // //#define PATH_IS_REMOTE (0x00001) //#define PATH_IS_LOCAL (0x00002) //#define PATH_IS_WIN32 (0x00004) //#define PATH_IS_WIN32_LONG (0x00008) /* starts \\?\ */ //#define PATH_IS_NT (0x00010) //#define PATH_IS_FULL (0x00020) //#define PATH_HAS_AMBIGUOUS_DRIVE_COLON_OR_NTFS_COLON (0x00040) //#define PATH_IS_AMBIGUOUS_WIN32_OR_NT (0x00080) /* does not start with one of c:\ or \?? or \\ */ // //BOOL //SxspAnalyzePath( // PCWSTR Path, // PCWSTR* LastElement, // ULONG* PathCharacteristics // ); // //