home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / dsgetdc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  11.6 KB  |  491 lines

  1. /*++ BUILD Version: 0001    // Increment this if a change has global effects
  2.  
  3. Copyright (c) 1996-1999  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     dsgetdc.h
  8.  
  9. Abstract:
  10.  
  11.     This file contains structures, function prototypes, and definitions
  12.     for the DsGetDcName API.
  13.  
  14. Environment:
  15.  
  16.     User Mode - Win32
  17.  
  18. Notes:
  19.  
  20. --*/
  21.  
  22.  
  23. #ifndef _DSGETDC_
  24. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  25. #define _DSGETDC_
  26.  
  27. #if _MSC_VER > 1000
  28. #pragma once
  29. #endif
  30.  
  31. #if !defined(_DSGETDCAPI_)
  32. #define DSGETDCAPI DECLSPEC_IMPORT
  33. #else
  34. #define DSGETDCAPI
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. //
  42. // Structure definitions
  43. //
  44.  
  45. //
  46. // Flags to passed to DsGetDcName
  47. //
  48.  
  49. #define DS_FORCE_REDISCOVERY            0x00000001
  50.  
  51. #define DS_DIRECTORY_SERVICE_REQUIRED   0x00000010
  52. #define DS_DIRECTORY_SERVICE_PREFERRED  0x00000020
  53. #define DS_GC_SERVER_REQUIRED           0x00000040
  54. #define DS_PDC_REQUIRED                 0x00000080
  55. #define DS_IP_REQUIRED                  0x00000200
  56. #define DS_KDC_REQUIRED                 0x00000400
  57. #define DS_TIMESERV_REQUIRED            0x00000800
  58. #define DS_WRITABLE_REQUIRED            0x00001000
  59. #define DS_GOOD_TIMESERV_PREFERRED      0x00002000
  60. #define DS_AVOID_SELF                   0x00004000
  61. #define DS_ONLY_LDAP_NEEDED             0x00008000
  62.  
  63.  
  64. #define DS_IS_FLAT_NAME                 0x00010000
  65. #define DS_IS_DNS_NAME                  0x00020000
  66.  
  67. #define DS_RETURN_DNS_NAME              0x40000000
  68. #define DS_RETURN_FLAT_NAME             0x80000000
  69.  
  70. #define DSGETDC_VALID_FLAGS ( \
  71.             DS_FORCE_REDISCOVERY | \
  72.             DS_DIRECTORY_SERVICE_REQUIRED | \
  73.             DS_DIRECTORY_SERVICE_PREFERRED | \
  74.             DS_GC_SERVER_REQUIRED | \
  75.             DS_PDC_REQUIRED | \
  76.             DS_IP_REQUIRED | \
  77.             DS_KDC_REQUIRED | \
  78.             DS_TIMESERV_REQUIRED | \
  79.             DS_WRITABLE_REQUIRED | \
  80.             DS_GOOD_TIMESERV_PREFERRED | \
  81.             DS_AVOID_SELF | \
  82.             DS_ONLY_LDAP_NEEDED | \
  83.             DS_IS_FLAT_NAME | \
  84.             DS_IS_DNS_NAME | \
  85.             DS_RETURN_FLAT_NAME  | \
  86.             DS_RETURN_DNS_NAME )
  87.  
  88.  
  89. //
  90. // Structure returned from DsGetDcName
  91. //
  92.  
  93. typedef struct _DOMAIN_CONTROLLER_INFOA {
  94.     LPSTR DomainControllerName;
  95.     LPSTR DomainControllerAddress;
  96.     ULONG DomainControllerAddressType;
  97.     GUID DomainGuid;
  98.     LPSTR DomainName;
  99.     LPSTR DnsForestName;
  100.     ULONG Flags;
  101.     LPSTR DcSiteName;
  102.     LPSTR ClientSiteName;
  103. } DOMAIN_CONTROLLER_INFOA, *PDOMAIN_CONTROLLER_INFOA;
  104.  
  105. typedef struct _DOMAIN_CONTROLLER_INFOW {
  106. #ifdef MIDL_PASS
  107.     [string,unique] wchar_t *DomainControllerName;
  108. #else // MIDL_PASS
  109.     LPWSTR DomainControllerName;
  110. #endif // MIDL_PASS
  111. #ifdef MIDL_PASS
  112.     [string,unique] wchar_t *DomainControllerAddress;
  113. #else // MIDL_PASS
  114.     LPWSTR DomainControllerAddress;
  115. #endif // MIDL_PASS
  116.     ULONG DomainControllerAddressType;
  117.     GUID DomainGuid;
  118. #ifdef MIDL_PASS
  119.     [string,unique] wchar_t *DomainName;
  120. #else // MIDL_PASS
  121.     LPWSTR DomainName;
  122. #endif // MIDL_PASS
  123. #ifdef MIDL_PASS
  124.     [string,unique] wchar_t *DnsForestName;
  125. #else // MIDL_PASS
  126.     LPWSTR DnsForestName;
  127. #endif // MIDL_PASS
  128.     ULONG Flags;
  129. #ifdef MIDL_PASS
  130.     [string,unique] wchar_t *DcSiteName;
  131. #else // MIDL_PASS
  132.     LPWSTR DcSiteName;
  133. #endif // MIDL_PASS
  134. #ifdef MIDL_PASS
  135.     [string,unique] wchar_t *ClientSiteName;
  136. #else // MIDL_PASS
  137.     LPWSTR ClientSiteName;
  138. #endif // MIDL_PASS
  139. } DOMAIN_CONTROLLER_INFOW, *PDOMAIN_CONTROLLER_INFOW;
  140.  
  141. #ifdef UNICODE
  142. #define DOMAIN_CONTROLLER_INFO DOMAIN_CONTROLLER_INFOW
  143. #define PDOMAIN_CONTROLLER_INFO PDOMAIN_CONTROLLER_INFOW
  144. #else
  145. #define DOMAIN_CONTROLLER_INFO DOMAIN_CONTROLLER_INFOA
  146. #define PDOMAIN_CONTROLLER_INFO PDOMAIN_CONTROLLER_INFOA
  147. #endif // !UNICODE
  148.  
  149. //
  150. // Values for DomainControllerAddressType
  151. //
  152.  
  153. #define DS_INET_ADDRESS    1
  154. #define DS_NETBIOS_ADDRESS 2
  155.  
  156. //
  157. // Values for returned Flags
  158. //
  159.  
  160. #define DS_PDC_FLAG            0x00000001    // DC is PDC of Domain
  161. #define DS_GC_FLAG             0x00000004    // DC is a GC of forest
  162. #define DS_LDAP_FLAG           0x00000008    // Server supports an LDAP server
  163. #define DS_DS_FLAG             0x00000010    // DC supports a DS and is a Domain Controller
  164. #define DS_KDC_FLAG            0x00000020    // DC is running KDC service
  165. #define DS_TIMESERV_FLAG       0x00000040    // DC is running time service
  166. #define DS_CLOSEST_FLAG        0x00000080    // DC is in closest site to client
  167. #define DS_WRITABLE_FLAG       0x00000100    // DC has a writable DS
  168. #define DS_GOOD_TIMESERV_FLAG  0x00000200    // DC is running time service (and has clock hardware)
  169. #define DS_PING_FLAGS          0x0000FFFF    // Flags returned on ping
  170.  
  171. #define DS_DNS_CONTROLLER_FLAG 0x20000000    // DomainControllerName is a DNS name
  172. #define DS_DNS_DOMAIN_FLAG     0x40000000    // DomainName is a DNS name
  173. #define DS_DNS_FOREST_FLAG     0x80000000    // DnsForestName is a DNS name
  174.  
  175.  
  176. //
  177. // Function Prototypes
  178. //
  179.  
  180. DSGETDCAPI
  181. DWORD
  182. WINAPI
  183. DsGetDcNameA(
  184.     IN LPCSTR ComputerName OPTIONAL,
  185.     IN LPCSTR DomainName OPTIONAL,
  186.     IN GUID *DomainGuid OPTIONAL,
  187.     IN LPCSTR SiteName OPTIONAL,
  188.     IN ULONG Flags,
  189.     OUT PDOMAIN_CONTROLLER_INFOA *DomainControllerInfo
  190. );
  191.  
  192. DSGETDCAPI
  193. DWORD
  194. WINAPI
  195. DsGetDcNameW(
  196.     IN LPCWSTR ComputerName OPTIONAL,
  197.     IN LPCWSTR DomainName OPTIONAL,
  198.     IN GUID *DomainGuid OPTIONAL,
  199.     IN LPCWSTR SiteName OPTIONAL,
  200.     IN ULONG Flags,
  201.     OUT PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo
  202. );
  203.  
  204. #ifdef UNICODE
  205. #define DsGetDcName DsGetDcNameW
  206. #else
  207. #define DsGetDcName DsGetDcNameA
  208. #endif // !UNICODE
  209.  
  210. DSGETDCAPI
  211. DWORD
  212. WINAPI
  213. DsGetSiteNameA(
  214.     IN LPCSTR ComputerName OPTIONAL,
  215.     OUT LPSTR *SiteName
  216. );
  217.  
  218. DSGETDCAPI
  219. DWORD
  220. WINAPI
  221. DsGetSiteNameW(
  222.     IN LPCWSTR ComputerName OPTIONAL,
  223.     OUT LPWSTR *SiteName
  224. );
  225.  
  226. #ifdef UNICODE
  227. #define DsGetSiteName DsGetSiteNameW
  228. #else
  229. #define DsGetSiteName DsGetSiteNameA
  230. #endif // !UNICODE
  231.  
  232.  
  233. DSGETDCAPI
  234. DWORD
  235. WINAPI
  236. DsValidateSubnetNameW(
  237.     IN LPCWSTR SubnetName
  238. );
  239.  
  240. DSGETDCAPI
  241. DWORD
  242. WINAPI
  243. DsValidateSubnetNameA(
  244.     IN LPCSTR SubnetName
  245. );
  246.  
  247. #ifdef UNICODE
  248. #define DsValidateSubnetName DsValidateSubnetNameW
  249. #else
  250. #define DsValidateSubnetName DsValidateSubnetNameA
  251. #endif // !UNICODE
  252.  
  253.  
  254. //
  255. // Only include if winsock2.h has been included
  256. //
  257. #ifdef _WINSOCK2API_
  258. DSGETDCAPI
  259. DWORD
  260. WINAPI
  261. DsAddressToSiteNamesW(
  262.     IN LPCWSTR ComputerName OPTIONAL,
  263.     IN DWORD EntryCount,
  264.     IN PSOCKET_ADDRESS SocketAddresses,
  265.     OUT LPWSTR **SiteNames
  266.     );
  267.  
  268. DSGETDCAPI
  269. DWORD
  270. WINAPI
  271. DsAddressToSiteNamesA(
  272.     IN LPCSTR ComputerName OPTIONAL,
  273.     IN DWORD EntryCount,
  274.     IN PSOCKET_ADDRESS SocketAddresses,
  275.     OUT LPSTR **SiteNames
  276.     );
  277.  
  278. #ifdef UNICODE
  279. #define DsAddressToSiteNames DsAddressToSiteNamesW
  280. #else
  281. #define DsAddressToSiteNames DsAddressToSiteNamesA
  282. #endif // !UNICODE
  283.  
  284. DSGETDCAPI
  285. DWORD
  286. WINAPI
  287. DsAddressToSiteNamesExW(
  288.     IN LPCWSTR ComputerName OPTIONAL,
  289.     IN DWORD EntryCount,
  290.     IN PSOCKET_ADDRESS SocketAddresses,
  291.     OUT LPWSTR **SiteNames,
  292.     OUT LPWSTR **SubnetNames
  293.     );
  294.  
  295. DSGETDCAPI
  296. DWORD
  297. WINAPI
  298. DsAddressToSiteNamesExA(
  299.     IN LPCSTR ComputerName OPTIONAL,
  300.     IN DWORD EntryCount,
  301.     IN PSOCKET_ADDRESS SocketAddresses,
  302.     OUT LPSTR **SiteNames,
  303.     OUT LPSTR **SubnetNames
  304.     );
  305.  
  306. #ifdef UNICODE
  307. #define DsAddressToSiteNamesEx DsAddressToSiteNamesExW
  308. #else
  309. #define DsAddressToSiteNamesEx DsAddressToSiteNamesExA
  310. #endif // !UNICODE
  311. #endif // _WINSOCK2API_
  312.  
  313. //
  314. // API to enumerate trusted domains
  315. //
  316.  
  317. typedef struct _DS_DOMAIN_TRUSTSW {
  318.  
  319.     //
  320.     // Name of the trusted domain.
  321.     //
  322. #ifdef MIDL_PASS
  323.     [string] wchar_t * NetbiosDomainName;
  324.     [string] wchar_t * DnsDomainName;
  325. #else // MIDL_PASS
  326.     LPWSTR NetbiosDomainName;
  327.     LPWSTR DnsDomainName;
  328. #endif // MIDL_PASS
  329.  
  330.  
  331.     //
  332.     // Flags defining attributes of the trust.
  333.     //
  334.     ULONG Flags;
  335. #define DS_DOMAIN_IN_FOREST           0x0001  // Domain is a member of the forest
  336. #define DS_DOMAIN_DIRECT_OUTBOUND     0x0002  // Domain is directly trusted
  337. #define DS_DOMAIN_TREE_ROOT           0x0004  // Domain is root of a tree in the forest
  338. #define DS_DOMAIN_PRIMARY             0x0008  // Domain is the primary domain of queried server
  339. #define DS_DOMAIN_NATIVE_MODE         0x0010  // Primary domain is running in native mode
  340. #define DS_DOMAIN_DIRECT_INBOUND      0x0020  // Domain is directly trusting
  341. #define DS_DOMAIN_VALID_FLAGS (         \
  342.             DS_DOMAIN_IN_FOREST       | \
  343.             DS_DOMAIN_DIRECT_OUTBOUND | \
  344.             DS_DOMAIN_TREE_ROOT       | \
  345.             DS_DOMAIN_PRIMARY         | \
  346.             DS_DOMAIN_NATIVE_MODE     | \
  347.             DS_DOMAIN_DIRECT_INBOUND )
  348.  
  349.     //
  350.     // Index to the domain that is the parent of this domain.
  351.     //  Only defined if NETLOGON_DOMAIN_IN_FOREST is set and
  352.     //      NETLOGON_DOMAIN_TREE_ROOT is not set.
  353.     //
  354.     ULONG ParentIndex;
  355.  
  356.     //
  357.     // The trust type and attributes of this trust.
  358.     //
  359.     // If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set,
  360.     //  these value are infered.
  361.     //
  362.     ULONG TrustType;
  363.     ULONG TrustAttributes;
  364.  
  365.     //
  366.     // The SID of the trusted domain.
  367.     //
  368.     // If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set,
  369.     //  this value will be NULL.
  370.     //
  371. #if defined(MIDL_PASS)
  372.     PISID DomainSid;
  373. #else
  374.     PSID DomainSid;
  375. #endif
  376.  
  377.     //
  378.     // The GUID of the trusted domain.
  379.     //
  380.  
  381.     GUID DomainGuid;
  382.  
  383. } DS_DOMAIN_TRUSTSW, *PDS_DOMAIN_TRUSTSW;
  384.  
  385. //
  386. // ANSI version of the above struct
  387. //
  388. typedef struct _DS_DOMAIN_TRUSTSA {
  389.     LPSTR NetbiosDomainName;
  390.     LPSTR DnsDomainName;
  391.     ULONG Flags;
  392.     ULONG ParentIndex;
  393.     ULONG TrustType;
  394.     ULONG TrustAttributes;
  395.     PSID DomainSid;
  396.     GUID DomainGuid;
  397. } DS_DOMAIN_TRUSTSA, *PDS_DOMAIN_TRUSTSA;
  398.  
  399. #ifdef UNICODE
  400. #define DS_DOMAIN_TRUSTS DS_DOMAIN_TRUSTSW
  401. #define PDS_DOMAIN_TRUSTS PDS_DOMAIN_TRUSTSW
  402. #else
  403. #define DS_DOMAIN_TRUSTS DS_DOMAIN_TRUSTSA
  404. #define PDS_DOMAIN_TRUSTS PDS_DOMAIN_TRUSTSA
  405. #endif // !UNICODE
  406.  
  407. DSGETDCAPI
  408. DWORD
  409. WINAPI
  410. DsEnumerateDomainTrustsW (
  411.     IN LPWSTR ServerName OPTIONAL,
  412.     IN ULONG Flags,
  413.     OUT PDS_DOMAIN_TRUSTSW *Domains,
  414.     OUT PULONG DomainCount
  415.     );
  416.  
  417. DSGETDCAPI
  418. DWORD
  419. WINAPI
  420. DsEnumerateDomainTrustsA (
  421.     IN LPSTR ServerName OPTIONAL,
  422.     IN ULONG Flags,
  423.     OUT PDS_DOMAIN_TRUSTSA *Domains,
  424.     OUT PULONG DomainCount
  425.     );
  426.  
  427. #ifdef UNICODE
  428. #define DsEnumerateDomainTrusts DsEnumerateDomainTrustsW
  429. #else
  430. #define DsEnumerateDomainTrusts DsEnumerateDomainTrustsA
  431. #endif // !UNICODE
  432.  
  433. DSGETDCAPI
  434. DWORD
  435. WINAPI
  436. DsGetDcSiteCoverageW(
  437.     IN LPCWSTR ServerName OPTIONAL,
  438.     OUT PULONG EntryCount,
  439.     OUT LPWSTR **SiteNames
  440.     );
  441.  
  442. DSGETDCAPI
  443. DWORD
  444. WINAPI
  445. DsGetDcSiteCoverageA(
  446.     IN LPCSTR ServerName OPTIONAL,
  447.     OUT PULONG EntryCount,
  448.     OUT LPSTR **SiteNames
  449.     );
  450.  
  451. #ifdef UNICODE
  452. #define DsGetDcSiteCoverage DsGetDcSiteCoverageW
  453. #else
  454. #define DsGetDcSiteCoverage DsGetDcSiteCoverageA
  455. #endif // !UNICODE
  456.  
  457. DSGETDCAPI
  458. DWORD
  459. WINAPI
  460. DsDeregisterDnsHostRecordsW (
  461.     IN LPWSTR ServerName OPTIONAL,
  462.     IN LPWSTR DnsDomainName OPTIONAL,
  463.     IN GUID   *DomainGuid OPTIONAL,
  464.     IN GUID   *DsaGuid OPTIONAL,
  465.     IN LPWSTR DnsHostName
  466.     );
  467.  
  468. DSGETDCAPI
  469. DWORD
  470. WINAPI
  471. DsDeregisterDnsHostRecordsA (
  472.     IN LPSTR ServerName OPTIONAL,
  473.     IN LPSTR DnsDomainName OPTIONAL,
  474.     IN GUID  *DomainGuid OPTIONAL,
  475.     IN GUID  *DsaGuid OPTIONAL,
  476.     IN LPSTR DnsHostName
  477.     );
  478.  
  479. #ifdef UNICODE
  480. #define DsDeregisterDnsHostRecords DsDeregisterDnsHostRecordsW
  481. #else
  482. #define DsDeregisterDnsHostRecords DsDeregisterDnsHostRecordsA
  483. #endif // !UNICODE
  484.  
  485. #ifdef __cplusplus
  486. }
  487. #endif
  488.  
  489. #pragma option pop /*P_O_Pop*/
  490. #endif // _DSGETDC_
  491.