JwaDSGetDc.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:38k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Directory Services API interface Unit for Object Pascal                      }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  8. { The original file is: dsgetdc.h, released June 2000. The original Pascal     }
  9. { code is: DsGetDc.pas, released December 2000. The initial developer of the   }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  16. {                }
  17. { You may retrieve the latest version of this file at the Project JEDI home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaDSGetDc;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "DsGetDC.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaNtSecApi, JwaWinNT, JwaWinType;
  52. //
  53. // Structure definitions
  54. //
  55. //
  56. // Flags to passed to DsGetDcName
  57. //
  58. const
  59.   DS_FORCE_REDISCOVERY = $00000001;
  60.   {$EXTERNALSYM DS_FORCE_REDISCOVERY}
  61.   DS_DIRECTORY_SERVICE_REQUIRED  = $00000010;
  62.   {$EXTERNALSYM DS_DIRECTORY_SERVICE_REQUIRED}
  63.   DS_DIRECTORY_SERVICE_PREFERRED = $00000020;
  64.   {$EXTERNALSYM DS_DIRECTORY_SERVICE_PREFERRED}
  65.   DS_GC_SERVER_REQUIRED          = $00000040;
  66.   {$EXTERNALSYM DS_GC_SERVER_REQUIRED}
  67.   DS_PDC_REQUIRED                = $00000080;
  68.   {$EXTERNALSYM DS_PDC_REQUIRED}
  69.   DS_BACKGROUND_ONLY             = $00000100;
  70.   {$EXTERNALSYM DS_BACKGROUND_ONLY}
  71.   DS_IP_REQUIRED                 = $00000200;
  72.   {$EXTERNALSYM DS_IP_REQUIRED}
  73.   DS_KDC_REQUIRED                = $00000400;
  74.   {$EXTERNALSYM DS_KDC_REQUIRED}
  75.   DS_TIMESERV_REQUIRED           = $00000800;
  76.   {$EXTERNALSYM DS_TIMESERV_REQUIRED}
  77.   DS_WRITABLE_REQUIRED           = $00001000;
  78.   {$EXTERNALSYM DS_WRITABLE_REQUIRED}
  79.   DS_GOOD_TIMESERV_PREFERRED     = $00002000;
  80.   {$EXTERNALSYM DS_GOOD_TIMESERV_PREFERRED}
  81.   DS_AVOID_SELF                  = $00004000;
  82.   {$EXTERNALSYM DS_AVOID_SELF}
  83.   DS_ONLY_LDAP_NEEDED            = $00008000;
  84.   {$EXTERNALSYM DS_ONLY_LDAP_NEEDED}
  85.   DS_IS_FLAT_NAME = $00010000;
  86.   {$EXTERNALSYM DS_IS_FLAT_NAME}
  87.   DS_IS_DNS_NAME  = $00020000;
  88.   {$EXTERNALSYM DS_IS_DNS_NAME}
  89.   DS_RETURN_DNS_NAME  = $40000000;
  90.   {$EXTERNALSYM DS_RETURN_DNS_NAME}
  91.   DS_RETURN_FLAT_NAME = DWORD($80000000);
  92.   {$EXTERNALSYM DS_RETURN_FLAT_NAME}
  93.   DSGETDC_VALID_FLAGS =
  94.     DS_FORCE_REDISCOVERY or
  95.     DS_DIRECTORY_SERVICE_REQUIRED or
  96.     DS_DIRECTORY_SERVICE_PREFERRED or
  97.     DS_GC_SERVER_REQUIRED or
  98.     DS_PDC_REQUIRED or
  99.     DS_BACKGROUND_ONLY or
  100.     DS_IP_REQUIRED or
  101.     DS_KDC_REQUIRED or
  102.     DS_TIMESERV_REQUIRED or
  103.     DS_WRITABLE_REQUIRED or
  104.     DS_GOOD_TIMESERV_PREFERRED or
  105.     DS_AVOID_SELF or
  106.     DS_ONLY_LDAP_NEEDED or
  107.     DS_IS_FLAT_NAME or
  108.     DS_IS_DNS_NAME or
  109.     DS_RETURN_FLAT_NAME or
  110.     DS_RETURN_DNS_NAME;
  111.   {$EXTERNALSYM DSGETDC_VALID_FLAGS}
  112. //
  113. // Structure returned from DsGetDcName
  114. //
  115. type
  116.   PDOMAIN_CONTROLLER_INFOA = ^DOMAIN_CONTROLLER_INFOA;
  117.   {$EXTERNALSYM PDOMAIN_CONTROLLER_INFOA}
  118.   _DOMAIN_CONTROLLER_INFOA = record
  119.     DomainControllerName: LPSTR;
  120.     DomainControllerAddress: LPSTR;
  121.     DomainControllerAddressType: ULONG;
  122.     DomainGuid: GUID;
  123.     DomainName: LPSTR;
  124.     DnsForestName: LPSTR;
  125.     Flags: ULONG;
  126.     DcSiteName: LPSTR;
  127.     ClientSiteName: LPSTR;
  128.   end;
  129.   {$EXTERNALSYM _DOMAIN_CONTROLLER_INFOA}
  130.   DOMAIN_CONTROLLER_INFOA = _DOMAIN_CONTROLLER_INFOA;
  131.   {$EXTERNALSYM DOMAIN_CONTROLLER_INFOA}
  132.   TDomainControllerInfoA = DOMAIN_CONTROLLER_INFOA;
  133.   PDomainControllerInfoA = PDOMAIN_CONTROLLER_INFOA;
  134.   PDOMAIN_CONTROLLER_INFOW = ^DOMAIN_CONTROLLER_INFOW;
  135.   {$EXTERNALSYM PDOMAIN_CONTROLLER_INFOW}
  136.   _DOMAIN_CONTROLLER_INFOW = record
  137.     DomainControllerName: LPWSTR;
  138.     DomainControllerAddress: LPWSTR;
  139.     DomainControllerAddressType: ULONG;
  140.     DomainGuid: GUID;
  141.     DomainName: LPWSTR;
  142.     DnsForestName: LPWSTR;
  143.     Flags: ULONG;
  144.     DcSiteName: LPWSTR;
  145.     ClientSiteName: LPWSTR;
  146.   end;
  147.   {$EXTERNALSYM _DOMAIN_CONTROLLER_INFOW}
  148.   DOMAIN_CONTROLLER_INFOW = _DOMAIN_CONTROLLER_INFOW;
  149.   {$EXTERNALSYM DOMAIN_CONTROLLER_INFOW}
  150.   TDomainControllerInfoW = DOMAIN_CONTROLLER_INFOW;
  151.   PDomainControllerInfoW = PDOMAIN_CONTROLLER_INFOW;
  152. {$IFDEF UNICODE}
  153.   DOMAIN_CONTROLLER_INFO = DOMAIN_CONTROLLER_INFOW;
  154.   {$EXTERNALSYM DOMAIN_CONTROLLER_INFO}
  155.   PDOMAIN_CONTROLLER_INFO = PDOMAIN_CONTROLLER_INFOW;
  156.   {$EXTERNALSYM PDOMAIN_CONTROLLER_INFO}
  157.   TDomainControllerInfo = TDomainControllerInfoW;
  158.   PDomainControllerInfo = PDomainControllerInfoW;
  159. {$ELSE}
  160.   DOMAIN_CONTROLLER_INFO = DOMAIN_CONTROLLER_INFOA;
  161.   {$EXTERNALSYM DOMAIN_CONTROLLER_INFO}
  162.   PDOMAIN_CONTROLLER_INFO = PDOMAIN_CONTROLLER_INFOA;
  163.   {$EXTERNALSYM PDOMAIN_CONTROLLER_INFO}
  164.   TDomainControllerInfo = TDomainControllerInfoA;
  165.   PDomainControllerInfo = PDomainControllerInfoA;
  166. {$ENDIF}
  167. //
  168. // Values for DomainControllerAddressType
  169. //
  170. const
  171.   DS_INET_ADDRESS    = 1;
  172.   {$EXTERNALSYM DS_INET_ADDRESS}
  173.   DS_NETBIOS_ADDRESS = 2;
  174.   {$EXTERNALSYM DS_NETBIOS_ADDRESS}
  175. //
  176. // Values for returned Flags
  177. //
  178.   DS_PDC_FLAG           = $00000001; // DC is PDC of Domain
  179.   {$EXTERNALSYM DS_PDC_FLAG}
  180.   DS_GC_FLAG            = $00000004; // DC is a GC of forest
  181.   {$EXTERNALSYM DS_GC_FLAG}
  182.   DS_LDAP_FLAG          = $00000008; // Server supports an LDAP server
  183.   {$EXTERNALSYM DS_LDAP_FLAG}
  184.   DS_DS_FLAG            = $00000010; // DC supports a DS and is a Domain Controller
  185.   {$EXTERNALSYM DS_DS_FLAG}
  186.   DS_KDC_FLAG           = $00000020; // DC is running KDC service
  187.   {$EXTERNALSYM DS_KDC_FLAG}
  188.   DS_TIMESERV_FLAG      = $00000040; // DC is running time service
  189.   {$EXTERNALSYM DS_TIMESERV_FLAG}
  190.   DS_CLOSEST_FLAG       = $00000080; // DC is in closest site to client
  191.   {$EXTERNALSYM DS_CLOSEST_FLAG}
  192.   DS_WRITABLE_FLAG      = $00000100; // DC has a writable DS
  193.   {$EXTERNALSYM DS_WRITABLE_FLAG}
  194.   DS_GOOD_TIMESERV_FLAG = $00000200; // DC is running time service (and has clock hardware)
  195.   {$EXTERNALSYM DS_GOOD_TIMESERV_FLAG}
  196.   DS_NDNC_FLAG          = $00000400; // DomainName is non-domain NC serviced by the LDAP server
  197.   {$EXTERNALSYM DS_NDNC_FLAG}
  198.   DS_PING_FLAGS         = $0000FFFF; // Flags returned on ping
  199.   {$EXTERNALSYM DS_PING_FLAGS}
  200.   DS_DNS_CONTROLLER_FLAG = $20000000; // DomainControllerName is a DNS name
  201.   {$EXTERNALSYM DS_DNS_CONTROLLER_FLAG}
  202.   DS_DNS_DOMAIN_FLAG     = $40000000; // DomainName is a DNS name
  203.   {$EXTERNALSYM DS_DNS_DOMAIN_FLAG}
  204.   DS_DNS_FOREST_FLAG     = DWORD($80000000); // DnsForestName is a DNS name
  205.   {$EXTERNALSYM DS_DNS_FOREST_FLAG}
  206. //
  207. // Function Prototypes
  208. //
  209. function DsGetDcNameA(ComputerName, DomainName: LPCSTR; DomainGuid: LPGUID;
  210.   SiteName: LPCSTR; Flags: ULONG; var DomainControllerInfo: PDOMAIN_CONTROLLER_INFOA): DWORD; stdcall;
  211. {$EXTERNALSYM DsGetDcNameA}
  212. function DsGetDcNameW(ComputerName, DomainName: LPCWSTR; DomainGuid: LPGUID;
  213.   SiteName: LPCWSTR; Flags: ULONG; var DomainControllerInfo: PDOMAIN_CONTROLLER_INFOW): DWORD; stdcall;
  214. {$EXTERNALSYM DsGetDcNameW}
  215. {$IFDEF UNICODE}
  216. function DsGetDcName(ComputerName, DomainName: LPCWSTR; DomainGuid: LPGUID;
  217.   SiteName: LPCWSTR; Flags: ULONG; var DomainControllerInfo: PDOMAIN_CONTROLLER_INFOW): DWORD; stdcall;
  218. {$EXTERNALSYM DsGetDcName}
  219. {$ELSE}
  220. function DsGetDcName(ComputerName, DomainName: LPCSTR; DomainGuid: LPGUID;
  221.   SiteName: LPCSTR; Flags: ULONG; var DomainControllerInfo: PDOMAIN_CONTROLLER_INFOA): DWORD; stdcall;
  222. {$EXTERNALSYM DsGetDcName}
  223. {$ENDIF}
  224. function DsGetSiteNameA(ComputerName: LPCSTR; var SiteName: LPSTR): DWORD; stdcall;
  225. {$EXTERNALSYM DsGetSiteNameA}
  226. function DsGetSiteNameW(ComputerName: LPCWSTR; var SiteName: LPWSTR): DWORD; stdcall;
  227. {$EXTERNALSYM DsGetSiteNameW}
  228. {$IFDEF UNICODE}
  229. function DsGetSiteName(ComputerName: LPCWSTR; var SiteName: LPWSTR): DWORD; stdcall;
  230. {$EXTERNALSYM DsGetSiteName}
  231. {$ELSE}
  232. function DsGetSiteName(ComputerName: LPCSTR; var SiteName: LPSTR): DWORD; stdcall;
  233. {$EXTERNALSYM DsGetSiteName}
  234. {$ENDIF}
  235. function DsValidateSubnetNameA(SubnetName: LPCSTR): DWORD; stdcall;
  236. {$EXTERNALSYM DsValidateSubnetNameA}
  237. function DsValidateSubnetNameW(SubnetName: LPCWSTR): DWORD; stdcall;
  238. {$EXTERNALSYM DsValidateSubnetNameW}
  239. {$IFDEF UNICODE}
  240. function DsValidateSubnetName(SubnetName: LPCWSTR): DWORD; stdcall;
  241. {$EXTERNALSYM DsValidateSubnetName}
  242. {$ELSE}
  243. function DsValidateSubnetName(SubnetName: LPCSTR): DWORD; stdcall;
  244. {$EXTERNALSYM DsValidateSubnetName}
  245. {$ENDIF}
  246. //
  247. // Only include if winsock2.h has been included
  248. //
  249. // Types from Winsock2.h 
  250. type
  251.   sockaddr = record
  252.     sa_family: Word;              // address family
  253.     sa_data: array [0..13]of Char;   // up to 14 bytes of direct address
  254.   end;
  255.   {$EXTERNALSYM sockaddr}
  256.   PSOCKADDR = ^SOCKADDR;
  257.   {$EXTERNALSYM PSOCKADDR}
  258.   LPSOCKADDR = PSOCKADDR;
  259.   {$EXTERNALSYM LPSOCKADDR}
  260.   _SOCKET_ADDRESS = record
  261.     lpSockaddr: LPSOCKADDR;
  262.     iSockaddrLength: Integer;
  263.   end;
  264.   {$EXTERNALSYM _SOCKET_ADDRESS}
  265.   SOCKET_ADDRESS = _SOCKET_ADDRESS;
  266.   {$EXTERNALSYM SOCKET_ADDRESS}
  267.   PSOCKET_ADDRESS = ^SOCKET_ADDRESS;
  268.   {$EXTERNALSYM PSOCKET_ADDRESS}
  269.   LPSOCKET_ADDRESS = PSOCKET_ADDRESS;
  270.   {$EXTERNALSYM LPSOCKET_ADDRESS}
  271.   TSocketAddress = SOCKET_ADDRESS;
  272.   PSocketAddress = LPSOCKET_ADDRESS;
  273. function DsAddressToSiteNamesA(ComputerName: LPCSTR; EntryCount: DWORD;
  274.   SocketAddresses: PSOCKET_ADDRESS; var SiteNames: PPChar): DWORD; stdcall;
  275. {$EXTERNALSYM DsAddressToSiteNamesA}
  276. function DsAddressToSiteNamesW(ComputerName: LPCWSTR; EntryCount: DWORD;
  277.   SocketAddresses: PSOCKET_ADDRESS; var SiteNames: PPWideChar): DWORD; stdcall;
  278. {$EXTERNALSYM DsAddressToSiteNamesW}
  279. {$IFDEF UNICODE}
  280. function DsAddressToSiteNames(ComputerName: LPCWSTR; EntryCount: DWORD;
  281.   SocketAddresses: PSOCKET_ADDRESS; var SiteNames: PPWideChar): DWORD; stdcall;
  282. {$EXTERNALSYM DsAddressToSiteNames}
  283. {$ELSE}
  284. function DsAddressToSiteNames(ComputerName: LPCSTR; EntryCount: DWORD;
  285.   SocketAddresses: PSOCKET_ADDRESS; var SiteNames: PPChar): DWORD; stdcall;
  286. {$EXTERNALSYM DsAddressToSiteNames}
  287. {$ENDIF}
  288. function DsAddressToSiteNamesExA(ComputerName: LPCSTR; EntryCount: DWORD;
  289.   SocketAddresses: PSOCKET_ADDRESS; var SiteNames, SubnetNames: PPChar): DWORD; stdcall;
  290. {$EXTERNALSYM DsAddressToSiteNamesExA}
  291. function DsAddressToSiteNamesExW(ComputerName: LPCWSTR; EntryCount: DWORD;
  292.   SocketAddresses: PSOCKET_ADDRESS; var SiteNames, SubnetNames: PPWideChar): DWORD; stdcall;
  293. {$EXTERNALSYM DsAddressToSiteNamesExW}
  294. {$IFDEF UNICODE}
  295. function DsAddressToSiteNamesEx(ComputerName: LPCWSTR; EntryCount: DWORD;
  296.   SocketAddresses: PSOCKET_ADDRESS; var SiteNames, SubnetNames: PPWideChar): DWORD; stdcall;
  297. {$EXTERNALSYM DsAddressToSiteNamesEx}
  298. {$ELSE}
  299. function DsAddressToSiteNamesEx(ComputerName: LPCSTR; EntryCount: DWORD;
  300.   SocketAddresses: PSOCKET_ADDRESS; var SiteNames, SubnetNames: PPChar): DWORD; stdcall;
  301. {$EXTERNALSYM DsAddressToSiteNamesEx}
  302. {$ENDIF}
  303. //
  304. // API to enumerate trusted domains
  305. //
  306. const
  307.   DS_DOMAIN_IN_FOREST       = $0001; // Domain is a member of the forest
  308.   {$EXTERNALSYM DS_DOMAIN_IN_FOREST}
  309.   DS_DOMAIN_DIRECT_OUTBOUND = $0002; // Domain is directly trusted
  310.   {$EXTERNALSYM DS_DOMAIN_DIRECT_OUTBOUND}
  311.   DS_DOMAIN_TREE_ROOT       = $0004; // Domain is root of a tree in the forest
  312.   {$EXTERNALSYM DS_DOMAIN_TREE_ROOT}
  313.   DS_DOMAIN_PRIMARY         = $0008; // Domain is the primary domain of queried server
  314.   {$EXTERNALSYM DS_DOMAIN_PRIMARY}
  315.   DS_DOMAIN_NATIVE_MODE     = $0010; // Primary domain is running in native mode
  316.   {$EXTERNALSYM DS_DOMAIN_NATIVE_MODE}
  317.   DS_DOMAIN_DIRECT_INBOUND  = $0020; // Domain is directly trusting
  318.   {$EXTERNALSYM DS_DOMAIN_DIRECT_INBOUND}
  319.   DS_DOMAIN_VALID_FLAGS = DS_DOMAIN_IN_FOREST or DS_DOMAIN_DIRECT_OUTBOUND or
  320.     DS_DOMAIN_TREE_ROOT or DS_DOMAIN_PRIMARY or DS_DOMAIN_NATIVE_MODE or
  321.     DS_DOMAIN_DIRECT_INBOUND;
  322.   {$EXTERNALSYM DS_DOMAIN_VALID_FLAGS}
  323. type
  324.   PDS_DOMAIN_TRUSTSW = ^DS_DOMAIN_TRUSTSW;
  325.   {$EXTERNALSYM PDS_DOMAIN_TRUSTSW}
  326.   _DS_DOMAIN_TRUSTSW = record
  327.     //
  328.     // Name of the trusted domain.
  329.     //
  330.     NetbiosDomainName: LPWSTR;
  331.     DnsDomainName: LPWSTR;
  332.     //
  333.     // Flags defining attributes of the trust.
  334.     //
  335.     Flags: ULONG;
  336.     //
  337.     // Index to the domain that is the parent of this domain.
  338.     //  Only defined if NETLOGON_DOMAIN_IN_FOREST is set and
  339.     //      NETLOGON_DOMAIN_TREE_ROOT is not set.
  340.     //
  341.     ParentIndex: ULONG;
  342.     //
  343.     // The trust type and attributes of this trust.
  344.     //
  345.     // If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set,
  346.     //  these value are infered.
  347.     //
  348.     TrustType: ULONG;
  349.     TrustAttributes: ULONG;
  350.     //
  351.     // The SID of the trusted domain.
  352.     //
  353.     // If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set,
  354.     //  this value will be NULL.
  355.     //
  356.     DomainSid: PSID;
  357.     //
  358.     // The GUID of the trusted domain.
  359.     //
  360.     DomainGuid: GUID;
  361.   end;
  362.   {$EXTERNALSYM _DS_DOMAIN_TRUSTSW}
  363.   DS_DOMAIN_TRUSTSW = _DS_DOMAIN_TRUSTSW;
  364.   {$EXTERNALSYM DS_DOMAIN_TRUSTSW}
  365.   TDsDomainTrustsW = DS_DOMAIN_TRUSTSW;
  366.   PDsDomainTrustsW = PDS_DOMAIN_TRUSTSW;
  367. //
  368. // ANSI version of the above struct
  369. //
  370.   PDS_DOMAIN_TRUSTSA = ^DS_DOMAIN_TRUSTSA;
  371.   {$EXTERNALSYM PDS_DOMAIN_TRUSTSA}
  372.   _DS_DOMAIN_TRUSTSA = record
  373.     NetbiosDomainName: LPSTR;
  374.     DnsDomainName: LPSTR;
  375.     Flags: ULONG;
  376.     ParentIndex: ULONG;
  377.     TrustType: ULONG;
  378.     TrustAttributes: ULONG;
  379.     DomainSid: PSID;
  380.     DomainGuid: GUID;
  381.   end;
  382.   {$EXTERNALSYM _DS_DOMAIN_TRUSTSA}
  383.   DS_DOMAIN_TRUSTSA = _DS_DOMAIN_TRUSTSA;
  384.   {$EXTERNALSYM DS_DOMAIN_TRUSTSA}
  385.   TDsDomainTrustsA = DS_DOMAIN_TRUSTSA;
  386.   PDsDomainTrustsA = PDS_DOMAIN_TRUSTSA;
  387. {$IFDEF UNICODE}
  388.   DS_DOMAIN_TRUSTS = DS_DOMAIN_TRUSTSW;
  389.   {$EXTERNALSYM DS_DOMAIN_TRUSTS}
  390.   PDS_DOMAIN_TRUSTS = PDS_DOMAIN_TRUSTSW;
  391.   {$EXTERNALSYM PDS_DOMAIN_TRUSTS}
  392.   TDsDomainTrusts = TDsDomainTrustsW;
  393.   PDsDomainTrusts = PDsDomainTrustsW;
  394. {$ELSE}
  395.   DS_DOMAIN_TRUSTS = DS_DOMAIN_TRUSTSA;
  396.   {$EXTERNALSYM DS_DOMAIN_TRUSTS}
  397.   PDS_DOMAIN_TRUSTS = PDS_DOMAIN_TRUSTSA;
  398.   {$EXTERNALSYM PDS_DOMAIN_TRUSTS}
  399.   TDsDomainTrusts = TDsDomainTrustsA;
  400.   PDsDomainTrusts = PDsDomainTrustsA;
  401. {$ENDIF}
  402. function DsEnumerateDomainTrustsA(ServerName: LPSTR; Flags: ULONG;
  403.   var Domains: PDS_DOMAIN_TRUSTSA; var DomainCount: ULONG): DWORD; stdcall;
  404. {$EXTERNALSYM DsEnumerateDomainTrustsA}
  405. function DsEnumerateDomainTrustsW(ServerName: LPWSTR; Flags: ULONG;
  406.   var Domains: PDS_DOMAIN_TRUSTSW; var DomainCount: ULONG): DWORD; stdcall;
  407. {$EXTERNALSYM DsEnumerateDomainTrustsW}
  408. {$IFDEF UNICODE}
  409. function DsEnumerateDomainTrusts(ServerName: LPWSTR; Flags: ULONG;
  410.   var Domains: PDS_DOMAIN_TRUSTSW; var DomainCount: ULONG): DWORD; stdcall;
  411. {$EXTERNALSYM DsEnumerateDomainTrusts}
  412. {$ELSE}
  413. function DsEnumerateDomainTrusts(ServerName: LPSTR; Flags: ULONG;
  414.   var Domains: PDS_DOMAIN_TRUSTSA; var DomainCount: ULONG): DWORD; stdcall;
  415. {$EXTERNALSYM DsEnumerateDomainTrusts}
  416. {$ENDIF}
  417. //
  418. // Only define this API if the caller has #included the pre-requisite ntlsa.h
  419. function DsGetForestTrustInformationW(ServerName, TrustedDomainName: LPCWSTR;
  420.   Flags: DWORD; var ForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION): DWORD; stdcall;
  421. {$EXTERNALSYM DsGetForestTrustInformationW}
  422. const
  423.   DS_GFTI_UPDATE_TDO    = $1;     // Update TDO with information returned
  424.   {$EXTERNALSYM DS_GFTI_UPDATE_TDO}
  425.   DS_GFTI_VALID_FLAGS   = $1;     // All valid flags to DsGetForestTrustInformation
  426.   {$EXTERNALSYM DS_GFTI_VALID_FLAGS}
  427. function DsMergeForestTrustInformationW(DomainName: LPCWSTR; NewForestTrustInfo,
  428.   OldForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION;
  429.   var MergedForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION): DWORD; stdcall;
  430. {$EXTERNALSYM DsMergeForestTrustInformationW}
  431. function DsGetDcSiteCoverageA(ServerName: LPCSTR; var EntryCount: ULONG;
  432.   var SiteNames: PPChar): DWORD; stdcall;
  433. {$EXTERNALSYM DsGetDcSiteCoverageA}
  434. function DsGetDcSiteCoverageW(ServerName: LPCWSTR; var EntryCount: ULONG;
  435.   var SiteNames: PPWideChar): DWORD; stdcall;
  436. {$EXTERNALSYM DsGetDcSiteCoverageW}
  437. {$IFDEF UNICODE}
  438. function DsGetDcSiteCoverage(ServerName: LPCWSTR; var EntryCount: ULONG;
  439.   var SiteNames: PPWideChar): DWORD; stdcall;
  440. {$EXTERNALSYM DsGetDcSiteCoverage}
  441. {$ELSE}
  442. function DsGetDcSiteCoverage(ServerName: LPCSTR; var EntryCount: ULONG;
  443.   var SiteNames: PPChar): DWORD; stdcall;
  444. {$EXTERNALSYM DsGetDcSiteCoverage}
  445. {$ENDIF}
  446. function DsDeregisterDnsHostRecordsA(ServerName, DnsDomainName: LPSTR;
  447.   DomainGuid, DsaGuid: LPGUID; DnsHostName: LPSTR): DWORD; stdcall;
  448. {$EXTERNALSYM DsDeregisterDnsHostRecordsA}
  449. function DsDeregisterDnsHostRecordsW(ServerName, DnsDomainName: LPWSTR;
  450.   DomainGuid, DsaGuid: LPGUID; DnsHostName: LPWSTR): DWORD; stdcall;
  451. {$EXTERNALSYM DsDeregisterDnsHostRecordsW}
  452. {$IFDEF UNICODE}
  453. function DsDeregisterDnsHostRecords(ServerName, DnsDomainName: LPWSTR;
  454.   DomainGuid, DsaGuid: LPGUID; DnsHostName: LPWSTR): DWORD; stdcall;
  455. {$EXTERNALSYM DsDeregisterDnsHostRecords}
  456. {$ELSE}
  457. function DsDeregisterDnsHostRecords(ServerName, DnsDomainName: LPSTR;
  458.   DomainGuid, DsaGuid: LPGUID; DnsHostName: LPSTR): DWORD; stdcall;
  459. {$EXTERNALSYM DsDeregisterDnsHostRecords}
  460. {$ENDIF}
  461. //
  462. // Option flags passed to DsGetDcOpen
  463. //
  464. const
  465.   DS_ONLY_DO_SITE_NAME         = $01;   // Non-site specific names should be avoided.
  466.   {$EXTERNALSYM DS_ONLY_DO_SITE_NAME}
  467.   DS_NOTIFY_AFTER_SITE_RECORDS = $02;   // Return ERROR_FILEMARK_DETECTED after all
  468.   {$EXTERNALSYM DS_NOTIFY_AFTER_SITE_RECORDS}
  469.                                         //  site specific records have been processed.
  470.   DS_OPEN_VALID_OPTION_FLAGS = (DS_ONLY_DO_SITE_NAME or DS_NOTIFY_AFTER_SITE_RECORDS);
  471.   {$EXTERNALSYM DS_OPEN_VALID_OPTION_FLAGS}
  472. //
  473. // Valid DcFlags for DsGetDcOpen
  474. //
  475.   DS_OPEN_VALID_FLAGS =
  476.     DS_FORCE_REDISCOVERY or
  477.     DS_ONLY_LDAP_NEEDED or
  478.     DS_KDC_REQUIRED or
  479.     DS_PDC_REQUIRED or
  480.     DS_GC_SERVER_REQUIRED or
  481.     DS_WRITABLE_REQUIRED;
  482.   {$EXTERNALSYM DS_OPEN_VALID_FLAGS}
  483. function DsGetDcOpenW(DnsName: LPCWSTR; OptionFlags: ULONG; SiteName: LPCWSTR;
  484.   DomainGuid: PGUID; DnsForestName: LPCWSTR; DcFlags: ULONG;
  485.   var RetGetDcContext: HANDLE): DWORD; stdcall;
  486. {$EXTERNALSYM DsGetDcOpenW}
  487. function DsGetDcOpenA(DnsName: LPCSTR; OptionFlags: ULONG; SiteName: LPCSTR;
  488.   DomainGuid: PGUID; DnsForestName: LPCSTR; DcFlags: ULONG;
  489.   var RetGetDcContext: HANDLE): DWORD; stdcall;
  490. {$EXTERNALSYM DsGetDcOpenA}
  491. {$IFDEF UNICODE}
  492. function DsGetDcOpen(DnsName: LPCWSTR; OptionFlags: ULONG; SiteName: LPCWSTR;
  493.   DomainGuid: PGUID; DnsForestName: LPCWSTR; DcFlags: ULONG;
  494.   var RetGetDcContext: HANDLE): DWORD; stdcall;
  495. {$EXTERNALSYM DsGetDcOpen}
  496. {$ELSE}
  497. function DsGetDcOpen(DnsName: LPCSTR; OptionFlags: ULONG; SiteName: LPCSTR;
  498.   DomainGuid: PGUID; DnsForestName: LPCSTR; DcFlags: ULONG;
  499.   var RetGetDcContext: HANDLE): DWORD; stdcall;
  500. {$EXTERNALSYM DsGetDcOpen}
  501. {$ENDIF}
  502. function DsGetDcNextW(GetDcContextHandle: HANDLE; SockAddressCount: PULONG;
  503.   SockAddresses: LPSOCKET_ADDRESS; DnsHostName: LPWSTR): DWORD; stdcall;
  504. {$EXTERNALSYM DsGetDcNextW}
  505. function DsGetDcNextA(GetDcContextHandle: HANDLE; SockAddressCount: PULONG;
  506.   SockAddresses: LPSOCKET_ADDRESS; DnsHostName: LPSTR): DWORD; stdcall;
  507. {$EXTERNALSYM DsGetDcNextA}
  508. {$IFDEF UNICODE}
  509. function DsGetDcNext(GetDcContextHandle: HANDLE; SockAddressCount: PULONG;
  510.   SockAddresses: LPSOCKET_ADDRESS; DnsHostName: LPWSTR): DWORD; stdcall;
  511. {$EXTERNALSYM DsGetDcNext}
  512. {$ELSE}
  513. function DsGetDcNext(GetDcContextHandle: HANDLE; SockAddressCount: PULONG;
  514.   SockAddresses: LPSOCKET_ADDRESS; DnsHostName: LPSTR): DWORD; stdcall;
  515. {$EXTERNALSYM DsGetDcNext}
  516. {$ENDIF}
  517. procedure DsGetDcCloseW(GetDcContextHandle: HANDLE); stdcall;
  518. {$EXTERNALSYM DsGetDcCloseW}
  519. procedure DsGetDcClose(GetDcContextHandle: HANDLE); stdcall;
  520. {$EXTERNALSYM DsGetDcClose}
  521. implementation
  522. const
  523.   netapi32 = 'netapi32.dll';
  524. {$IFDEF DYNAMIC_LINK}
  525. var
  526.   _DsGetDcNameA: Pointer;
  527. function DsGetDcNameA;
  528. begin
  529.   GetProcedureAddress(_DsGetDcNameA, netapi32, 'DsGetDcNameA');
  530.   asm
  531.     mov esp, ebp
  532.     pop ebp
  533.     jmp [_DsGetDcNameA]
  534.   end;
  535. end;
  536. {$ELSE}
  537. function DsGetDcNameA; external netapi32 name 'DsGetDcNameA';
  538. {$ENDIF DYNAMIC_LINK}
  539. {$IFDEF DYNAMIC_LINK}
  540. var
  541.   _DsGetDcNameW: Pointer;
  542. function DsGetDcNameW;
  543. begin
  544.   GetProcedureAddress(_DsGetDcNameW, netapi32, 'DsGetDcNameW');
  545.   asm
  546.     mov esp, ebp
  547.     pop ebp
  548.     jmp [_DsGetDcNameW]
  549.   end;
  550. end;
  551. {$ELSE}
  552. function DsGetDcNameW; external netapi32 name 'DsGetDcNameW';
  553. {$ENDIF DYNAMIC_LINK}
  554. {$IFDEF UNICODE}
  555. {$IFDEF DYNAMIC_LINK}
  556. var
  557.   _DsGetDcName: Pointer;
  558. function DsGetDcName;
  559. begin
  560.   GetProcedureAddress(_DsGetDcName, netapi32, 'DsGetDcNameW');
  561.   asm
  562.     mov esp, ebp
  563.     pop ebp
  564.     jmp [_DsGetDcName]
  565.   end;
  566. end;
  567. {$ELSE}
  568. function DsGetDcName; external netapi32 name 'DsGetDcNameW';
  569. {$ENDIF DYNAMIC_LINK}
  570. {$ELSE}
  571. {$IFDEF DYNAMIC_LINK}
  572. var
  573.   _DsGetDcName: Pointer;
  574. function DsGetDcName;
  575. begin
  576.   GetProcedureAddress(_DsGetDcName, netapi32, 'DsGetDcNameA');
  577.   asm
  578.     mov esp, ebp
  579.     pop ebp
  580.     jmp [_DsGetDcName]
  581.   end;
  582. end;
  583. {$ELSE}
  584. function DsGetDcName; external netapi32 name 'DsGetDcNameA';
  585. {$ENDIF DYNAMIC_LINK}
  586. {$ENDIF}
  587. {$IFDEF DYNAMIC_LINK}
  588. var
  589.   _DsGetSiteNameA: Pointer;
  590. function DsGetSiteNameA;
  591. begin
  592.   GetProcedureAddress(_DsGetSiteNameA, netapi32, 'DsGetSiteNameA');
  593.   asm
  594.     mov esp, ebp
  595.     pop ebp
  596.     jmp [_DsGetSiteNameA]
  597.   end;
  598. end;
  599. {$ELSE}
  600. function DsGetSiteNameA; external netapi32 name 'DsGetSiteNameA';
  601. {$ENDIF DYNAMIC_LINK}
  602. {$IFDEF DYNAMIC_LINK}
  603. var
  604.   _DsGetSiteNameW: Pointer;
  605. function DsGetSiteNameW;
  606. begin
  607.   GetProcedureAddress(_DsGetSiteNameW, netapi32, 'DsGetSiteNameW');
  608.   asm
  609.     mov esp, ebp
  610.     pop ebp
  611.     jmp [_DsGetSiteNameW]
  612.   end;
  613. end;
  614. {$ELSE}
  615. function DsGetSiteNameW; external netapi32 name 'DsGetSiteNameW';
  616. {$ENDIF DYNAMIC_LINK}
  617. {$IFDEF UNICODE}
  618. {$IFDEF DYNAMIC_LINK}
  619. var
  620.   _DsGetSiteName: Pointer;
  621. function DsGetSiteName;
  622. begin
  623.   GetProcedureAddress(_DsGetSiteName, netapi32, 'DsGetSiteNameW');
  624.   asm
  625.     mov esp, ebp
  626.     pop ebp
  627.     jmp [_DsGetSiteName]
  628.   end;
  629. end;
  630. {$ELSE}
  631. function DsGetSiteName; external netapi32 name 'DsGetSiteNameW';
  632. {$ENDIF DYNAMIC_LINK}
  633. {$ELSE}
  634. {$IFDEF DYNAMIC_LINK}
  635. var
  636.   _DsGetSiteName: Pointer;
  637. function DsGetSiteName;
  638. begin
  639.   GetProcedureAddress(_DsGetSiteName, netapi32, 'DsGetSiteNameA');
  640.   asm
  641.     mov esp, ebp
  642.     pop ebp
  643.     jmp [_DsGetSiteName]
  644.   end;
  645. end;
  646. {$ELSE}
  647. function DsGetSiteName; external netapi32 name 'DsGetSiteNameA';
  648. {$ENDIF DYNAMIC_LINK}
  649. {$ENDIF}
  650. {$IFDEF DYNAMIC_LINK}
  651. var
  652.   _DsValidateSubnetNameA: Pointer;
  653. function DsValidateSubnetNameA;
  654. begin
  655.   GetProcedureAddress(_DsValidateSubnetNameA, netapi32, 'DsValidateSubnetNameA');
  656.   asm
  657.     mov esp, ebp
  658.     pop ebp
  659.     jmp [_DsValidateSubnetNameA]
  660.   end;
  661. end;
  662. {$ELSE}
  663. function DsValidateSubnetNameA; external netapi32 name 'DsValidateSubnetNameA';
  664. {$ENDIF DYNAMIC_LINK}
  665. {$IFDEF DYNAMIC_LINK}
  666. var
  667.   _DsValidateSubnetNameW: Pointer;
  668. function DsValidateSubnetNameW;
  669. begin
  670.   GetProcedureAddress(_DsValidateSubnetNameW, netapi32, 'DsValidateSubnetNameW');
  671.   asm
  672.     mov esp, ebp
  673.     pop ebp
  674.     jmp [_DsValidateSubnetNameW]
  675.   end;
  676. end;
  677. {$ELSE}
  678. function DsValidateSubnetNameW; external netapi32 name 'DsValidateSubnetNameW';
  679. {$ENDIF DYNAMIC_LINK}
  680. {$IFDEF UNICODE}
  681. {$IFDEF DYNAMIC_LINK}
  682. var
  683.   _DsValidateSubnetName: Pointer;
  684. function DsValidateSubnetName;
  685. begin
  686.   GetProcedureAddress(_DsValidateSubnetName, netapi32, 'DsValidateSubnetNameW');
  687.   asm
  688.     mov esp, ebp
  689.     pop ebp
  690.     jmp [_DsValidateSubnetName]
  691.   end;
  692. end;
  693. {$ELSE}
  694. function DsValidateSubnetName; external netapi32 name 'DsValidateSubnetNameW';
  695. {$ENDIF DYNAMIC_LINK}
  696. {$ELSE}
  697. {$IFDEF DYNAMIC_LINK}
  698. var
  699.   _DsValidateSubnetName: Pointer;
  700. function DsValidateSubnetName;
  701. begin
  702.   GetProcedureAddress(_DsValidateSubnetName, netapi32, 'DsValidateSubnetNameA');
  703.   asm
  704.     mov esp, ebp
  705.     pop ebp
  706.     jmp [_DsValidateSubnetName]
  707.   end;
  708. end;
  709. {$ELSE}
  710. function DsValidateSubnetName; external netapi32 name 'DsValidateSubnetNameA';
  711. {$ENDIF DYNAMIC_LINK}
  712. {$ENDIF}
  713. {$IFDEF DYNAMIC_LINK}
  714. var
  715.   _DsAddressToSiteNamesA: Pointer;
  716. function DsAddressToSiteNamesA;
  717. begin
  718.   GetProcedureAddress(_DsAddressToSiteNamesA, netapi32, 'DsAddressToSiteNamesA');
  719.   asm
  720.     mov esp, ebp
  721.     pop ebp
  722.     jmp [_DsAddressToSiteNamesA]
  723.   end;
  724. end;
  725. {$ELSE}
  726. function DsAddressToSiteNamesA; external netapi32 name 'DsAddressToSiteNamesA';
  727. {$ENDIF DYNAMIC_LINK}
  728. {$IFDEF DYNAMIC_LINK}
  729. var
  730.   _DsAddressToSiteNamesW: Pointer;
  731. function DsAddressToSiteNamesW;
  732. begin
  733.   GetProcedureAddress(_DsAddressToSiteNamesW, netapi32, 'DsAddressToSiteNamesW');
  734.   asm
  735.     mov esp, ebp
  736.     pop ebp
  737.     jmp [_DsAddressToSiteNamesW]
  738.   end;
  739. end;
  740. {$ELSE}
  741. function DsAddressToSiteNamesW; external netapi32 name 'DsAddressToSiteNamesW';
  742. {$ENDIF DYNAMIC_LINK}
  743. {$IFDEF UNICODE}
  744. {$IFDEF DYNAMIC_LINK}
  745. var
  746.   _DsAddressToSiteNames: Pointer;
  747. function DsAddressToSiteNames;
  748. begin
  749.   GetProcedureAddress(_DsAddressToSiteNames, netapi32, 'DsAddressToSiteNamesW');
  750.   asm
  751.     mov esp, ebp
  752.     pop ebp
  753.     jmp [_DsAddressToSiteNames]
  754.   end;
  755. end;
  756. {$ELSE}
  757. function DsAddressToSiteNames; external netapi32 name 'DsAddressToSiteNamesW';
  758. {$ENDIF DYNAMIC_LINK}
  759. {$ELSE}
  760. {$IFDEF DYNAMIC_LINK}
  761. var
  762.   _DsAddressToSiteNames: Pointer;
  763. function DsAddressToSiteNames;
  764. begin
  765.   GetProcedureAddress(_DsAddressToSiteNames, netapi32, 'DsAddressToSiteNamesA');
  766.   asm
  767.     mov esp, ebp
  768.     pop ebp
  769.     jmp [_DsAddressToSiteNames]
  770.   end;
  771. end;
  772. {$ELSE}
  773. function DsAddressToSiteNames; external netapi32 name 'DsAddressToSiteNamesA';
  774. {$ENDIF DYNAMIC_LINK}
  775. {$ENDIF}
  776. {$IFDEF DYNAMIC_LINK}
  777. var
  778.   _DsAddressToSiteNamesExA: Pointer;
  779. function DsAddressToSiteNamesExA;
  780. begin
  781.   GetProcedureAddress(_DsAddressToSiteNamesExA, netapi32, 'DsAddressToSiteNamesExA');
  782.   asm
  783.     mov esp, ebp
  784.     pop ebp
  785.     jmp [_DsAddressToSiteNamesExA]
  786.   end;
  787. end;
  788. {$ELSE}
  789. function DsAddressToSiteNamesExA; external netapi32 name 'DsAddressToSiteNamesExA';
  790. {$ENDIF DYNAMIC_LINK}
  791. {$IFDEF DYNAMIC_LINK}
  792. var
  793.   _DsAddressToSiteNamesExW: Pointer;
  794. function DsAddressToSiteNamesExW;
  795. begin
  796.   GetProcedureAddress(_DsAddressToSiteNamesExW, netapi32, 'DsAddressToSiteNamesExW');
  797.   asm
  798.     mov esp, ebp
  799.     pop ebp
  800.     jmp [_DsAddressToSiteNamesExW]
  801.   end;
  802. end;
  803. {$ELSE}
  804. function DsAddressToSiteNamesExW; external netapi32 name 'DsAddressToSiteNamesExW';
  805. {$ENDIF DYNAMIC_LINK}
  806. {$IFDEF UNICODE}
  807. {$IFDEF DYNAMIC_LINK}
  808. var
  809.   _DsAddressToSiteNamesEx: Pointer;
  810. function DsAddressToSiteNamesEx;
  811. begin
  812.   GetProcedureAddress(_DsAddressToSiteNamesEx, netapi32, 'DsAddressToSiteNamesExW');
  813.   asm
  814.     mov esp, ebp
  815.     pop ebp
  816.     jmp [_DsAddressToSiteNamesEx]
  817.   end;
  818. end;
  819. {$ELSE}
  820. function DsAddressToSiteNamesEx; external netapi32 name 'DsAddressToSiteNamesExW';
  821. {$ENDIF DYNAMIC_LINK}
  822. {$ELSE}
  823. {$IFDEF DYNAMIC_LINK}
  824. var
  825.   _DsAddressToSiteNamesEx: Pointer;
  826. function DsAddressToSiteNamesEx;
  827. begin
  828.   GetProcedureAddress(_DsAddressToSiteNamesEx, netapi32, 'DsAddressToSiteNamesExA');
  829.   asm
  830.     mov esp, ebp
  831.     pop ebp
  832.     jmp [_DsAddressToSiteNamesEx]
  833.   end;
  834. end;
  835. {$ELSE}
  836. function DsAddressToSiteNamesEx; external netapi32 name 'DsAddressToSiteNamesExA';
  837. {$ENDIF DYNAMIC_LINK}
  838. {$ENDIF}
  839. {$IFDEF DYNAMIC_LINK}
  840. var
  841.   _DsEnumerateDomainTrustsA: Pointer;
  842. function DsEnumerateDomainTrustsA;
  843. begin
  844.   GetProcedureAddress(_DsEnumerateDomainTrustsA, netapi32, 'DsEnumerateDomainTrustsA');
  845.   asm
  846.     mov esp, ebp
  847.     pop ebp
  848.     jmp [_DsEnumerateDomainTrustsA]
  849.   end;
  850. end;
  851. {$ELSE}
  852. function DsEnumerateDomainTrustsA; external netapi32 name 'DsEnumerateDomainTrustsA';
  853. {$ENDIF DYNAMIC_LINK}
  854. {$IFDEF DYNAMIC_LINK}
  855. var
  856.   _DsEnumerateDomainTrustsW: Pointer;
  857. function DsEnumerateDomainTrustsW;
  858. begin
  859.   GetProcedureAddress(_DsEnumerateDomainTrustsW, netapi32, 'DsEnumerateDomainTrustsW');
  860.   asm
  861.     mov esp, ebp
  862.     pop ebp
  863.     jmp [_DsEnumerateDomainTrustsW]
  864.   end;
  865. end;
  866. {$ELSE}
  867. function DsEnumerateDomainTrustsW; external netapi32 name 'DsEnumerateDomainTrustsW';
  868. {$ENDIF DYNAMIC_LINK}
  869. {$IFDEF UNICODE}
  870. {$IFDEF DYNAMIC_LINK}
  871. var
  872.   _DsEnumerateDomainTrusts: Pointer;
  873. function DsEnumerateDomainTrusts;
  874. begin
  875.   GetProcedureAddress(_DsEnumerateDomainTrusts, netapi32, 'DsEnumerateDomainTrustsW');
  876.   asm
  877.     mov esp, ebp
  878.     pop ebp
  879.     jmp [_DsEnumerateDomainTrusts]
  880.   end;
  881. end;
  882. {$ELSE}
  883. function DsEnumerateDomainTrusts; external netapi32 name 'DsEnumerateDomainTrustsW';
  884. {$ENDIF DYNAMIC_LINK}
  885. {$ELSE}
  886. {$IFDEF DYNAMIC_LINK}
  887. var
  888.   _DsEnumerateDomainTrusts: Pointer;
  889. function DsEnumerateDomainTrusts;
  890. begin
  891.   GetProcedureAddress(_DsEnumerateDomainTrusts, netapi32, 'DsEnumerateDomainTrustsA');
  892.   asm
  893.     mov esp, ebp
  894.     pop ebp
  895.     jmp [_DsEnumerateDomainTrusts]
  896.   end;
  897. end;
  898. {$ELSE}
  899. function DsEnumerateDomainTrusts; external netapi32 name 'DsEnumerateDomainTrustsA';
  900. {$ENDIF DYNAMIC_LINK}
  901. {$ENDIF}
  902. {$IFDEF DYNAMIC_LINK}
  903. var
  904.   _DsGetForestTrustInformationW: Pointer;
  905. function DsGetForestTrustInformationW;
  906. begin
  907.   GetProcedureAddress(_DsGetForestTrustInformationW, netapi32, 'DsGetForestTrustInformationW');
  908.   asm
  909.     mov esp, ebp
  910.     pop ebp
  911.     jmp [_DsGetForestTrustInformationW]
  912.   end;
  913. end;
  914. {$ELSE}
  915. function DsGetForestTrustInformationW; external netapi32 name 'DsGetForestTrustInformationW';
  916. {$ENDIF DYNAMIC_LINK}
  917. {$IFDEF DYNAMIC_LINK}
  918. var
  919.   _DsMergeForestTrustInformationW: Pointer;
  920. function DsMergeForestTrustInformationW;
  921. begin
  922.   GetProcedureAddress(_DsMergeForestTrustInformationW, netapi32, 'DsMergeForestTrustInformationW');
  923.   asm
  924.     mov esp, ebp
  925.     pop ebp
  926.     jmp [_DsMergeForestTrustInformationW]
  927.   end;
  928. end;
  929. {$ELSE}
  930. function DsMergeForestTrustInformationW; external netapi32 name 'DsMergeForestTrustInformationW';
  931. {$ENDIF DYNAMIC_LINK}
  932. {$IFDEF DYNAMIC_LINK}
  933. var
  934.   _DsGetDcSiteCoverageA: Pointer;
  935. function DsGetDcSiteCoverageA;
  936. begin
  937.   GetProcedureAddress(_DsGetDcSiteCoverageA, netapi32, 'DsGetDcSiteCoverageA');
  938.   asm
  939.     mov esp, ebp
  940.     pop ebp
  941.     jmp [_DsGetDcSiteCoverageA]
  942.   end;
  943. end;
  944. {$ELSE}
  945. function DsGetDcSiteCoverageA; external netapi32 name 'DsGetDcSiteCoverageA';
  946. {$ENDIF DYNAMIC_LINK}
  947. {$IFDEF DYNAMIC_LINK}
  948. var
  949.   _DsGetDcSiteCoverageW: Pointer;
  950. function DsGetDcSiteCoverageW;
  951. begin
  952.   GetProcedureAddress(_DsGetDcSiteCoverageW, netapi32, 'DsGetDcSiteCoverageW');
  953.   asm
  954.     mov esp, ebp
  955.     pop ebp
  956.     jmp [_DsGetDcSiteCoverageW]
  957.   end;
  958. end;
  959. {$ELSE}
  960. function DsGetDcSiteCoverageW; external netapi32 name 'DsGetDcSiteCoverageW';
  961. {$ENDIF DYNAMIC_LINK}
  962. {$IFDEF UNICODE}
  963. {$IFDEF DYNAMIC_LINK}
  964. var
  965.   _DsGetDcSiteCoverage: Pointer;
  966. function DsGetDcSiteCoverage;
  967. begin
  968.   GetProcedureAddress(_DsGetDcSiteCoverage, netapi32, 'DsGetDcSiteCoverageW');
  969.   asm
  970.     mov esp, ebp
  971.     pop ebp
  972.     jmp [_DsGetDcSiteCoverage]
  973.   end;
  974. end;
  975. {$ELSE}
  976. function DsGetDcSiteCoverage; external netapi32 name 'DsGetDcSiteCoverageW';
  977. {$ENDIF DYNAMIC_LINK}
  978. {$ELSE}
  979. {$IFDEF DYNAMIC_LINK}
  980. var
  981.   _DsGetDcSiteCoverage: Pointer;
  982. function DsGetDcSiteCoverage;
  983. begin
  984.   GetProcedureAddress(_DsGetDcSiteCoverage, netapi32, 'DsGetDcSiteCoverageA');
  985.   asm
  986.     mov esp, ebp
  987.     pop ebp
  988.     jmp [_DsGetDcSiteCoverage]
  989.   end;
  990. end;
  991. {$ELSE}
  992. function DsGetDcSiteCoverage; external netapi32 name 'DsGetDcSiteCoverageA';
  993. {$ENDIF DYNAMIC_LINK}
  994. {$ENDIF}
  995. {$IFDEF DYNAMIC_LINK}
  996. var
  997.   _DsDeregisterDnsHostRecordsA: Pointer;
  998. function DsDeregisterDnsHostRecordsA;
  999. begin
  1000.   GetProcedureAddress(_DsDeregisterDnsHostRecordsA, netapi32, 'DsDeregisterDnsHostRecordsA');
  1001.   asm
  1002.     mov esp, ebp
  1003.     pop ebp
  1004.     jmp [_DsDeregisterDnsHostRecordsA]
  1005.   end;
  1006. end;
  1007. {$ELSE}
  1008. function DsDeregisterDnsHostRecordsA; external netapi32 name 'DsDeregisterDnsHostRecordsA';
  1009. {$ENDIF DYNAMIC_LINK}
  1010. {$IFDEF DYNAMIC_LINK}
  1011. var
  1012.   _DsDeregisterDnsHostRecordsW: Pointer;
  1013. function DsDeregisterDnsHostRecordsW;
  1014. begin
  1015.   GetProcedureAddress(_DsDeregisterDnsHostRecordsW, netapi32, 'DsDeregisterDnsHostRecordsW');
  1016.   asm
  1017.     mov esp, ebp
  1018.     pop ebp
  1019.     jmp [_DsDeregisterDnsHostRecordsW]
  1020.   end;
  1021. end;
  1022. {$ELSE}
  1023. function DsDeregisterDnsHostRecordsW; external netapi32 name 'DsDeregisterDnsHostRecordsW';
  1024. {$ENDIF DYNAMIC_LINK}
  1025. {$IFDEF UNICODE}
  1026. {$IFDEF DYNAMIC_LINK}
  1027. var
  1028.   _DsDeregisterDnsHostRecords: Pointer;
  1029. function DsDeregisterDnsHostRecords;
  1030. begin
  1031.   GetProcedureAddress(_DsDeregisterDnsHostRecords, netapi32, 'DsDeregisterDnsHostRecordsW');
  1032.   asm
  1033.     mov esp, ebp
  1034.     pop ebp
  1035.     jmp [_DsDeregisterDnsHostRecords]
  1036.   end;
  1037. end;
  1038. {$ELSE}
  1039. function DsDeregisterDnsHostRecords; external netapi32 name 'DsDeregisterDnsHostRecordsW';
  1040. {$ENDIF DYNAMIC_LINK}
  1041. {$ELSE}
  1042. {$IFDEF DYNAMIC_LINK}
  1043. var
  1044.   _DsDeregisterDnsHostRecords: Pointer;
  1045. function DsDeregisterDnsHostRecords;
  1046. begin
  1047.   GetProcedureAddress(_DsDeregisterDnsHostRecords, netapi32, 'DsDeregisterDnsHostRecordsA');
  1048.   asm
  1049.     mov esp, ebp
  1050.     pop ebp
  1051.     jmp [_DsDeregisterDnsHostRecords]
  1052.   end;
  1053. end;
  1054. {$ELSE}
  1055. function DsDeregisterDnsHostRecords; external netapi32 name 'DsDeregisterDnsHostRecordsA';
  1056. {$ENDIF DYNAMIC_LINK}
  1057. {$ENDIF}
  1058. {$IFDEF DYNAMIC_LINK}
  1059. var
  1060.   _DsGetDcOpenW: Pointer;
  1061. function DsGetDcOpenW;
  1062. begin
  1063.   GetProcedureAddress(_DsGetDcOpenW, netapi32, 'DsGetDcOpenW');
  1064.   asm
  1065.     mov esp, ebp
  1066.     pop ebp
  1067.     jmp [_DsGetDcOpenW]
  1068.   end;
  1069. end;
  1070. {$ELSE}
  1071. function DsGetDcOpenW; external netapi32 name 'DsGetDcOpenW';
  1072. {$ENDIF DYNAMIC_LINK}
  1073. {$IFDEF DYNAMIC_LINK}
  1074. var
  1075.   _DsGetDcOpenA: Pointer;
  1076. function DsGetDcOpenA;
  1077. begin
  1078.   GetProcedureAddress(_DsGetDcOpenA, netapi32, 'DsGetDcOpenA');
  1079.   asm
  1080.     mov esp, ebp
  1081.     pop ebp
  1082.     jmp [_DsGetDcOpenA]
  1083.   end;
  1084. end;
  1085. {$ELSE}
  1086. function DsGetDcOpenA; external netapi32 name 'DsGetDcOpenA';
  1087. {$ENDIF DYNAMIC_LINK}
  1088. {$IFDEF UNICODE}
  1089. {$IFDEF DYNAMIC_LINK}
  1090. var
  1091.   _DsGetDcOpen: Pointer;
  1092. function DsGetDcOpen;
  1093. begin
  1094.   GetProcedureAddress(_DsGetDcOpen, netapi32, 'DsGetDcOpenW');
  1095.   asm
  1096.     mov esp, ebp
  1097.     pop ebp
  1098.     jmp [_DsGetDcOpen]
  1099.   end;
  1100. end;
  1101. {$ELSE}
  1102. function DsGetDcOpen; external netapi32 name 'DsGetDcOpenW';
  1103. {$ENDIF DYNAMIC_LINK}
  1104. {$ELSE}
  1105. {$IFDEF DYNAMIC_LINK}
  1106. var
  1107.   _DsGetDcOpen: Pointer;
  1108. function DsGetDcOpen;
  1109. begin
  1110.   GetProcedureAddress(_DsGetDcOpen, netapi32, 'DsGetDcOpenA');
  1111.   asm
  1112.     mov esp, ebp
  1113.     pop ebp
  1114.     jmp [_DsGetDcOpen]
  1115.   end;
  1116. end;
  1117. {$ELSE}
  1118. function DsGetDcOpen; external netapi32 name 'DsGetDcOpenA';
  1119. {$ENDIF DYNAMIC_LINK}
  1120. {$ENDIF}
  1121. {$IFDEF DYNAMIC_LINK}
  1122. var
  1123.   _DsGetDcNextW: Pointer;
  1124. function DsGetDcNextW;
  1125. begin
  1126.   GetProcedureAddress(_DsGetDcNextW, netapi32, 'DsGetDcNextW');
  1127.   asm
  1128.     mov esp, ebp
  1129.     pop ebp
  1130.     jmp [_DsGetDcNextW]
  1131.   end;
  1132. end;
  1133. {$ELSE}
  1134. function DsGetDcNextW; external netapi32 name 'DsGetDcNextW';
  1135. {$ENDIF DYNAMIC_LINK}
  1136. {$IFDEF DYNAMIC_LINK}
  1137. var
  1138.   _DsGetDcNextA: Pointer;
  1139. function DsGetDcNextA;
  1140. begin
  1141.   GetProcedureAddress(_DsGetDcNextA, netapi32, 'DsGetDcNextA');
  1142.   asm
  1143.     mov esp, ebp
  1144.     pop ebp
  1145.     jmp [_DsGetDcNextA]
  1146.   end;
  1147. end;
  1148. {$ELSE}
  1149. function DsGetDcNextA; external netapi32 name 'DsGetDcNextA';
  1150. {$ENDIF DYNAMIC_LINK}
  1151. {$IFDEF UNICODE}
  1152. {$IFDEF DYNAMIC_LINK}
  1153. var
  1154.   _DsGetDcNext: Pointer;
  1155. function DsGetDcNext;
  1156. begin
  1157.   GetProcedureAddress(_DsGetDcNext, netapi32, 'DsGetDcNextW');
  1158.   asm
  1159.     mov esp, ebp
  1160.     pop ebp
  1161.     jmp [_DsGetDcNext]
  1162.   end;
  1163. end;
  1164. {$ELSE}
  1165. function DsGetDcNext; external netapi32 name 'DsGetDcNextW';
  1166. {$ENDIF DYNAMIC_LINK}
  1167. {$ELSE}
  1168. {$IFDEF DYNAMIC_LINK}
  1169. var
  1170.   _DsGetDcNext: Pointer;
  1171. function DsGetDcNext;
  1172. begin
  1173.   GetProcedureAddress(_DsGetDcNext, netapi32, 'DsGetDcNextA');
  1174.   asm
  1175.     mov esp, ebp
  1176.     pop ebp
  1177.     jmp [_DsGetDcNext]
  1178.   end;
  1179. end;
  1180. {$ELSE}
  1181. function DsGetDcNext; external netapi32 name 'DsGetDcNextA';
  1182. {$ENDIF DYNAMIC_LINK}
  1183. {$ENDIF}
  1184. {$IFDEF DYNAMIC_LINK}
  1185. var
  1186.   _DsGetDcCloseW: Pointer;
  1187. procedure DsGetDcCloseW;
  1188. begin
  1189.   GetProcedureAddress(_DsGetDcCloseW, netapi32, 'DsGetDcCloseW');
  1190.   asm
  1191.     mov esp, ebp
  1192.     pop ebp
  1193.     jmp [_DsGetDcCloseW]
  1194.   end;
  1195. end;
  1196. {$ELSE}
  1197. procedure DsGetDcCloseW; external netapi32 name 'DsGetDcCloseW';
  1198. {$ENDIF DYNAMIC_LINK}
  1199. {$IFDEF DYNAMIC_LINK}
  1200. var
  1201.   _DsGetDcClose: Pointer;
  1202. procedure DsGetDcClose;
  1203. begin
  1204.   GetProcedureAddress(_DsGetDcClose, netapi32, 'DsGetDcClose');
  1205.   asm
  1206.     mov esp, ebp
  1207.     pop ebp
  1208.     jmp [_DsGetDcClose]
  1209.   end;
  1210. end;
  1211. {$ELSE}
  1212. procedure DsGetDcClose; external netapi32 name 'DsGetDcClose';
  1213. {$ENDIF DYNAMIC_LINK}
  1214. end.