154 lines
3.9 KiB
C++
154 lines
3.9 KiB
C++
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) 2001, Microsoft Corporation
|
|
//
|
|
// File: DfsServerSiteInfo.hxx
|
|
//
|
|
// Contents: the Dfs Site Information class.
|
|
//
|
|
// Classes: DfsServerSiteInfo
|
|
//
|
|
// History: Jan. 8 2001, Author: udayh
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
#ifndef __DFS_SITE_SUPPORT__
|
|
#define __DFS_SITE_SUPPORT__
|
|
|
|
#include "DfsGeneric.hxx"
|
|
#include "DfsServerSiteInfo.hxx"
|
|
#include "dfsnametable.h"
|
|
|
|
class DfsServerSiteInfo;
|
|
|
|
class DfsSiteSupport: public DfsGeneric
|
|
{
|
|
private:
|
|
struct _DFS_NAME_TABLE *_pServerTable;
|
|
|
|
public:
|
|
|
|
DfsSiteSupport(
|
|
DFSSTATUS *pStatus ) : DfsGeneric(DFS_OBJECT_TYPE_SITE_SUPPORT)
|
|
|
|
{
|
|
NTSTATUS NtStatus;
|
|
|
|
NtStatus = DfsInitializeNameTable ( 0,
|
|
&_pServerTable );
|
|
*pStatus = RtlNtStatusToDosError(NtStatus);
|
|
|
|
}
|
|
|
|
DFSSTATUS
|
|
LookupServerSiteInfo(
|
|
PUNICODE_STRING pServerName,
|
|
DfsServerSiteInfo **ppServerInfo)
|
|
{
|
|
DFSSTATUS Status;
|
|
NTSTATUS NtStatus;
|
|
PVOID pData;
|
|
|
|
NtStatus = DfsNameTableAcquireReadLock( _pServerTable );
|
|
|
|
if ( NtStatus == STATUS_SUCCESS )
|
|
{
|
|
NtStatus = DfsLookupNameTableLocked( _pServerTable,
|
|
pServerName,
|
|
&pData );
|
|
if (NtStatus == STATUS_SUCCESS)
|
|
{
|
|
Status = ERROR_SUCCESS;
|
|
*ppServerInfo = (DfsServerSiteInfo *)pData;
|
|
(*ppServerInfo)->AcquireReference();
|
|
}
|
|
DfsNameTableReleaseLock( _pServerTable );
|
|
}
|
|
|
|
if ( NtStatus != STATUS_SUCCESS )
|
|
{
|
|
Status = ERROR_NOT_FOUND;
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
|
|
DFSSTATUS
|
|
AddServerSiteInfo(
|
|
PUNICODE_STRING pServerName,
|
|
DfsServerSiteInfo **ppServerInfo)
|
|
{
|
|
DFSSTATUS Status = ERROR_SUCCESS;
|
|
NTSTATUS NtStatus = STATUS_SUCCESS;
|
|
DfsServerSiteInfo *pNewServer = NULL;
|
|
|
|
pNewServer = new DfsServerSiteInfo(pServerName,
|
|
&Status );
|
|
if(pNewServer == NULL)
|
|
{
|
|
Status = ERROR_NOT_ENOUGH_MEMORY;
|
|
}
|
|
|
|
if (Status == ERROR_SUCCESS)
|
|
{
|
|
*ppServerInfo = pNewServer;
|
|
|
|
|
|
NtStatus = DfsNameTableAcquireWriteLock( _pServerTable );
|
|
|
|
if ( NtStatus == STATUS_SUCCESS )
|
|
{
|
|
NtStatus = DfsInsertInNameTableLocked( _pServerTable,
|
|
pNewServer->GetServerName(),
|
|
(PVOID)(pNewServer));
|
|
if (NtStatus == STATUS_SUCCESS)
|
|
{
|
|
pNewServer->AcquireReference();
|
|
}
|
|
|
|
DfsNameTableReleaseLock( _pServerTable );
|
|
}
|
|
|
|
}
|
|
return Status;
|
|
}
|
|
|
|
|
|
DFSSTATUS
|
|
GetServerSiteInfo(
|
|
IN PUNICODE_STRING pServerName,
|
|
OUT DfsServerSiteInfo **ppServerInfo )
|
|
{
|
|
DFSSTATUS Status;
|
|
|
|
|
|
Status = LookupServerSiteInfo( pServerName,
|
|
ppServerInfo );
|
|
|
|
if (Status == ERROR_SUCCESS)
|
|
{
|
|
Status = (*ppServerInfo)->Refresh();
|
|
} else {
|
|
Status = AddServerSiteInfo( pServerName,
|
|
ppServerInfo );
|
|
}
|
|
return Status;
|
|
}
|
|
|
|
|
|
DFSSTATUS
|
|
ReleaseServerSiteInfo(
|
|
DfsServerSiteInfo *pServerInfo )
|
|
{
|
|
pServerInfo->ReleaseReference();
|
|
|
|
return STATUS_SUCCESS;
|
|
}
|
|
|
|
};
|
|
|
|
#endif __DFS_SITE_SUPPORT__
|