DsGetDC.h 15 KB

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