Leaked source code of windows server 2003
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.
 
 
 
 
 
 

121 lines
3.0 KiB

//+----------------------------------------------------------------------------
//
// Copyright (C) 2000, Microsoft Corporation
//
// File: DfsFolderReferralData.hxx
//
// Contents: the DFS Folder Referral dataclass
//
// Classes: DfsFolderReferralData
//
// History: Dec. 8 2000, Author: udayh
//
//-----------------------------------------------------------------------------
#ifndef __DFS_FOLDER_REFERRAL_DATA__
#define __DFS_FOLDER_REFERRAL_DATA__
#include "DfsReferralData.hxx"
#include "DfsFolder.hxx"
//+----------------------------------------------------------------------------
//
// Class: DfsFolderReferralData
//
// Synopsis: This class implements the DfsFolderReferralData class
//
//-----------------------------------------------------------------------------
class DfsFolderReferralData: public DfsReferralData
{
private:
DfsFolder *_pOwningFolder; // The folder to which this belongs.
public:
DfsFolderReferralData *pPrevLoaded, *pNextLoaded; // Loaded list.
public:
//
// Function DfsFolderReferralData: Constructor for this class.
// Creates the event on which other threads should wait while load is
// in progress.
//
DfsFolderReferralData( DFSSTATUS *pStatus, DfsFolder *pCaller) :
DfsReferralData( pStatus ,DFS_OBJECT_TYPE_FOLDER_REFERRAL_DATA )
{
pPrevLoaded = pNextLoaded = NULL;
if (*pStatus == ERROR_SUCCESS)
{
_pOwningFolder = pCaller;
_pOwningFolder->AcquireReference();
}
else {
_pOwningFolder = NULL;
}
}
//
// Function ~DfsFolderReferralData: Destructor.
// First we call UnloadReferralData to destroy the loaded referral
// within this instance. We then release the parent folder.
//
~DfsFolderReferralData()
{
if ( _pOwningFolder != NULL )
{
_pOwningFolder->UnloadReferralData( this );
_pOwningFolder->ReleaseReference();
_pOwningFolder = NULL;
}
}
//
// This referral data is attached to a folder. Detach it from the
// folder so that the rest of the DFS structures can be freed up
// while we cache only this referral information.
//
VOID
DetachFromFolder()
{
if ( _pOwningFolder != NULL )
{
_pOwningFolder->RemoveReferralData(this, NULL);
_pOwningFolder->ReleaseReference();
_pOwningFolder = NULL;
}
}
//
// Function GetOwningFolder: Get the folder that owns this referral data.
//
DfsFolder *
GetOwningFolder()
{
return _pOwningFolder;
}
VOID
SetRootReferral()
{
_Flags |= DFS_ROOT_REFERRAL;
}
BOOLEAN
IsRootReferral()
{
return ( (_Flags & DFS_ROOT_REFERRAL) == DFS_ROOT_REFERRAL );
}
};
#endif // __DFS_FOLDER_REFERRAL_DATA__