windows-nt/Source/XPSP1/NT/base/win32/fusion/inc/sxspath.h
2020-09-26 16:20:57 +08:00

134 lines
3.4 KiB
C

/*++
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
// );
//
//