276 lines
4.6 KiB
C++
276 lines
4.6 KiB
C++
/*++
|
||
|
||
Copyright (c) 1991 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
upcase.hxx
|
||
|
||
Abstract:
|
||
|
||
This module contains the declarations for the NTFS_UPCASE_TABLE
|
||
class. This class models the upcase table stored on an NTFS volume,
|
||
which is used to upcase attribute names and file names resident
|
||
on that volume.
|
||
|
||
Author:
|
||
|
||
Bill McJohn (billmc) 04-March-92
|
||
|
||
Environment:
|
||
|
||
ULIB, User Mode
|
||
|
||
--*/
|
||
|
||
#if !defined( _NTFS_UPCASE_TABLE_DEFN_ )
|
||
|
||
#define _NTFS_UPCASE_TABLE_DEFN_
|
||
|
||
DECLARE_CLASS( NTFS_ATTRIBUTE );
|
||
DECLARE_CLASS( NTFS_BITMAP );
|
||
DECLARE_CLASS( NTFS_UPCASE_TABLE );
|
||
|
||
#include "attrib.hxx"
|
||
|
||
// This function is used to compare two NTFS names. Its definition
|
||
// appears in upcase.cxx.
|
||
//
|
||
LONG
|
||
UNTFS_EXPORT
|
||
NtfsUpcaseCompare(
|
||
IN PCWSTR LeftName,
|
||
IN ULONG LeftNameLength,
|
||
IN PCWSTR RightName,
|
||
IN ULONG RightNameLength,
|
||
IN PCNTFS_UPCASE_TABLE UpcaseTable,
|
||
IN BOOLEAN CaseSensitive
|
||
);
|
||
|
||
class NTFS_UPCASE_TABLE : public OBJECT {
|
||
|
||
public:
|
||
|
||
UNTFS_EXPORT
|
||
DECLARE_CONSTRUCTOR( NTFS_UPCASE_TABLE );
|
||
|
||
VIRTUAL
|
||
UNTFS_EXPORT
|
||
~NTFS_UPCASE_TABLE(
|
||
);
|
||
|
||
NONVIRTUAL
|
||
UNTFS_EXPORT
|
||
BOOLEAN
|
||
Initialize(
|
||
IN PNTFS_ATTRIBUTE Attribute
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
Initialize(
|
||
IN PWCHAR Data,
|
||
IN ULONG Length
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
Initialize(
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
Verify(
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
WCHAR
|
||
UpperCase(
|
||
IN WCHAR Character
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
Write(
|
||
IN OUT PNTFS_ATTRIBUTE Attribute,
|
||
IN OUT PNTFS_BITMAP VolumeBitmap OPTIONAL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
PCWCHAR
|
||
GetUpcaseArray(
|
||
OUT PULONG Length
|
||
) CONST;
|
||
|
||
STATIC
|
||
ULONG
|
||
QueryDefaultLength(
|
||
);
|
||
|
||
STATIC
|
||
ULONG
|
||
QueryDefaultSize(
|
||
);
|
||
|
||
private:
|
||
|
||
NONVIRTUAL
|
||
VOID
|
||
Construct(
|
||
);
|
||
|
||
NONVIRTUAL
|
||
VOID
|
||
Destroy(
|
||
);
|
||
|
||
PWCHAR _Data;
|
||
ULONG _Length;
|
||
};
|
||
|
||
|
||
INLINE
|
||
WCHAR
|
||
NTFS_UPCASE_TABLE::UpperCase(
|
||
IN WCHAR Character
|
||
) CONST
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This method returns the upper-case value of the supplied
|
||
character.
|
||
|
||
Arguments:
|
||
|
||
Character -- Supplies the character to upcase.
|
||
|
||
Notes:
|
||
|
||
If Character is not in the table (ie. is greater or equal
|
||
to _Length), it upcases to itself.
|
||
|
||
--*/
|
||
{
|
||
return( (Character < _Length) ? _Data[Character] : Character );
|
||
}
|
||
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
NTFS_UPCASE_TABLE::Write(
|
||
IN OUT PNTFS_ATTRIBUTE Attribute,
|
||
IN OUT PNTFS_BITMAP VolumeBitmap
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This method writes the upcase table through the supplied
|
||
attribute.
|
||
|
||
Arguments:
|
||
|
||
Attribute -- Supplies the attribute which has the upcase
|
||
table as its value.
|
||
VolumeBitmap -- Supplies the volume bitmap. This parameter
|
||
may be omitted if the attribute is already
|
||
the correct size.
|
||
|
||
Return Value:
|
||
|
||
TRUE upon successful completion.
|
||
|
||
--*/
|
||
{
|
||
ULONG BytesInTable, BytesWritten;
|
||
|
||
BytesInTable = _Length * sizeof( WCHAR );
|
||
|
||
return( Attribute->Resize( _Length, VolumeBitmap ) &&
|
||
Attribute->Write( _Data,
|
||
0,
|
||
BytesInTable,
|
||
&BytesWritten,
|
||
VolumeBitmap ) &&
|
||
BytesWritten == BytesInTable );
|
||
|
||
}
|
||
|
||
|
||
INLINE
|
||
PCWCHAR
|
||
NTFS_UPCASE_TABLE::GetUpcaseArray(
|
||
OUT PULONG Length
|
||
) CONST
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This method returns the in-memory upcase array.
|
||
|
||
Arguments:
|
||
|
||
Length - Returns the number of characters in the array.
|
||
|
||
Return Value:
|
||
|
||
The in-memory upcase array.
|
||
|
||
--*/
|
||
{
|
||
*Length = _Length;
|
||
return _Data;
|
||
}
|
||
|
||
|
||
INLINE
|
||
ULONG
|
||
NTFS_UPCASE_TABLE::QueryDefaultLength(
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This method returns the length (in characters) of the
|
||
default upcase table.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
The length (in characters) of the default upcase table.
|
||
|
||
--*/
|
||
{
|
||
return 0x10000;
|
||
}
|
||
|
||
|
||
INLINE
|
||
ULONG
|
||
NTFS_UPCASE_TABLE::QueryDefaultSize(
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This method returns the size of the default upcase table.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
The size of the default upcase table.
|
||
|
||
--*/
|
||
{
|
||
return( QueryDefaultLength() * sizeof( WCHAR ) );
|
||
}
|
||
|
||
#endif
|