windows-nt/Source/XPSP1/NT/com/ole32/stg/props/names.hxx
2020-09-26 16:20:57 +08:00

146 lines
3.5 KiB
C++

#pragma once
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 1998.
//
// File: names.hxx
//
//+---------------------------------------------------------------------------
#ifndef NTFS_MAX_ATTR_NAME_LEN
#define NTFS_MAX_ATTR_NAME_LEN 255
#endif
BOOL IsContentStream( const WCHAR* pwszName );
const WCHAR* GetContentStreamName();
BOOL IsDataStream( const PFILE_STREAM_INFORMATION pFileStreamInformation );
BOOL IsDocfileStream( const WCHAR *pwsz );
BOOL IsSpecifiedStream(const FILE_STREAM_INFORMATION *pFSI,
const WCHAR *pwszStream // Without the :*:$data adornments
);
BOOL HasVisibleNamedStreams( const FILE_STREAM_INFORMATION *pfsi );
const WCHAR *UnmangleDocfileStreamName( const WCHAR *pwszName );
void GetNtfsUnmangledNameInfo(const FILE_STREAM_INFORMATION *pFSI,
const WCHAR** ppwsz,
ULONG* pcch);
const WCHAR* GetControlStreamName();
#define CCH_NTFS_DOLLAR_DATA 6 // ":$DATA"
inline BOOL
IsHiddenStream( const FILE_STREAM_INFORMATION *pfsi )
{
return( IsSpecifiedStream( pfsi, GetControlStreamName() ));
}
inline BOOL
IsContentsStream( const FILE_STREAM_INFORMATION *pfsi )
{
return( IsSpecifiedStream( pfsi, L"" ));
}
//+============================================================================
//
// Class: CNtfsStreamName
//
// This class holds the name of an NTFS stream. It is initialized by
// passing in a un-decorated stream name (that is, without the leading
// ":" and trailing ":$DATA"). It can be cast to a WCHAR* which is the
// decorated name. This class also handles the mapping from the
// "Contents" stream name (used for the IStorage interface) to the
// unnamed data stream (used for the NT open call).
//
//+============================================================================
class CNtfsStreamName
{
public:
CNtfsStreamName( const WCHAR *pwsz);
public:
operator const WCHAR*() const
{
return _wsz;
}
size_t Count() const
{
return _count;
}
private:
CNtfsStreamName(); // default construction, not allowed.
private:
size_t _count;
WCHAR _wsz[ NTFS_MAX_ATTR_NAME_LEN ];
};
//+----------------------------------------------------------------------------
//
// Class: CDocfileStreamName
//
//+----------------------------------------------------------------------------
#define CCH_DOCFILESTREAMPREFIX 5
class CDocfileStreamName
{
public:
CDocfileStreamName( const WCHAR *pwsz);
public:
operator const WCHAR*() const
{
return( _wszName );
}
private:
CDocfileStreamName(); // default construction, not allowed.
WCHAR _wszName[ CCH_DOCFILESTREAMPREFIX + CCH_MAX_PROPSTG_NAME + 1 ];
}; // class CDocfileStreamName
//+----------------------------------------------------------------------------
//
// Class: CNtfsUpdateStreamName
//
//+----------------------------------------------------------------------------
#define CCH_UPDATESTREAMPREFIX 5
class CNtfsUpdateStreamName
{
public:
CNtfsUpdateStreamName( const WCHAR *pwsz);
public:
operator const WCHAR*() const
{
return( _wszName );
}
static BOOL IsUpdateStream( const WCHAR *pwsz );
private:
CNtfsUpdateStreamName(); // default construction, not allowed.
WCHAR _wszName[ CCH_UPDATESTREAMPREFIX + CCH_MAX_PROPSTG_NAME + 1 ];
}; // class CNtfsUpdateStreamName