WindowsXP/base/fs/remotefs/dfs/dfsserver/serverlibrary/dfsregistryrootfolder.hxx
2025-04-27 07:49:33 -04:00

164 lines
3.7 KiB
C++

//+----------------------------------------------------------------------------
//
// Copyright (C) 2000, Microsoft Corporation
//
// File: DfsRegistryRootFolder.hxx
//
// Contents: the Root DFS Folder class for Registry Store
//
// Classes: DfsRegistryRootFolder
//
// History: Dec. 8 2000, Author: udayh
//
//-----------------------------------------------------------------------------
#ifndef __DFS_REGISTRY_ROOT_FOLDER__
#define __DFS_REGISTRY_ROOT_FOLDER__
#include "DfsRootFolder.hxx"
#include "DfsRegistryStore.hxx"
//+----------------------------------------------------------------------------
//
// Class: DfsRegistryRootFolder
//
// Synopsis: This class implements The Dfs Registry root folder.
//
//-----------------------------------------------------------------------------
class DfsRegistryRootFolder: public DfsRootFolder
{
private:
DfsRegistryStore *_pStore; // Pointer to registered store
// that owns this root.
protected:
DfsStore *
GetMetadataStore()
{
return _pStore;
}
//
// Function GetMetadataKey: Gets the registry metadata key for
// this root folder.
//
DFSSTATUS
GetMetadataHandle( PDFS_METADATA_HANDLE pRootHandle )
{
HKEY RootKey;
DFSSTATUS Status;
Status = GetMetadataKey( &RootKey );
if (Status == ERROR_SUCCESS)
{
*pRootHandle = CreateMetadataHandle(RootKey);
}
return Status;
}
VOID
ReleaseMetadataHandle( DFS_METADATA_HANDLE RootHandle )
{
HKEY RootKey;
RootKey = (HKEY)ExtractFromMetadataHandle(RootHandle);
ReleaseMetadataKey(RootKey);
DestroyMetadataHandle(RootHandle);
return;
}
private:
DFSSTATUS
GetMetadataKey( PHKEY pOpenedKey )
{
return _pStore->GetRootKey( GetNameContextString(),
GetRootRegKeyNameString(),
NULL,
pOpenedKey );
}
//
// Function ReleaseMetadataKey: Closes the registry metadata key for
// this root folder.
//
VOID
ReleaseMetadataKey( HKEY OpenedKey )
{
RegCloseKey( OpenedKey );
}
public:
//
// Function DfsRegistryRootFolder: Constructor.
// Initializes the RegistryRootFolder class instance.
//
DfsRegistryRootFolder(
LPWSTR NameContext,
LPWSTR RootRegistryName,
PUNICODE_STRING pLogicalName,
PUNICODE_STRING pPhysicalShare,
DfsRegistryStore *pParentStore,
DFSSTATUS *pStatus );
~DfsRegistryRootFolder()
{
DfsFreeUnicodeString(&_DfsVisibleContext);
if (_pStore != NULL)
{
_pStore->ReleaseReference();
_pStore = NULL;
}
}
//
// Function Synchronize: This function overrides the synchronize
// defined in the base class.
// The synchronize function updates the root folder's children
// with the uptodate information available in the store's metadata.
//
DFSSTATUS
Synchronize();
DFSSTATUS
GetMetadataLogicalToLinkName( PUNICODE_STRING pIn,
PUNICODE_STRING pOut )
{
UNICODE_STRING FirstComp;
return DfsGetFirstComponent( pIn,
&FirstComp,
pOut );
}
VOID
ReleaseMetadataLogicalToLinkName( PUNICODE_STRING pIn )
{
UNREFERENCED_PARAMETER(pIn);
return NOTHING;
}
};
#endif // __DFS_REGISTRY_ROOT_FOLDER__