You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1048 lines
19 KiB
1048 lines
19 KiB
/*++
|
|
|
|
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
|
|
IsEncrypted (
|
|
) 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::IsEncrypted (
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Determine if this FSNODE's encrypted attribute is set.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
BOOLEAN - Returns TRUE if this FSNODE's encrypted attribute is set.
|
|
|
|
--*/
|
|
|
|
{
|
|
return( ( _FileData.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED ) != 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_
|