277 lines
5.6 KiB
C
277 lines
5.6 KiB
C
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
||
|
//
|
||
|
// File: domcache.h
|
||
|
//
|
||
|
// Contents:
|
||
|
//
|
||
|
// Classes:
|
||
|
//
|
||
|
// Functions:
|
||
|
//
|
||
|
// History: 3-29-96 RichardW Created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
#ifdef DATA_TYPES_ONLY
|
||
|
|
||
|
//
|
||
|
// Domain specific types
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Define the structure that controls the trusted domain cache
|
||
|
//
|
||
|
|
||
|
typedef enum _DOMAIN_ENTRY_TYPE {
|
||
|
DomainInvalid, // 0 never valid
|
||
|
DomainUPN, // Special UPN domain
|
||
|
DomainMachine, // Local machine domain
|
||
|
DomainNt4, // An NT4 domain
|
||
|
DomainNt5, // An NT5 domain
|
||
|
DomainMitRealm, // An MIT realm
|
||
|
DomainMitUntrusted, // An untrusted MIT realm
|
||
|
DomainNetworkProvider, // A fake entry
|
||
|
DomainTypeMax
|
||
|
} DOMAIN_ENTRY_TYPE ;
|
||
|
|
||
|
|
||
|
typedef struct _DOMAIN_CACHE_ENTRY {
|
||
|
|
||
|
LONG RefCount ; // Ref Count
|
||
|
|
||
|
ULONG Flags ; // Flags (below)
|
||
|
|
||
|
DOMAIN_ENTRY_TYPE Type ; // Type of entry
|
||
|
|
||
|
UNICODE_STRING FlatName ; // Flat name of object (OPTIONAL)
|
||
|
|
||
|
UNICODE_STRING DnsName ; // Dns name of object (OPTIONAL)
|
||
|
|
||
|
UNICODE_STRING DisplayName ; // Display Name
|
||
|
|
||
|
} DOMAIN_CACHE_ENTRY, * PDOMAIN_CACHE_ENTRY ;
|
||
|
|
||
|
#define DCE_DEFAULT_ENTRY 0x00000001 // This is displayed by default
|
||
|
#define DCE_REACHABLE_MIT 0x00000002 // This MIT realm is reachable
|
||
|
|
||
|
#define DCacheReferenceEntry( x ) InterlockedIncrement( &(x)->RefCount );
|
||
|
|
||
|
typedef struct _DOMAIN_CACHE_ARRAY {
|
||
|
|
||
|
ULONG Count ;
|
||
|
|
||
|
ULONG MaxCount ;
|
||
|
|
||
|
BOOL Sorted ;
|
||
|
|
||
|
PDOMAIN_CACHE_ENTRY * List ;
|
||
|
|
||
|
} DOMAIN_CACHE_ARRAY, * PDOMAIN_CACHE_ARRAY ;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Keep these in order. They're used to determine UI behavior
|
||
|
//
|
||
|
typedef enum _DOMAIN_CACHE_STATE {
|
||
|
DomainCacheEmpty, // got nothing
|
||
|
DomainCacheDefaultOnly, // default values only (machine and primary domain)
|
||
|
DomainCacheRegistryCache, // default + cached values
|
||
|
DomainCacheReady // Fully up-to-date.
|
||
|
} DOMAIN_CACHE_STATE ;
|
||
|
|
||
|
typedef struct _DOMAIN_CACHE {
|
||
|
|
||
|
//
|
||
|
// Critical section that protects the data in this structure
|
||
|
//
|
||
|
|
||
|
CRITICAL_SECTION CriticalSection;
|
||
|
|
||
|
//
|
||
|
// Fields protected by that critical section:
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Task that gets invoked if the domain changes.
|
||
|
//
|
||
|
|
||
|
HANDLE Task ;
|
||
|
|
||
|
//
|
||
|
// Window to be notified when the update thread completes
|
||
|
//
|
||
|
|
||
|
HWND UpdateNotifyWindow;
|
||
|
UINT Message;
|
||
|
|
||
|
//
|
||
|
// last update time
|
||
|
//
|
||
|
|
||
|
LARGE_INTEGER CacheUpdateTime;
|
||
|
LARGE_INTEGER RegistryUpdateTime ;
|
||
|
|
||
|
HANDLE Key ;
|
||
|
DOMAIN_CACHE_STATE State ;
|
||
|
|
||
|
//
|
||
|
// Default domain. Used only when there is an async thread running
|
||
|
// so it can set the appropriate default name.
|
||
|
//
|
||
|
|
||
|
PWSTR DefaultDomain ;
|
||
|
|
||
|
//
|
||
|
// Flag indicating if we are in a MIT or Safemode state, which means
|
||
|
// we shouldn't pester netlogon about trusted domains.
|
||
|
//
|
||
|
|
||
|
ULONG Flags ;
|
||
|
|
||
|
#define DCACHE_MIT_MODE 0x00000001 // In MIT mode
|
||
|
#define DCACHE_READ_ONLY 0x00000002 // Read-only copy of cache
|
||
|
#define DCACHE_ASYNC_UPDATE 0x00000004 // Async thread running
|
||
|
#define DCACHE_MEMBER 0x00000008 // This is a domain member
|
||
|
#define DCACHE_NO_CACHE 0x00000010 // No cache was found
|
||
|
#define DCACHE_DEF_UNKNOWN 0x00000020 // The default domain could not be found
|
||
|
|
||
|
|
||
|
//
|
||
|
// This pointer may *only* be accessed under the critical
|
||
|
// section. This array will get swapped in and out, and
|
||
|
// only references to it while it is locked are safe.
|
||
|
//
|
||
|
|
||
|
PDOMAIN_CACHE_ARRAY Array ;
|
||
|
|
||
|
} DOMAIN_CACHE, *PDOMAIN_CACHE;
|
||
|
|
||
|
#define DCACHE_UPDATE_CONFLICT 3
|
||
|
#define DCACHE_UPDATE_COMBOBOX 2
|
||
|
#define DCACHE_UPDATE_SUCCESSFUL 1
|
||
|
#define DCACHE_UPDATE_FAILURE 0
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#else // DATA_TYPES_ONLY
|
||
|
|
||
|
|
||
|
#define WM_CACHE_UPDATE_COMPLETE WM_USER+256
|
||
|
|
||
|
//
|
||
|
// Exported function prototypes
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
DCacheInitialize(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
VOID
|
||
|
DCacheDereferenceEntry(
|
||
|
PDOMAIN_CACHE_ENTRY Entry
|
||
|
);
|
||
|
|
||
|
|
||
|
PDOMAIN_CACHE_ENTRY
|
||
|
DCacheSearchArray(
|
||
|
PDOMAIN_CACHE_ARRAY Array,
|
||
|
PUNICODE_STRING DomainName
|
||
|
);
|
||
|
|
||
|
PDOMAIN_CACHE
|
||
|
DCacheCreate(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
PDOMAIN_CACHE_ENTRY
|
||
|
DCacheCreateEntry(
|
||
|
DOMAIN_ENTRY_TYPE Type,
|
||
|
PUNICODE_STRING FlatName OPTIONAL,
|
||
|
PUNICODE_STRING DnsName OPTIONAL,
|
||
|
PUNICODE_STRING DisplayName OPTIONAL
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DCacheUpdateMinimal(
|
||
|
PDOMAIN_CACHE Cache,
|
||
|
PWSTR DefaultDomain OPTIONAL,
|
||
|
BOOL CompleteAsync
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DCacheUpdateFull(
|
||
|
PDOMAIN_CACHE Cache,
|
||
|
PWSTR Default OPTIONAL
|
||
|
);
|
||
|
|
||
|
PDOMAIN_CACHE_ARRAY
|
||
|
DCacheCopyCacheArray(
|
||
|
PDOMAIN_CACHE Cache
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
DCacheFreeArray(
|
||
|
PDOMAIN_CACHE_ARRAY Array
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DCacheSetNotifyWindowIfNotReady(
|
||
|
PDOMAIN_CACHE Cache,
|
||
|
HWND Window,
|
||
|
UINT Message
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DCachePopulateListBoxFromArray(
|
||
|
PDOMAIN_CACHE_ARRAY Array,
|
||
|
HWND ComboBox,
|
||
|
LPWSTR LastKey OPTIONAL
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DCacheAddNetworkProviders(
|
||
|
PDOMAIN_CACHE_ARRAY Array
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DCacheValidateCache(
|
||
|
PDOMAIN_CACHE Cache
|
||
|
);
|
||
|
|
||
|
DOMAIN_CACHE_STATE
|
||
|
DCacheGetCacheState(
|
||
|
PDOMAIN_CACHE Cache
|
||
|
);
|
||
|
|
||
|
ULONG
|
||
|
DCacheGetFlags(
|
||
|
PDOMAIN_CACHE Cache
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DCacheAddNetworkProviders(
|
||
|
PDOMAIN_CACHE_ARRAY Array
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DCacheSetDefaultEntry(
|
||
|
PDOMAIN_CACHE Cache,
|
||
|
PWSTR FlatName OPTIONAL,
|
||
|
PWSTR DnsName OPTIONAL
|
||
|
);
|
||
|
|
||
|
PDOMAIN_CACHE_ENTRY
|
||
|
DCacheLocateEntry(
|
||
|
PDOMAIN_CACHE Cache,
|
||
|
PWSTR Domain
|
||
|
);
|
||
|
|
||
|
#endif
|