1019 lines
17 KiB
C++
1019 lines
17 KiB
C++
/*++
|
||
|
||
Copyright (c) 1991 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
fsnode.hxx
|
||
|
||
Abstract:
|
||
|
||
This module contains the declaration for the FSNODE class. FSNODE stands
|
||
for File System NODE and is an abstract class for all user visible
|
||
objects that exist in a file system (e.g. files, directories).
|
||
|
||
Author:
|
||
|
||
David J. Gilman (davegi) 09-Jan-1991
|
||
|
||
Environment:
|
||
|
||
ULIB, User Mode
|
||
|
||
Notes:
|
||
|
||
Do not confuse this class or it's derived classes with the IFS class
|
||
sub-hierarchy. FSNODE related classes are user visible classes. They
|
||
are not intended to be used for low level file system tasks such as
|
||
format or chkdsk. FSNODE classes are as file system independent as the
|
||
underlying system allows.
|
||
|
||
--*/
|
||
|
||
#if ! defined( _FSNODE_ )
|
||
|
||
#define _FSNODE_
|
||
|
||
#include "path.hxx"
|
||
|
||
//
|
||
// Forward references
|
||
//
|
||
|
||
DECLARE_CLASS( ARRAY );
|
||
DECLARE_CLASS( FSN_DIRECTORY );
|
||
DECLARE_CLASS( FSNODE );
|
||
DECLARE_CLASS( TIMEINFO );
|
||
DECLARE_CLASS( WSTRING );
|
||
|
||
|
||
//
|
||
// Extend the set of system defined FILE_ATTRIBUTEs to include
|
||
//
|
||
// - all files (no directories)
|
||
// - all file and directories
|
||
//
|
||
|
||
#define FILE_ATTRIBUTE_FILES ( FILE_ATTRIBUTE_ARCHIVE | \
|
||
FILE_ATTRIBUTE_HIDDEN | \
|
||
FILE_ATTRIBUTE_NORMAL | \
|
||
FILE_ATTRIBUTE_READONLY | \
|
||
FILE_ATTRIBUTE_COMPRESSED | \
|
||
FILE_ATTRIBUTE_SYSTEM )
|
||
|
||
#define FILE_ATTRIBUTE_ALL ( FILE_ATTRIBUTE_FILES | \
|
||
FILE_ATTRIBUTE_DIRECTORY )
|
||
|
||
typedef ULONG FSN_ATTRIBUTE;
|
||
|
||
#define FSN_ATTRIBUTE_ARCHIVE FILE_ATTRIBUTE_ARCHIVE
|
||
#define FSN_ATTRIBUTE_DIRECTORY FILE_ATTRIBUTE_DIRECTORY
|
||
#define FSN_ATTRIBUTE_HIDDEN FILE_ATTRIBUTE_HIDDEN
|
||
#define FSN_ATTRIBUTE_NORMAL FILE_ATTRIBUTE_NORMAL
|
||
#define FSN_ATTRIBUTE_READONLY FILE_ATTRIBUTE_READONLY
|
||
#define FSN_ATTRIBUTE_COMPRESSED FILE_ATTRIBUTE_COMPRESSED
|
||
#define FSN_ATTRIBUTE_SYSTEM FILE_ATTRIBUTE_SYSTEM
|
||
#define FSN_ATTRIBUTE_FILES FILE_ATTRIBUTE_FILES
|
||
#define FSN_ATTRIBUTE_ALL FILE_ATTRIBUTE_ALL
|
||
|
||
//
|
||
// FSNODE time & date types
|
||
//
|
||
|
||
enum FSN_TIME {
|
||
FSN_TIME_MODIFIED = 0,
|
||
FSN_TIME_CREATED = 1,
|
||
FSN_TIME_ACCESSED = 2
|
||
};
|
||
|
||
class FSNODE : public OBJECT {
|
||
|
||
friend class FSN_FILTER;
|
||
|
||
public:
|
||
|
||
VIRTUAL
|
||
~FSNODE (
|
||
);
|
||
|
||
NONVIRTUAL
|
||
PCPATH
|
||
GetPath (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
IsArchived (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
IsDirectory (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
IsHidden (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
IsNormal (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
IsReadOnly (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
IsSystem (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
MakeArchived (
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
MakeHidden (
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
MakeNormal (
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
MakeReadOnly (
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
MakeSystem (
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
PWSTRING
|
||
QueryBase (
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
PWSTRING
|
||
QueryName (
|
||
) CONST;
|
||
|
||
VIRTUAL
|
||
PFSN_DIRECTORY
|
||
QueryParentDirectory (
|
||
) CONST;
|
||
|
||
VIRTUAL
|
||
PTIMEINFO
|
||
QueryTimeInfo (
|
||
IN FSN_TIME TimeInfoType DEFAULT FSN_TIME_MODIFIED
|
||
) CONST;
|
||
|
||
VIRTUAL
|
||
BOOLEAN
|
||
Rename(
|
||
IN PCPATH NewName
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
ResetArchivedAttribute (
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
ResetHiddenAttribute (
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
ResetReadOnlyAttribute (
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
ResetSystemAttribute (
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
VIRTUAL
|
||
BOOLEAN
|
||
SetTimeInfo (
|
||
IN PCTIMEINFO TimeInfo,
|
||
IN FSN_TIME TimeInfoType DEFAULT FSN_TIME_MODIFIED
|
||
);
|
||
|
||
VIRTUAL
|
||
BOOLEAN
|
||
DeleteFromDisk(
|
||
IN BOOLEAN Force DEFAULT FALSE
|
||
);
|
||
|
||
VIRTUAL
|
||
BOOLEAN
|
||
UpdateFsNode(
|
||
);
|
||
|
||
NONVIRTUAL
|
||
FSN_ATTRIBUTE
|
||
QueryAttributes(
|
||
) CONST;
|
||
|
||
NONVIRTUAL
|
||
BOOLEAN
|
||
SetAttributes (
|
||
IN FSN_ATTRIBUTE Attributes,
|
||
OUT LPDWORD Win32Error DEFAULT NULL
|
||
);
|
||
|
||
NONVIRTUAL
|
||
ULIB_EXPORT
|
||
BOOLEAN
|
||
UseAlternateName(
|
||
);
|
||
|
||
protected:
|
||
|
||
DECLARE_CONSTRUCTOR( FSNODE );
|
||
|
||
VIRTUAL
|
||
BOOLEAN
|
||
Initialize (
|
||
IN PCWSTR PathName,
|
||
IN PCFSN_DIRECTORY ParentDirectory,
|
||
IN PWIN32_FIND_DATA FileData
|
||
);
|
||
|
||
VIRTUAL
|
||
BOOLEAN
|
||
Initialize (
|
||
IN PCWSTRING PathName,
|
||
IN PWIN32_FIND_DATA FileData
|
||
);
|
||
|
||
NONVIRTUAL
|
||
PFILETIME
|
||
GetCreationTime(
|
||
);
|
||
|
||
NONVIRTUAL
|
||
PFILETIME
|
||
GetLastAccessTime(
|
||
);
|
||
|
||
NONVIRTUAL
|
||
PFILETIME
|
||
GetLastWriteTime(
|
||
);
|
||
|
||
PATH _Path;
|
||
WIN32_FIND_DATAW _FileData;
|
||
|
||
private:
|
||
|
||
};
|
||
|
||
INLINE
|
||
PCPATH
|
||
FSNODE::GetPath (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Return the contained PATH object.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
PCPATH - returns a constant pointer to the contained PATH object
|
||
|
||
--*/
|
||
|
||
{
|
||
return( &_Path );
|
||
}
|
||
|
||
INLINE
|
||
PFILETIME
|
||
FSNODE::GetCreationTime(
|
||
)
|
||
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Returns pointer to creation time.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
PFILETIME - pointer to creation time
|
||
|
||
--*/
|
||
|
||
{
|
||
return( &_FileData.ftCreationTime );
|
||
}
|
||
|
||
INLINE
|
||
PFILETIME
|
||
FSNODE::GetLastAccessTime(
|
||
)
|
||
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Returns pointer to last access time.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
PFILETIME - pointer to last access time
|
||
|
||
--*/
|
||
|
||
{
|
||
return( &_FileData.ftLastAccessTime );
|
||
}
|
||
|
||
INLINE
|
||
PFILETIME
|
||
FSNODE::GetLastWriteTime(
|
||
)
|
||
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Returns pointer to last write time.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
PFILETIME - pointer to last write time
|
||
|
||
--*/
|
||
|
||
{
|
||
return( &_FileData.ftLastWriteTime );
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::IsArchived (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Determine if this FSNODE's archived attribute is set.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns TRUE if this FSNODE's archived attribute is set.
|
||
|
||
--*/
|
||
|
||
{
|
||
return( ( _FileData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE ) != 0 );
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::IsDirectory (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Determine if this FSNODE's directory attribute is set.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns TRUE if this FSNODE's directory attribute is set.
|
||
|
||
--*/
|
||
|
||
{
|
||
return( ( _FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) != 0 );
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::IsHidden (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Determine if this FSNODE's hidden attribute is set.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns TRUE if this FSNODE's hidden attribute is set.
|
||
|
||
--*/
|
||
|
||
{
|
||
return( ( _FileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) != 0 );
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::IsNormal (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Determine if this FSNODE's normal attribute is set.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns TRUE if this FSNODE's normal attribute is set.
|
||
|
||
--*/
|
||
|
||
{
|
||
return( ( _FileData.dwFileAttributes & FILE_ATTRIBUTE_NORMAL ) != 0 );
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::IsReadOnly (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Determine if this FSNODE's readonly attribute is set.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns TRUE if this FSNODE's readonly attribute is set.
|
||
|
||
--*/
|
||
|
||
{
|
||
return( ( _FileData.dwFileAttributes & FILE_ATTRIBUTE_READONLY ) != 0 );
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::IsSystem (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Determine if this FSNODE's system attribute is set.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns TRUE if this FSNODE's system attribute is set.
|
||
|
||
--*/
|
||
|
||
{
|
||
return( ( _FileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM ) != 0 );
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::MakeArchived (
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Make the underlying 'file' archived.
|
||
|
||
Arguments:
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of setting the file's archived attribute.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
_FileData.dwFileAttributes | FILE_ATTRIBUTE_ARCHIVE )) {
|
||
|
||
_FileData.dwFileAttributes |= FILE_ATTRIBUTE_ARCHIVE;
|
||
return( TRUE );
|
||
} else {
|
||
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::MakeHidden (
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Make the underlying 'file' hidden.
|
||
|
||
Arguments:
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of setting the file's hidden attribute.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
_FileData.dwFileAttributes | FILE_ATTRIBUTE_HIDDEN )) {
|
||
|
||
_FileData.dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN;
|
||
return( TRUE );
|
||
} else {
|
||
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::MakeNormal (
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Make the underlying 'file' normal.
|
||
|
||
Arguments:
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of resetting all the file's resettable
|
||
attributes.
|
||
|
||
Note:
|
||
|
||
Making a 'file' normal means resetting all but the
|
||
FILE_ATTRIBUTE_DIRECTORY attributes.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
FILE_ATTRIBUTE_NORMAL )) {
|
||
|
||
_FileData.dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
|
||
return( TRUE );
|
||
} else {
|
||
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::MakeReadOnly (
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Make the underlying 'file' read-only.
|
||
|
||
Arguments:
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of setting the file's read-only attribute.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
_FileData.dwFileAttributes | FILE_ATTRIBUTE_READONLY )) {
|
||
|
||
_FileData.dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
|
||
return( TRUE );
|
||
} else {
|
||
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::MakeSystem (
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Make the underlying 'file' a system file.
|
||
|
||
Arguments:
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of setting the file's system attribute.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
_FileData.dwFileAttributes | FILE_ATTRIBUTE_SYSTEM )) {
|
||
|
||
_FileData.dwFileAttributes |= FILE_ATTRIBUTE_SYSTEM;
|
||
return( TRUE );
|
||
} else {
|
||
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
INLINE
|
||
PWSTRING
|
||
FSNODE::QueryBase (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Return the base name maintained by the contained PATH object.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
PWSTRING - Returns a pointer to the base name.
|
||
|
||
--*/
|
||
|
||
{
|
||
return( ((PFSNODE) this)->_Path.QueryBase( ));
|
||
}
|
||
|
||
INLINE
|
||
FSN_ATTRIBUTE
|
||
FSNODE::QueryAttributes (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Return the node's attributes
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
FSN_ATTRIBUTE - The attributes
|
||
|
||
--*/
|
||
|
||
{
|
||
return( (FSN_ATTRIBUTE)_FileData.dwFileAttributes );
|
||
}
|
||
|
||
INLINE
|
||
PWSTRING
|
||
FSNODE::QueryName (
|
||
) CONST
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Return the name maintained by the contained PATH object.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
PWSTRING - Returns a pointer to the name.
|
||
|
||
--*/
|
||
|
||
{
|
||
return( ((PFSNODE) this)->_Path.QueryName( ));
|
||
}
|
||
|
||
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::ResetArchivedAttribute (
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Make the underlying 'file' non archived.
|
||
|
||
Arguments:
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of resetting the file's archived attribute.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
_FileData.dwFileAttributes & ~FILE_ATTRIBUTE_ARCHIVE )) {
|
||
|
||
_FileData.dwFileAttributes &= ~FILE_ATTRIBUTE_ARCHIVE;
|
||
return( TRUE );
|
||
} else {
|
||
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::ResetHiddenAttribute (
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Make the underlying 'file' non-hidden.
|
||
|
||
Arguments:
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of resetting the file's hidden attribute.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
_FileData.dwFileAttributes & ~FILE_ATTRIBUTE_HIDDEN )) {
|
||
|
||
_FileData.dwFileAttributes &= ~FILE_ATTRIBUTE_HIDDEN;
|
||
return( TRUE );
|
||
} else {
|
||
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::ResetReadOnlyAttribute (
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Make the underlying 'file' non-read-only.
|
||
|
||
Arguments:
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of resetting the file's read-only attribute.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
_FileData.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY )) {
|
||
|
||
_FileData.dwFileAttributes &= ~FILE_ATTRIBUTE_READONLY;
|
||
return( TRUE );
|
||
} else {
|
||
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::ResetSystemAttribute (
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Make the underlying 'file' a non-system file.
|
||
|
||
Arguments:
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of setting the file's system attribute.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
_FileData.dwFileAttributes & ~FILE_ATTRIBUTE_SYSTEM )) {
|
||
|
||
_FileData.dwFileAttributes &= ~FILE_ATTRIBUTE_SYSTEM;
|
||
return( TRUE );
|
||
} else {
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
|
||
INLINE
|
||
BOOLEAN
|
||
FSNODE::SetAttributes (
|
||
IN FSN_ATTRIBUTE Attributes,
|
||
OUT LPDWORD Win32Error
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Set the attributes of the underlying 'file'.
|
||
(This method was added to improve performance of attrib.exe).
|
||
|
||
Arguments:
|
||
|
||
Attributes - New attributes for the file.
|
||
|
||
Win32Error - Optional parameter that will contain a Win32 error code
|
||
if the method is unable to change attribute.
|
||
|
||
Return Value:
|
||
|
||
BOOLEAN - Returns the result of setting the file's system attribute.
|
||
|
||
--*/
|
||
|
||
{
|
||
if( SetFileAttributesW(( LPWSTR ) _FileData.cFileName,
|
||
(_FileData.dwFileAttributes & ~FILE_ATTRIBUTE_FILES) | Attributes )) {
|
||
|
||
_FileData.dwFileAttributes &= ~FILE_ATTRIBUTE_FILES;
|
||
_FileData.dwFileAttributes |= Attributes;
|
||
return( TRUE );
|
||
} else {
|
||
if( Win32Error != NULL ) {
|
||
*Win32Error = GetLastError();
|
||
}
|
||
return( FALSE );
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
#endif // _FSNODE_
|