|
|
/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1996-1999 Microsoft Corporation
Module Name:
dsgetdc.h
Abstract:
This file contains structures, function prototypes, and definitions for the DsGetDcName API.
Environment:
User Mode - Win32
Notes:
--*/
#ifndef _DSGETDC_
#define _DSGETDC_
#if _MSC_VER > 1000
#pragma once
#endif
#if !defined(_DSGETDCAPI_)
#define DSGETDCAPI DECLSPEC_IMPORT
#else
#define DSGETDCAPI
#endif
#ifdef __cplusplus
extern "C" { #endif
//
// Structure definitions
//
//
// Flags to passed to DsGetDcName
//
#define DS_FORCE_REDISCOVERY 0x00000001
#define DS_DIRECTORY_SERVICE_REQUIRED 0x00000010
#define DS_DIRECTORY_SERVICE_PREFERRED 0x00000020
#define DS_GC_SERVER_REQUIRED 0x00000040
#define DS_PDC_REQUIRED 0x00000080
#define DS_BACKGROUND_ONLY 0x00000100
#define DS_IP_REQUIRED 0x00000200
#define DS_KDC_REQUIRED 0x00000400
#define DS_TIMESERV_REQUIRED 0x00000800
#define DS_WRITABLE_REQUIRED 0x00001000
#define DS_GOOD_TIMESERV_PREFERRED 0x00002000
#define DS_AVOID_SELF 0x00004000
#define DS_ONLY_LDAP_NEEDED 0x00008000
#define DS_IS_FLAT_NAME 0x00010000
#define DS_IS_DNS_NAME 0x00020000
#define DS_RETURN_DNS_NAME 0x40000000
#define DS_RETURN_FLAT_NAME 0x80000000
#define DSGETDC_VALID_FLAGS ( \
DS_FORCE_REDISCOVERY | \ DS_DIRECTORY_SERVICE_REQUIRED | \ DS_DIRECTORY_SERVICE_PREFERRED | \ DS_GC_SERVER_REQUIRED | \ DS_PDC_REQUIRED | \ DS_BACKGROUND_ONLY | \ DS_IP_REQUIRED | \ DS_KDC_REQUIRED | \ DS_TIMESERV_REQUIRED | \ DS_WRITABLE_REQUIRED | \ DS_GOOD_TIMESERV_PREFERRED | \ DS_AVOID_SELF | \ DS_ONLY_LDAP_NEEDED | \ DS_IS_FLAT_NAME | \ DS_IS_DNS_NAME | \ DS_RETURN_FLAT_NAME | \ DS_RETURN_DNS_NAME )
//
// Structure returned from DsGetDcName
//
typedef struct _DOMAIN_CONTROLLER_INFOA { LPSTR DomainControllerName; LPSTR DomainControllerAddress; ULONG DomainControllerAddressType; GUID DomainGuid; LPSTR DomainName; LPSTR DnsForestName; ULONG Flags; LPSTR DcSiteName; LPSTR ClientSiteName; } DOMAIN_CONTROLLER_INFOA, *PDOMAIN_CONTROLLER_INFOA;
typedef struct _DOMAIN_CONTROLLER_INFOW { #ifdef MIDL_PASS
[string,unique] wchar_t *DomainControllerName; #else // MIDL_PASS
LPWSTR DomainControllerName; #endif // MIDL_PASS
#ifdef MIDL_PASS
[string,unique] wchar_t *DomainControllerAddress; #else // MIDL_PASS
LPWSTR DomainControllerAddress; #endif // MIDL_PASS
ULONG DomainControllerAddressType; GUID DomainGuid; #ifdef MIDL_PASS
[string,unique] wchar_t *DomainName; #else // MIDL_PASS
LPWSTR DomainName; #endif // MIDL_PASS
#ifdef MIDL_PASS
[string,unique] wchar_t *DnsForestName; #else // MIDL_PASS
LPWSTR DnsForestName; #endif // MIDL_PASS
ULONG Flags; #ifdef MIDL_PASS
[string,unique] wchar_t *DcSiteName; #else // MIDL_PASS
LPWSTR DcSiteName; #endif // MIDL_PASS
#ifdef MIDL_PASS
[string,unique] wchar_t *ClientSiteName; #else // MIDL_PASS
LPWSTR ClientSiteName; #endif // MIDL_PASS
} DOMAIN_CONTROLLER_INFOW, *PDOMAIN_CONTROLLER_INFOW;
#ifdef UNICODE
#define DOMAIN_CONTROLLER_INFO DOMAIN_CONTROLLER_INFOW
#define PDOMAIN_CONTROLLER_INFO PDOMAIN_CONTROLLER_INFOW
#else
#define DOMAIN_CONTROLLER_INFO DOMAIN_CONTROLLER_INFOA
#define PDOMAIN_CONTROLLER_INFO PDOMAIN_CONTROLLER_INFOA
#endif // !UNICODE
//
// Values for DomainControllerAddressType
//
#define DS_INET_ADDRESS 1
#define DS_NETBIOS_ADDRESS 2
//
// Values for returned Flags
//
#define DS_PDC_FLAG 0x00000001 // DC is PDC of Domain
#define DS_GC_FLAG 0x00000004 // DC is a GC of forest
#define DS_LDAP_FLAG 0x00000008 // Server supports an LDAP server
#define DS_DS_FLAG 0x00000010 // DC supports a DS and is a Domain Controller
#define DS_KDC_FLAG 0x00000020 // DC is running KDC service
#define DS_TIMESERV_FLAG 0x00000040 // DC is running time service
#define DS_CLOSEST_FLAG 0x00000080 // DC is in closest site to client
#define DS_WRITABLE_FLAG 0x00000100 // DC has a writable DS
#define DS_GOOD_TIMESERV_FLAG 0x00000200 // DC is running time service (and has clock hardware)
#define DS_NDNC_FLAG 0x00000400 // DomainName is non-domain NC serviced by the LDAP server
#define DS_PING_FLAGS 0x0000FFFF // Flags returned on ping
#define DS_DNS_CONTROLLER_FLAG 0x20000000 // DomainControllerName is a DNS name
#define DS_DNS_DOMAIN_FLAG 0x40000000 // DomainName is a DNS name
#define DS_DNS_FOREST_FLAG 0x80000000 // DnsForestName is a DNS name
//
// Function Prototypes
//
DSGETDCAPI DWORD WINAPI DsGetDcNameA( IN LPCSTR ComputerName OPTIONAL, IN LPCSTR DomainName OPTIONAL, IN GUID *DomainGuid OPTIONAL, IN LPCSTR SiteName OPTIONAL, IN ULONG Flags, OUT PDOMAIN_CONTROLLER_INFOA *DomainControllerInfo );
DSGETDCAPI 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 );
#ifdef UNICODE
#define DsGetDcName DsGetDcNameW
#else
#define DsGetDcName DsGetDcNameA
#endif // !UNICODE
DSGETDCAPI DWORD WINAPI DsGetSiteNameA( IN LPCSTR ComputerName OPTIONAL, OUT LPSTR *SiteName );
DSGETDCAPI DWORD WINAPI DsGetSiteNameW( IN LPCWSTR ComputerName OPTIONAL, OUT LPWSTR *SiteName );
#ifdef UNICODE
#define DsGetSiteName DsGetSiteNameW
#else
#define DsGetSiteName DsGetSiteNameA
#endif // !UNICODE
DSGETDCAPI DWORD WINAPI DsValidateSubnetNameW( IN LPCWSTR SubnetName );
DSGETDCAPI DWORD WINAPI DsValidateSubnetNameA( IN LPCSTR SubnetName );
#ifdef UNICODE
#define DsValidateSubnetName DsValidateSubnetNameW
#else
#define DsValidateSubnetName DsValidateSubnetNameA
#endif // !UNICODE
//
// Only include if winsock2.h has been included
//
#ifdef _WINSOCK2API_
DSGETDCAPI DWORD WINAPI DsAddressToSiteNamesW( IN LPCWSTR ComputerName OPTIONAL, IN DWORD EntryCount, IN PSOCKET_ADDRESS SocketAddresses, OUT LPWSTR **SiteNames );
DSGETDCAPI DWORD WINAPI DsAddressToSiteNamesA( IN LPCSTR ComputerName OPTIONAL, IN DWORD EntryCount, IN PSOCKET_ADDRESS SocketAddresses, OUT LPSTR **SiteNames );
#ifdef UNICODE
#define DsAddressToSiteNames DsAddressToSiteNamesW
#else
#define DsAddressToSiteNames DsAddressToSiteNamesA
#endif // !UNICODE
DSGETDCAPI DWORD WINAPI DsAddressToSiteNamesExW( IN LPCWSTR ComputerName OPTIONAL, IN DWORD EntryCount, IN PSOCKET_ADDRESS SocketAddresses, OUT LPWSTR **SiteNames, OUT LPWSTR **SubnetNames );
DSGETDCAPI DWORD WINAPI DsAddressToSiteNamesExA( IN LPCSTR ComputerName OPTIONAL, IN DWORD EntryCount, IN PSOCKET_ADDRESS SocketAddresses, OUT LPSTR **SiteNames, OUT LPSTR **SubnetNames );
#ifdef UNICODE
#define DsAddressToSiteNamesEx DsAddressToSiteNamesExW
#else
#define DsAddressToSiteNamesEx DsAddressToSiteNamesExA
#endif // !UNICODE
#endif // _WINSOCK2API_
//
// API to enumerate trusted domains
//
typedef struct _DS_DOMAIN_TRUSTSW {
//
// Name of the trusted domain.
//
#ifdef MIDL_PASS
[string] wchar_t * NetbiosDomainName; [string] wchar_t * DnsDomainName; #else // MIDL_PASS
LPWSTR NetbiosDomainName; LPWSTR DnsDomainName; #endif // MIDL_PASS
//
// Flags defining attributes of the trust.
//
ULONG Flags; #define DS_DOMAIN_IN_FOREST 0x0001 // Domain is a member of the forest
#define DS_DOMAIN_DIRECT_OUTBOUND 0x0002 // Domain is directly trusted
#define DS_DOMAIN_TREE_ROOT 0x0004 // Domain is root of a tree in the forest
#define DS_DOMAIN_PRIMARY 0x0008 // Domain is the primary domain of queried server
#define DS_DOMAIN_NATIVE_MODE 0x0010 // Primary domain is running in native mode
#define DS_DOMAIN_DIRECT_INBOUND 0x0020 // Domain is directly trusting
#define DS_DOMAIN_VALID_FLAGS ( \
DS_DOMAIN_IN_FOREST | \ DS_DOMAIN_DIRECT_OUTBOUND | \ DS_DOMAIN_TREE_ROOT | \ DS_DOMAIN_PRIMARY | \ DS_DOMAIN_NATIVE_MODE | \ DS_DOMAIN_DIRECT_INBOUND )
//
// Index to the domain that is the parent of this domain.
// Only defined if NETLOGON_DOMAIN_IN_FOREST is set and
// NETLOGON_DOMAIN_TREE_ROOT is not set.
//
ULONG ParentIndex;
//
// The trust type and attributes of this trust.
//
// If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set,
// these value are infered.
//
ULONG TrustType; ULONG TrustAttributes;
//
// The SID of the trusted domain.
//
// If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set,
// this value will be NULL.
//
#if defined(MIDL_PASS)
PISID DomainSid; #else
PSID DomainSid; #endif
//
// The GUID of the trusted domain.
//
GUID DomainGuid;
} DS_DOMAIN_TRUSTSW, *PDS_DOMAIN_TRUSTSW;
//
// ANSI version of the above struct
//
typedef struct _DS_DOMAIN_TRUSTSA { LPSTR NetbiosDomainName; LPSTR DnsDomainName; ULONG Flags; ULONG ParentIndex; ULONG TrustType; ULONG TrustAttributes; PSID DomainSid; GUID DomainGuid; } DS_DOMAIN_TRUSTSA, *PDS_DOMAIN_TRUSTSA;
#ifdef UNICODE
#define DS_DOMAIN_TRUSTS DS_DOMAIN_TRUSTSW
#define PDS_DOMAIN_TRUSTS PDS_DOMAIN_TRUSTSW
#else
#define DS_DOMAIN_TRUSTS DS_DOMAIN_TRUSTSA
#define PDS_DOMAIN_TRUSTS PDS_DOMAIN_TRUSTSA
#endif // !UNICODE
DSGETDCAPI DWORD WINAPI DsEnumerateDomainTrustsW ( IN LPWSTR ServerName OPTIONAL, IN ULONG Flags, OUT PDS_DOMAIN_TRUSTSW *Domains, OUT PULONG DomainCount );
DSGETDCAPI DWORD WINAPI DsEnumerateDomainTrustsA ( IN LPSTR ServerName OPTIONAL, IN ULONG Flags, OUT PDS_DOMAIN_TRUSTSA *Domains, OUT PULONG DomainCount );
#ifdef UNICODE
#define DsEnumerateDomainTrusts DsEnumerateDomainTrustsW
#else
#define DsEnumerateDomainTrusts DsEnumerateDomainTrustsA
#endif // !UNICODE
//
// Only define this API if the caller has #included the pre-requisite
// ntlsa.h or ntsecapi.h
//
#if defined(_NTLSA_) || defined(_NTSECAPI_)
DSGETDCAPI DWORD WINAPI DsGetForestTrustInformationW ( IN LPCWSTR ServerName OPTIONAL, IN LPCWSTR TrustedDomainName OPTIONAL, IN DWORD Flags, OUT PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo );
#define DS_GFTI_UPDATE_TDO 0x1 // Update TDO with information returned
#define DS_GFTI_VALID_FLAGS 0x1 // All valid flags to DsGetForestTrustInformation
DSGETDCAPI DWORD WINAPI DsMergeForestTrustInformationW( IN LPCWSTR DomainName, IN PLSA_FOREST_TRUST_INFORMATION NewForestTrustInfo, IN PLSA_FOREST_TRUST_INFORMATION OldForestTrustInfo OPTIONAL, OUT PLSA_FOREST_TRUST_INFORMATION *MergedForestTrustInfo );
#endif // _NTLSA_ || _NTSECAPI_
DSGETDCAPI DWORD WINAPI DsGetDcSiteCoverageW( IN LPCWSTR ServerName OPTIONAL, OUT PULONG EntryCount, OUT LPWSTR **SiteNames );
DSGETDCAPI DWORD WINAPI DsGetDcSiteCoverageA( IN LPCSTR ServerName OPTIONAL, OUT PULONG EntryCount, OUT LPSTR **SiteNames );
#ifdef UNICODE
#define DsGetDcSiteCoverage DsGetDcSiteCoverageW
#else
#define DsGetDcSiteCoverage DsGetDcSiteCoverageA
#endif // !UNICODE
DSGETDCAPI DWORD WINAPI DsDeregisterDnsHostRecordsW ( IN LPWSTR ServerName OPTIONAL, IN LPWSTR DnsDomainName OPTIONAL, IN GUID *DomainGuid OPTIONAL, IN GUID *DsaGuid OPTIONAL, IN LPWSTR DnsHostName );
DSGETDCAPI DWORD WINAPI DsDeregisterDnsHostRecordsA ( IN LPSTR ServerName OPTIONAL, IN LPSTR DnsDomainName OPTIONAL, IN GUID *DomainGuid OPTIONAL, IN GUID *DsaGuid OPTIONAL, IN LPSTR DnsHostName );
#ifdef UNICODE
#define DsDeregisterDnsHostRecords DsDeregisterDnsHostRecordsW
#else
#define DsDeregisterDnsHostRecords DsDeregisterDnsHostRecordsA
#endif // !UNICODE
#ifdef _WINSOCK2API_ // DsGetDcOpen/Next/Close depend on winsock2.h be included
//
// Option flags passed to DsGetDcOpen
//
#define DS_ONLY_DO_SITE_NAME 0x01 // Non-site specific names should be avoided.
#define DS_NOTIFY_AFTER_SITE_RECORDS 0x02 // Return ERROR_FILEMARK_DETECTED after all
// site specific records have been processed.
#define DS_OPEN_VALID_OPTION_FLAGS ( DS_ONLY_DO_SITE_NAME | DS_NOTIFY_AFTER_SITE_RECORDS )
//
// Valid DcFlags for DsGetDcOpen
//
#define DS_OPEN_VALID_FLAGS ( \
DS_FORCE_REDISCOVERY | \ DS_ONLY_LDAP_NEEDED | \ DS_KDC_REQUIRED | \ DS_PDC_REQUIRED | \ DS_GC_SERVER_REQUIRED | \ DS_WRITABLE_REQUIRED )
DSGETDCAPI DWORD WINAPI DsGetDcOpenW( IN LPCWSTR DnsName, IN ULONG OptionFlags, IN LPCWSTR SiteName OPTIONAL, IN GUID *DomainGuid OPTIONAL, IN LPCWSTR DnsForestName OPTIONAL, IN ULONG DcFlags, OUT PHANDLE RetGetDcContext );
DSGETDCAPI DWORD WINAPI DsGetDcOpenA( IN LPCSTR DnsName, IN ULONG OptionFlags, IN LPCSTR SiteName OPTIONAL, IN GUID *DomainGuid OPTIONAL, IN LPCSTR DnsForestName OPTIONAL, IN ULONG DcFlags, OUT PHANDLE RetGetDcContext );
#ifdef UNICODE
#define DsGetDcOpen DsGetDcOpenW
#else
#define DsGetDcOpen DsGetDcOpenA
#endif // !UNICODE
DSGETDCAPI DWORD WINAPI DsGetDcNextW( IN HANDLE GetDcContextHandle, OUT PULONG SockAddressCount OPTIONAL, OUT LPSOCKET_ADDRESS *SockAddresses OPTIONAL, OUT LPWSTR *DnsHostName OPTIONAL );
DSGETDCAPI DWORD WINAPI DsGetDcNextA( IN HANDLE GetDcContextHandle, OUT PULONG SockAddressCount OPTIONAL, OUT LPSOCKET_ADDRESS *SockAddresses OPTIONAL, OUT LPSTR *DnsHostName OPTIONAL );
#ifdef UNICODE
#define DsGetDcNext DsGetDcNextW
#else
#define DsGetDcNext DsGetDcNextA
#endif // !UNICODE
DSGETDCAPI VOID WINAPI DsGetDcCloseW( IN HANDLE GetDcContextHandle );
#ifdef UNICODE
#define DsGetDcClose DsGetDcCloseW
#else
#define DsGetDcClose DsGetDcCloseW // same for ANSI
#endif // !UNICODE
#endif // _WINSOCK2API_
#ifdef __cplusplus
} #endif
#endif // _DSGETDC_
|