153 lines
2.4 KiB
C++
153 lines
2.4 KiB
C++
|
#define MAX_ENTRIES 20
|
|||
|
|
|||
|
#define AGE_LIMIT_VALID_ENTRIES 300
|
|||
|
#define AGE_LIMIT_INVALID_ENTRIES 180
|
|||
|
|
|||
|
#define CACHE_HIT 1
|
|||
|
#define CACHE_MISS 0
|
|||
|
|
|||
|
#define INVALID_ENTRY_TYPE 0
|
|||
|
#define DOMAIN_ENTRY_TYPE 1
|
|||
|
#define COMPUTER_ENTRY_TYPE 2
|
|||
|
#define WORKGROUP_ENTRY_TYPE 3
|
|||
|
#define DOMAIN_ENTRY_TYPE_RO 4
|
|||
|
|
|||
|
typedef struct _classentry{
|
|||
|
BOOL bInUse;
|
|||
|
SYSTEMTIME st;
|
|||
|
BOOL fCacheHit;
|
|||
|
DWORD dwElementType; // if it is type domain then we have a PDC
|
|||
|
LPWSTR pszElementName;
|
|||
|
union {
|
|||
|
LPWSTR pszDomainName;
|
|||
|
LPWSTR pszPDCName;
|
|||
|
LPWSTR pszDCName;
|
|||
|
} u;
|
|||
|
|
|||
|
}CLASSENTRY, *PCLASSENTRY;
|
|||
|
|
|||
|
class CObjNameCache {
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
HRESULT
|
|||
|
CObjNameCache::
|
|||
|
addentry(
|
|||
|
LPWSTR pszElementName,
|
|||
|
BOOL fCacheHit,
|
|||
|
DWORD dwElementType,
|
|||
|
LPWSTR pszName // This will be PDC if Element= Domain
|
|||
|
);
|
|||
|
|
|||
|
HRESULT
|
|||
|
CObjNameCache::
|
|||
|
findentry(
|
|||
|
LPWSTR pszElementName,
|
|||
|
PDWORD pdwIndex
|
|||
|
);
|
|||
|
|
|||
|
HRESULT
|
|||
|
CObjNameCache::
|
|||
|
getentry(
|
|||
|
LPWSTR pszElementName,
|
|||
|
PBOOL pfHit,
|
|||
|
PDWORD pdwEntryType,
|
|||
|
LPWSTR pszName
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
CObjNameCache::
|
|||
|
InvalidateStaleEntries();
|
|||
|
|
|||
|
CObjNameCache::
|
|||
|
CObjNameCache();
|
|||
|
|
|||
|
CObjNameCache::
|
|||
|
~CObjNameCache();
|
|||
|
|
|||
|
static
|
|||
|
HRESULT
|
|||
|
CObjNameCache::
|
|||
|
CreateClassCache(
|
|||
|
CObjNameCache FAR * FAR * ppClassCache
|
|||
|
);
|
|||
|
|
|||
|
DWORD
|
|||
|
CObjNameCache::
|
|||
|
IsOlderThan(
|
|||
|
DWORD i,
|
|||
|
DWORD j
|
|||
|
);
|
|||
|
|
|||
|
protected:
|
|||
|
|
|||
|
DWORD _dwMaxCacheSize;
|
|||
|
|
|||
|
CLASSENTRY _ClassEntries[MAX_ENTRIES];
|
|||
|
|
|||
|
CRITICAL_SECTION _cs;
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
WinNTGetCachedDCName(
|
|||
|
LPWSTR pszDomainName,
|
|||
|
LPWSTR pszPDCName,
|
|||
|
DWORD dwFlags
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
WinNTGetCachedComputerName(
|
|||
|
LPWSTR pszComputerName,
|
|||
|
LPWSTR pszDomainName,
|
|||
|
LPWSTR pszSAMName,
|
|||
|
CWinNTCredentials& Credentials
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// helper function for the above
|
|||
|
//
|
|||
|
HRESULT
|
|||
|
WinNTGetCachedObject(
|
|||
|
LPWSTR pszElementName,
|
|||
|
DWORD dwElementType,
|
|||
|
LPWSTR pszName,
|
|||
|
LPWSTR pszSAMName,
|
|||
|
DWORD dwFlags,
|
|||
|
CWinNTCredentials& Credentials
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
HRESULT
|
|||
|
WinNTGetCachedName(
|
|||
|
LPWSTR pszElementName,
|
|||
|
PDWORD pdwElementType,
|
|||
|
LPWSTR pszName,
|
|||
|
LPWSTR pszSAMName,
|
|||
|
CWinNTCredentials& Credentials
|
|||
|
);
|
|||
|
|
|||
|
LONG
|
|||
|
TimeDifference(
|
|||
|
SYSTEMTIME st1,
|
|||
|
SYSTEMTIME st2
|
|||
|
);
|
|||
|
|
|||
|
BOOL
|
|||
|
IsAddressNumeric(
|
|||
|
LPWSTR HostName
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|