#if !defined(HPFS_ACL_DEFINED)

#define HPFS_ACL_DEFINED

#include "fnode.hxx"
#include "verify.hxx"

//
//	Forward references
//

DECLARE_CLASS( DEFERRED_ACTIONS_LIST );
DECLARE_CLASS( HPFS_ACL );
DECLARE_CLASS( HPFS_SA );
DECLARE_CLASS( LOG_IO_DP_DRIVE );
DECLARE_CLASS( MESSAGE );
DECLARE_CLASS( HPFS_PATH );
DECLARE_CLASS( HPFS_ORPHANS );


class HPFS_ACL : public OBJECT {


	public:

		DECLARE_CONSTRUCTOR( HPFS_ACL );

		VIRTUAL
		~HPFS_ACL(
			);

		BOOLEAN
		Initialize(
			PLOG_IO_DP_DRIVE Drive,
			_FNODE* FnodeData,
			LBN FnodeLbn
			);

		VERIFY_RETURN_CODE
		VerifyAndFix(
			IN HPFS_SA* SuperArea,
			IN PDEFERRED_ACTIONS_LIST DeferredActions,
			IN PHPFS_PATH CurrentPath,
			IN OUT PMESSAGE Message,
			IN OUT PBOOLEAN ErrorsDetected,
			IN BOOLEAN UpdateAllowed = FALSE,
			IN OUT PHPFS_ORPHANS OrphansList = NULL
			);

		NONVIRTUAL
		BOOLEAN
		QueryFnodeModified(
			);

		NONVIRTUAL
		BOOLEAN
		FindAndResolveHotfix(
			IN PHPFS_SA SuperArea
			);


	private:

		PLOG_IO_DP_DRIVE _Drive;
		_FNODE* _FnodeData;
		LBN _FnodeLbn;

		BOOLEAN _FnodeModified;

};

#endif