windows-nt/Source/XPSP1/NT/ds/security/gina/msgina/domain.h
2020-09-26 16:20:57 +08:00

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