150 lines
3.3 KiB
C
150 lines
3.3 KiB
C
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 1998 - 1999
|
||
|
//
|
||
|
// File: ndstruct.h
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef HEADER_NDSTRUCT
|
||
|
#define HEADER_NDSTRUCT
|
||
|
|
||
|
|
||
|
typedef struct _NETBT_TRANSPORT {
|
||
|
LIST_ENTRY Next;
|
||
|
|
||
|
//
|
||
|
// Flags describing this Netbt transport
|
||
|
//
|
||
|
|
||
|
DWORD Flags;
|
||
|
|
||
|
#define BOUND_TO_REDIR 0x001 // Transport is bound to the redir
|
||
|
#define BOUND_TO_BOWSER 0x002 // Transport is bound to the bowser
|
||
|
#define IP_ADDRESS_IN_DNS 0x004 // IP address is registered in DNS
|
||
|
|
||
|
//
|
||
|
// IP Address for this transport
|
||
|
//
|
||
|
|
||
|
ULONG IpAddress;
|
||
|
|
||
|
//
|
||
|
// Name of the transport (Must be the last field in the structure)
|
||
|
//
|
||
|
WCHAR pswzTransportName[1];
|
||
|
} NETBT_TRANSPORT, *PNETBT_TRANSPORT;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Structure describing a single tested domain
|
||
|
//
|
||
|
|
||
|
typedef struct _TESTED_DOMAIN {
|
||
|
LIST_ENTRY Next;
|
||
|
|
||
|
//
|
||
|
// Name of the domain.
|
||
|
//
|
||
|
// Queryable domain is NULL for the domain we're a member of so we can
|
||
|
// pass NULL to DsGetDcName for that domain. Doing so has better query
|
||
|
// characteristics since it tries both the Netbios and DNS domain names.
|
||
|
//
|
||
|
//LPWSTR DomainName;
|
||
|
LPWSTR NetbiosDomainName; // NULL if not known
|
||
|
LPWSTR DnsDomainName; // NULL if not known
|
||
|
LPWSTR PrintableDomainName; // Pointer to a non-NULL domain name string
|
||
|
|
||
|
LPWSTR QueryableDomainName; // Can be NULL for domain we're a member of
|
||
|
BOOL fPrimaryDomain; // True if the domain is domain we're a member of
|
||
|
|
||
|
//BOOL IsNetbios; // True if DomainName is syntactically a Netbios name
|
||
|
//BOOL IsDns; // True if DomainName is syntactically a Dns name
|
||
|
|
||
|
//
|
||
|
// Domain Sid of the domain (if known)
|
||
|
//
|
||
|
BOOL fDomainSid; // do we have the domain sid?
|
||
|
PSID DomainSid;
|
||
|
|
||
|
//
|
||
|
// DcInfo for a DS_PREFERRED DC in the domain.
|
||
|
//
|
||
|
PDOMAIN_CONTROLLER_INFOW DcInfo;
|
||
|
BOOL fTriedToFindDcInfo;
|
||
|
|
||
|
//
|
||
|
// List of DCs to test.
|
||
|
//
|
||
|
|
||
|
LIST_ENTRY TestedDcs;
|
||
|
|
||
|
} TESTED_DOMAIN, *PTESTED_DOMAIN;
|
||
|
|
||
|
//
|
||
|
// Structure describing a single tested DC
|
||
|
//
|
||
|
|
||
|
typedef struct _TESTED_DC {
|
||
|
LIST_ENTRY Next;
|
||
|
|
||
|
//
|
||
|
// Name of the DC
|
||
|
//
|
||
|
// This will be the DNS DC name if we know it. Otherwise it will be the
|
||
|
// Netbios DC name.
|
||
|
//
|
||
|
LPWSTR ComputerName;
|
||
|
|
||
|
WCHAR NetbiosDcName[CNLEN+1];
|
||
|
|
||
|
ULONG Rid;
|
||
|
|
||
|
//
|
||
|
// IP Address of the DC
|
||
|
// NULL: Not yet known
|
||
|
//
|
||
|
|
||
|
LPWSTR DcIpAddress;
|
||
|
|
||
|
//
|
||
|
// Backlink to domain this DC belongs to
|
||
|
//
|
||
|
|
||
|
PTESTED_DOMAIN TestedDomain;
|
||
|
|
||
|
//
|
||
|
// Flags describing this DC.
|
||
|
//
|
||
|
|
||
|
ULONG Flags;
|
||
|
|
||
|
#define DC_IS_DOWN 0x001 // DC cannot be pinged
|
||
|
#define DC_IS_NT5 0x002 // DC is running NT 5 (or newer)
|
||
|
#define DC_IS_NT4 0x004 // DC is running NT 4 (or older)
|
||
|
#define DC_PINGED 0x008 // The DC pinged
|
||
|
#define DC_FAILED_PING 0x010 // The DC ping failed
|
||
|
|
||
|
|
||
|
} TESTED_DC, *PTESTED_DC;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Generic interface to DsGetDcName
|
||
|
|
||
|
typedef DWORD (WINAPI DSGETDCNAMEW)(
|
||
|
IN LPCWSTR ComputerName OPTIONAL,
|
||
|
IN LPCWSTR DomainName OPTIONAL,
|
||
|
IN GUID *DomainGuid OPTIONAL,
|
||
|
IN LPCWSTR SiteName OPTIONAL,
|
||
|
IN ULONG Flags,
|
||
|
OUT PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|