249 lines
3.0 KiB
C++
249 lines
3.0 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1990 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
hpfsname.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
The names used by HPFS volumes require knowledge of the
|
||
|
volume codepages, and must meet certain validity constraints.
|
||
|
The HPFS_NAME and HPFS_PATH objects encapsulate thes information.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Bill McJohn (billmc) 02-Jan-1991
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#if !defined ( HPFS_NAME_DEFN )
|
||
|
|
||
|
#define HPFS_NAME_DEFN
|
||
|
|
||
|
#include "intstack.hxx"
|
||
|
|
||
|
//
|
||
|
// Forward references
|
||
|
//
|
||
|
|
||
|
DECLARE_CLASS( CASEMAP );
|
||
|
DECLARE_CLASS( HPFS_NAME );
|
||
|
DECLARE_CLASS( HPFS_PATH );
|
||
|
|
||
|
CONST PremappedCodepage = 0xff00;
|
||
|
CONST MaximumPathLength = 300;
|
||
|
CONST MaximumNameLength = 256;
|
||
|
|
||
|
enum NAME_COMPARE_RETURN {
|
||
|
|
||
|
NAME_IS_LESS_THAN, NAME_IS_EQUAL_TO, NAME_IS_GREATER_THAN
|
||
|
};
|
||
|
|
||
|
class HPFS_PATH : public OBJECT {
|
||
|
|
||
|
public:
|
||
|
|
||
|
DECLARE_CONSTRUCTOR( HPFS_PATH );
|
||
|
|
||
|
VIRTUAL
|
||
|
~HPFS_PATH(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
Initialize(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
AddLevel(
|
||
|
PHPFS_NAME Name
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
StripLevel(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PHPFS_NAME
|
||
|
QueryFirstLevel(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PHPFS_NAME
|
||
|
QueryNextLevel(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
Copy(
|
||
|
PHPFS_PATH OtherPath
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PCUCHAR
|
||
|
GetString(
|
||
|
) CONST;
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsRoot(
|
||
|
) CONST;
|
||
|
|
||
|
private:
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
Construct (
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
Destroy(
|
||
|
);
|
||
|
|
||
|
PBYTE _Buffer;
|
||
|
ULONG _CurrentLength;
|
||
|
ULONG _CurrentLevelIndex;
|
||
|
|
||
|
INTSTACK _ComponentOffsets;
|
||
|
|
||
|
};
|
||
|
|
||
|
INLINE
|
||
|
BOOLEAN
|
||
|
HPFS_PATH::IsRoot(
|
||
|
) CONST
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This method determines whether the path is to the root directory.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE if the path is the root (ie. is empty)
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return( _CurrentLength == 0 );
|
||
|
}
|
||
|
|
||
|
class HPFS_NAME : public OBJECT {
|
||
|
|
||
|
public:
|
||
|
|
||
|
DECLARE_CONSTRUCTOR( HPFS_NAME );
|
||
|
|
||
|
VIRTUAL
|
||
|
~HPFS_NAME(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
Initialize(
|
||
|
ULONG Length,
|
||
|
PUCHAR String,
|
||
|
ULONG VolumeCodepageIndex,
|
||
|
PCASEMAP Casemap
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
Initialize(
|
||
|
ULONG Length,
|
||
|
PUCHAR String
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
Initialize(
|
||
|
HPFS_NAME* OtherName
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
Swap(
|
||
|
PHPFS_NAME OtherName
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsNull(
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsValid(
|
||
|
PCASEMAP Casemap,
|
||
|
ULONG CodepageIndex
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsNewName(
|
||
|
PCASEMAP Casemap,
|
||
|
ULONG CodepageIndex
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
NAME_COMPARE_RETURN
|
||
|
CompareName(
|
||
|
PHPFS_NAME OtherName
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
NAME_COMPARE_RETURN
|
||
|
CompareName(
|
||
|
ULONG Length,
|
||
|
PUCHAR String,
|
||
|
ULONG VolumeCodepageIndex,
|
||
|
PCASEMAP Casemap
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
BOOLEAN
|
||
|
IsCodepageInvariant(
|
||
|
) CONST;
|
||
|
|
||
|
friend
|
||
|
BOOLEAN
|
||
|
HPFS_PATH::AddLevel(
|
||
|
PHPFS_NAME Name
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
PCUCHAR
|
||
|
GetString(
|
||
|
) CONST;
|
||
|
|
||
|
private:
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
Construct (
|
||
|
);
|
||
|
|
||
|
NONVIRTUAL
|
||
|
VOID
|
||
|
Destroy(
|
||
|
);
|
||
|
|
||
|
// _Buffer points at memory that is allocated by the object,
|
||
|
// and must be freed by it.
|
||
|
|
||
|
PBYTE _Buffer;
|
||
|
ULONG _BufferSize;
|
||
|
ULONG _Length;
|
||
|
|
||
|
};
|
||
|
|
||
|
#endif
|