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.
 
 
 
 
 
 

176 lines
3.3 KiB

/*++
Microsoft Windows NT RPC Name Service
Copyright (C) Microsoft Corporation, 1995 - 1999
Module Name:
master.hxx
Abstract:
This header file defines two classes of master handles which are used to
access information from a master locator. The information so obtained is
cached in special cache entries in the local database.
Author:
Satish Thatte (SatishT) 10/21/95 Created all the code below except where
otherwise indicated.
--*/
#ifndef _MASTER_
#define _MASTER_
#include <lmcons.h>
#undef PASCAL
#undef FAR
/*++
Class Definition:
CMasterLookupHandle
Abstract:
This is the NS handle class for binding handle lookup from a master locator.
--*/
class CMasterLookupHandle : public CRemoteLookupHandle {
/* binding handle for master locator */
RPC_BINDING_HANDLE hCurrentMaster;
/* lookup context handle for master locator */
NSI_NS_HANDLE_T lookupHandle;
BOOL fFinished;
/* private prefetching function -- only calls CLIENT_I_nsi_lookup_next
once, even if it doesn't get anything new. Result tells you whether
anything was returned by CLIENT_I_nsi_lookup_next, not whether anything
new was found.
*/
BOOL fetchNext();
void refresh() {
/* refresh the supply in plhFetched if necessary, and update the
fFinished flag accordingly */
while ((!plhFetched || plhFetched->finished()) && !fFinished)
fFinished = !fetchNext();
}
virtual void initialize();
virtual void rundown();
#if DBG
static ULONG ulMasterLookupHandleCount;
static ULONG ulMasterLookupHandleNo;
ULONG ulHandleNo;
#endif
public:
CMasterLookupHandle(
UNSIGNED32 EntryNameSyntax,
STRING_T EntryName,
CGUIDVersion * pGVInterface,
CGUIDVersion * pGVTransferSyntax,
CGUID * pIDobject,
unsigned long ulVectorSize,
unsigned long ulCacheAge
) :
CRemoteLookupHandle(
EntryNameSyntax,
EntryName,
pGVInterface,
pGVTransferSyntax,
pIDobject,
ulVectorSize,
ulCacheAge
)
{
hCurrentMaster = NULL;
#if DBG
ulMasterLookupHandleCount++;
ulHandleNo = ++ulMasterLookupHandleNo;
#endif
}
~CMasterLookupHandle()
{
#if DBG
ulMasterLookupHandleCount--;
#endif
}
NSI_BINDING_VECTOR_T *next() {
DBGOUT(TRACE,"CMasterLookupHandle::next called for Handle#" << ulHandleNo << "\n\n");
if (StatusCode != RPC_S_OK) Raise(StatusCode);
if (fNotInitialized) initialize();
refresh();
if (!fFinished)
return plhFetched->next();
else return NULL;
}
int finished() {
DBGOUT(TRACE,"CMasterLookupHandle::finished called for Handle#" << ulHandleNo << "\n\n");
if (StatusCode != RPC_S_OK) return TRUE;
if (fNotInitialized) initialize();
refresh();
return fFinished;
}
};
/*++
Class Definition:
CMasterObjectInqHandle
Abstract:
This is the NS handle class for object inquiry from a master locator.
--*/
class CMasterObjectInqHandle : public CRemoteObjectInqHandle {
void initialize();
public:
CMasterObjectInqHandle(
STRING_T EntryName,
ULONG ulCachAge // ignored for now because Master doesn't
); // tell us the age of the info returned
};
#endif // _MASTER_