12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013 |
- {******************************************************************************}
- { }
- { Directory Services API interface Unit for Object Pascal }
- { }
- { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
- { Corporation. All Rights Reserved. }
- { }
- { The original file is: dsgetdc.h, released June 2000. The original Pascal }
- { code is: DsGetDc.pas, released December 2000. The initial developer of the }
- { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
- { }
- { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
- { Marcel van Brakel. All Rights Reserved. }
- { }
- { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
- { }
- { You may retrieve the latest version of this file at the Project JEDI }
- { APILIB home page, located at http://jedi-apilib.sourceforge.net }
- { }
- { The contents of this file are used with permission, subject to the Mozilla }
- { Public License Version 1.1 (the "License"); you may not use this file except }
- { in compliance with the License. You may obtain a copy of the License at }
- { http://www.mozilla.org/MPL/MPL-1.1.html }
- { }
- { Software distributed under the License is distributed on an "AS IS" basis, }
- { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
- { the specific language governing rights and limitations under the License. }
- { }
- { Alternatively, the contents of this file may be used under the terms of the }
- { GNU Lesser General Public License (the "LGPL License"), in which case the }
- { provisions of the LGPL License are applicable instead of those above. }
- { If you wish to allow use of your version of this file only under the terms }
- { of the LGPL License and not to allow others to use your version of this file }
- { under the MPL, indicate your decision by deleting the provisions above and }
- { replace them with the notice and other provisions required by the LGPL }
- { License. If you do not delete the provisions above, a recipient may use }
- { your version of this file under either the MPL or the LGPL License. }
- { }
- { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
- { }
- {******************************************************************************}
- unit JwaDSGetDc;
- {$WEAKPACKAGEUNIT}
- {$HPPEMIT ''}
- {$HPPEMIT '#include "DsGetDC.h"'}
- {$HPPEMIT ''}
- {$I jediapilib.inc}
- interface
- uses
- JwaNtSecApi, JwaWinNT, JwaWinType;
- //
- // Structure definitions
- //
- //
- // Flags to passed to DsGetDcName
- //
- const
- DS_FORCE_REDISCOVERY = $00000001;
- {$EXTERNALSYM DS_FORCE_REDISCOVERY}
- DS_DIRECTORY_SERVICE_REQUIRED = $00000010;
- {$EXTERNALSYM DS_DIRECTORY_SERVICE_REQUIRED}
- DS_DIRECTORY_SERVICE_PREFERRED = $00000020;
- {$EXTERNALSYM DS_DIRECTORY_SERVICE_PREFERRED}
- DS_GC_SERVER_REQUIRED = $00000040;
- {$EXTERNALSYM DS_GC_SERVER_REQUIRED}
- DS_PDC_REQUIRED = $00000080;
- {$EXTERNALSYM DS_PDC_REQUIRED}
- DS_BACKGROUND_ONLY = $00000100;
- {$EXTERNALSYM DS_BACKGROUND_ONLY}
- DS_IP_REQUIRED = $00000200;
- {$EXTERNALSYM DS_IP_REQUIRED}
- DS_KDC_REQUIRED = $00000400;
- {$EXTERNALSYM DS_KDC_REQUIRED}
- DS_TIMESERV_REQUIRED = $00000800;
- {$EXTERNALSYM DS_TIMESERV_REQUIRED}
- DS_WRITABLE_REQUIRED = $00001000;
- {$EXTERNALSYM DS_WRITABLE_REQUIRED}
- DS_GOOD_TIMESERV_PREFERRED = $00002000;
- {$EXTERNALSYM DS_GOOD_TIMESERV_PREFERRED}
- DS_AVOID_SELF = $00004000;
- {$EXTERNALSYM DS_AVOID_SELF}
- DS_ONLY_LDAP_NEEDED = $00008000;
- {$EXTERNALSYM DS_ONLY_LDAP_NEEDED}
- DS_IS_FLAT_NAME = $00010000;
- {$EXTERNALSYM DS_IS_FLAT_NAME}
- DS_IS_DNS_NAME = $00020000;
- {$EXTERNALSYM DS_IS_DNS_NAME}
- DS_RETURN_DNS_NAME = $40000000;
- {$EXTERNALSYM DS_RETURN_DNS_NAME}
- DS_RETURN_FLAT_NAME = DWORD($80000000);
- {$EXTERNALSYM DS_RETURN_FLAT_NAME}
- DSGETDC_VALID_FLAGS =
- DS_FORCE_REDISCOVERY or
- DS_DIRECTORY_SERVICE_REQUIRED or
- DS_DIRECTORY_SERVICE_PREFERRED or
- DS_GC_SERVER_REQUIRED or
- DS_PDC_REQUIRED or
- DS_BACKGROUND_ONLY or
- DS_IP_REQUIRED or
- DS_KDC_REQUIRED or
- DS_TIMESERV_REQUIRED or
- DS_WRITABLE_REQUIRED or
- DS_GOOD_TIMESERV_PREFERRED or
- DS_AVOID_SELF or
- DS_ONLY_LDAP_NEEDED or
- DS_IS_FLAT_NAME or
- DS_IS_DNS_NAME or
- DS_RETURN_FLAT_NAME or
- DS_RETURN_DNS_NAME;
- {$EXTERNALSYM DSGETDC_VALID_FLAGS}
- //
- // Structure returned from DsGetDcName
- //
- type
- PDOMAIN_CONTROLLER_INFOA = ^DOMAIN_CONTROLLER_INFOA;
- {$EXTERNALSYM PDOMAIN_CONTROLLER_INFOA}
- _DOMAIN_CONTROLLER_INFOA = record
- DomainControllerName: LPSTR;
- DomainControllerAddress: LPSTR;
- DomainControllerAddressType: ULONG;
- DomainGuid: GUID;
- DomainName: LPSTR;
- DnsForestName: LPSTR;
- Flags: ULONG;
- DcSiteName: LPSTR;
- ClientSiteName: LPSTR;
- end;
- {$EXTERNALSYM _DOMAIN_CONTROLLER_INFOA}
- DOMAIN_CONTROLLER_INFOA = _DOMAIN_CONTROLLER_INFOA;
- {$EXTERNALSYM DOMAIN_CONTROLLER_INFOA}
- TDomainControllerInfoA = DOMAIN_CONTROLLER_INFOA;
- PDomainControllerInfoA = PDOMAIN_CONTROLLER_INFOA;
- PDOMAIN_CONTROLLER_INFOW = ^DOMAIN_CONTROLLER_INFOW;
- {$EXTERNALSYM PDOMAIN_CONTROLLER_INFOW}
- _DOMAIN_CONTROLLER_INFOW = record
- DomainControllerName: LPWSTR;
- DomainControllerAddress: LPWSTR;
- DomainControllerAddressType: ULONG;
- DomainGuid: GUID;
- DomainName: LPWSTR;
- DnsForestName: LPWSTR;
- Flags: ULONG;
- DcSiteName: LPWSTR;
- ClientSiteName: LPWSTR;
- end;
- {$EXTERNALSYM _DOMAIN_CONTROLLER_INFOW}
- DOMAIN_CONTROLLER_INFOW = _DOMAIN_CONTROLLER_INFOW;
- {$EXTERNALSYM DOMAIN_CONTROLLER_INFOW}
- TDomainControllerInfoW = DOMAIN_CONTROLLER_INFOW;
- PDomainControllerInfoW = PDOMAIN_CONTROLLER_INFOW;
- {$IFDEF UNICODE}
- DOMAIN_CONTROLLER_INFO = DOMAIN_CONTROLLER_INFOW;
- {$EXTERNALSYM DOMAIN_CONTROLLER_INFO}
- PDOMAIN_CONTROLLER_INFO = PDOMAIN_CONTROLLER_INFOW;
- {$EXTERNALSYM PDOMAIN_CONTROLLER_INFO}
- TDomainControllerInfo = TDomainControllerInfoW;
- PDomainControllerInfo = PDomainControllerInfoW;
- {$ELSE}
- DOMAIN_CONTROLLER_INFO = DOMAIN_CONTROLLER_INFOA;
- {$EXTERNALSYM DOMAIN_CONTROLLER_INFO}
- PDOMAIN_CONTROLLER_INFO = PDOMAIN_CONTROLLER_INFOA;
- {$EXTERNALSYM PDOMAIN_CONTROLLER_INFO}
- TDomainControllerInfo = TDomainControllerInfoA;
- PDomainControllerInfo = PDomainControllerInfoA;
- {$ENDIF UNICODE}
- //
- // Values for DomainControllerAddressType
- //
- const
- DS_INET_ADDRESS = 1;
- {$EXTERNALSYM DS_INET_ADDRESS}
- DS_NETBIOS_ADDRESS = 2;
- {$EXTERNALSYM DS_NETBIOS_ADDRESS}
- //
- // Values for returned Flags
- //
- DS_PDC_FLAG = $00000001; // DC is PDC of Domain
- {$EXTERNALSYM DS_PDC_FLAG}
- DS_GC_FLAG = $00000004; // DC is a GC of forest
- {$EXTERNALSYM DS_GC_FLAG}
- DS_LDAP_FLAG = $00000008; // Server supports an LDAP server
- {$EXTERNALSYM DS_LDAP_FLAG}
- DS_DS_FLAG = $00000010; // DC supports a DS and is a Domain Controller
- {$EXTERNALSYM DS_DS_FLAG}
- DS_KDC_FLAG = $00000020; // DC is running KDC service
- {$EXTERNALSYM DS_KDC_FLAG}
- DS_TIMESERV_FLAG = $00000040; // DC is running time service
- {$EXTERNALSYM DS_TIMESERV_FLAG}
- DS_CLOSEST_FLAG = $00000080; // DC is in closest site to client
- {$EXTERNALSYM DS_CLOSEST_FLAG}
- DS_WRITABLE_FLAG = $00000100; // DC has a writable DS
- {$EXTERNALSYM DS_WRITABLE_FLAG}
- DS_GOOD_TIMESERV_FLAG = $00000200; // DC is running time service (and has clock hardware)
- {$EXTERNALSYM DS_GOOD_TIMESERV_FLAG}
- DS_NDNC_FLAG = $00000400; // DomainName is non-domain NC serviced by the LDAP server
- {$EXTERNALSYM DS_NDNC_FLAG}
- DS_PING_FLAGS = $0000FFFF; // Flags returned on ping
- {$EXTERNALSYM DS_PING_FLAGS}
- DS_DNS_CONTROLLER_FLAG = $20000000; // DomainControllerName is a DNS name
- {$EXTERNALSYM DS_DNS_CONTROLLER_FLAG}
- DS_DNS_DOMAIN_FLAG = $40000000; // DomainName is a DNS name
- {$EXTERNALSYM DS_DNS_DOMAIN_FLAG}
- DS_DNS_FOREST_FLAG = DWORD($80000000); // DnsForestName is a DNS name
- {$EXTERNALSYM DS_DNS_FOREST_FLAG}
- //
- // Function Prototypes
- //
- function DsGetDcNameA(ComputerName, DomainName: LPCSTR; DomainGuid: LPGUID;
- SiteName: LPCSTR; Flags: ULONG; var DomainControllerInfo: PDOMAIN_CONTROLLER_INFOA): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcNameA}
- function DsGetDcNameW(ComputerName, DomainName: LPCWSTR; DomainGuid: LPGUID;
- SiteName: LPCWSTR; Flags: ULONG; var DomainControllerInfo: PDOMAIN_CONTROLLER_INFOW): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcNameW}
- function DsGetDcName(ComputerName, DomainName: LPCTSTR; DomainGuid: LPGUID;
- SiteName: LPCTSTR; Flags: ULONG; var DomainControllerInfo: PDOMAIN_CONTROLLER_INFO): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcName}
- function DsGetSiteNameA(ComputerName: LPCSTR; var SiteName: LPSTR): DWORD; stdcall;
- {$EXTERNALSYM DsGetSiteNameA}
- function DsGetSiteNameW(ComputerName: LPCWSTR; var SiteName: LPWSTR): DWORD; stdcall;
- {$EXTERNALSYM DsGetSiteNameW}
- function DsGetSiteName(ComputerName: LPCTSTR; var SiteName: LPTSTR): DWORD; stdcall;
- {$EXTERNALSYM DsGetSiteName}
- function DsValidateSubnetNameA(SubnetName: LPCSTR): DWORD; stdcall;
- {$EXTERNALSYM DsValidateSubnetNameA}
- function DsValidateSubnetNameW(SubnetName: LPCWSTR): DWORD; stdcall;
- {$EXTERNALSYM DsValidateSubnetNameW}
- function DsValidateSubnetName(SubnetName: LPCTSTR): DWORD; stdcall;
- {$EXTERNALSYM DsValidateSubnetName}
- //
- // Only include if winsock2.h has been included
- //
- // Types from Winsock2.h
- type
- sockaddr = record
- sa_family: Word; // address family
- sa_data: array [0..13]of Char; // up to 14 bytes of direct address
- end;
- {$EXTERNALSYM sockaddr}
- PSOCKADDR = ^SOCKADDR;
- {$EXTERNALSYM PSOCKADDR}
- LPSOCKADDR = PSOCKADDR;
- {$EXTERNALSYM LPSOCKADDR}
- _SOCKET_ADDRESS = record
- lpSockaddr: LPSOCKADDR;
- iSockaddrLength: Integer;
- end;
- {$EXTERNALSYM _SOCKET_ADDRESS}
- SOCKET_ADDRESS = _SOCKET_ADDRESS;
- {$EXTERNALSYM SOCKET_ADDRESS}
- PSOCKET_ADDRESS = ^SOCKET_ADDRESS;
- {$EXTERNALSYM PSOCKET_ADDRESS}
- LPSOCKET_ADDRESS = PSOCKET_ADDRESS;
- {$EXTERNALSYM LPSOCKET_ADDRESS}
- TSocketAddress = SOCKET_ADDRESS;
- PSocketAddress = LPSOCKET_ADDRESS;
- function DsAddressToSiteNamesA(ComputerName: LPCSTR; EntryCount: DWORD;
- SocketAddresses: PSOCKET_ADDRESS; var SiteNames: PPChar): DWORD; stdcall;
- {$EXTERNALSYM DsAddressToSiteNamesA}
- function DsAddressToSiteNamesW(ComputerName: LPCWSTR; EntryCount: DWORD;
- SocketAddresses: PSOCKET_ADDRESS; var SiteNames: PPWideChar): DWORD; stdcall;
- {$EXTERNALSYM DsAddressToSiteNamesW}
- function DsAddressToSiteNames(ComputerName: LPCTSTR; EntryCount: DWORD;
- SocketAddresses: PSOCKET_ADDRESS; var SiteNames: PPTCHAR): DWORD; stdcall;
- {$EXTERNALSYM DsAddressToSiteNames}
- function DsAddressToSiteNamesExA(ComputerName: LPCSTR; EntryCount: DWORD;
- SocketAddresses: PSOCKET_ADDRESS; var SiteNames, SubnetNames: PPChar): DWORD; stdcall;
- {$EXTERNALSYM DsAddressToSiteNamesExA}
- function DsAddressToSiteNamesExW(ComputerName: LPCWSTR; EntryCount: DWORD;
- SocketAddresses: PSOCKET_ADDRESS; var SiteNames, SubnetNames: PPWideChar): DWORD; stdcall;
- {$EXTERNALSYM DsAddressToSiteNamesExW}
- function DsAddressToSiteNamesEx(ComputerName: LPCTSTR; EntryCount: DWORD;
- SocketAddresses: PSOCKET_ADDRESS; var SiteNames, SubnetNames: PPTCHAR): DWORD; stdcall;
- {$EXTERNALSYM DsAddressToSiteNamesEx}
- //
- // API to enumerate trusted domains
- //
- const
- DS_DOMAIN_IN_FOREST = $0001; // Domain is a member of the forest
- {$EXTERNALSYM DS_DOMAIN_IN_FOREST}
- DS_DOMAIN_DIRECT_OUTBOUND = $0002; // Domain is directly trusted
- {$EXTERNALSYM DS_DOMAIN_DIRECT_OUTBOUND}
- DS_DOMAIN_TREE_ROOT = $0004; // Domain is root of a tree in the forest
- {$EXTERNALSYM DS_DOMAIN_TREE_ROOT}
- DS_DOMAIN_PRIMARY = $0008; // Domain is the primary domain of queried server
- {$EXTERNALSYM DS_DOMAIN_PRIMARY}
- DS_DOMAIN_NATIVE_MODE = $0010; // Primary domain is running in native mode
- {$EXTERNALSYM DS_DOMAIN_NATIVE_MODE}
- DS_DOMAIN_DIRECT_INBOUND = $0020; // Domain is directly trusting
- {$EXTERNALSYM DS_DOMAIN_DIRECT_INBOUND}
- DS_DOMAIN_VALID_FLAGS = DS_DOMAIN_IN_FOREST or DS_DOMAIN_DIRECT_OUTBOUND or
- DS_DOMAIN_TREE_ROOT or DS_DOMAIN_PRIMARY or DS_DOMAIN_NATIVE_MODE or
- DS_DOMAIN_DIRECT_INBOUND;
- {$EXTERNALSYM DS_DOMAIN_VALID_FLAGS}
- type
- PDS_DOMAIN_TRUSTSW = ^DS_DOMAIN_TRUSTSW;
- {$EXTERNALSYM PDS_DOMAIN_TRUSTSW}
- _DS_DOMAIN_TRUSTSW = record
- //
- // Name of the trusted domain.
- //
- NetbiosDomainName: LPWSTR;
- DnsDomainName: LPWSTR;
- //
- // Flags defining attributes of the trust.
- //
- Flags: ULONG;
- //
- // 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.
- //
- ParentIndex: ULONG;
- //
- // The trust type and attributes of this trust.
- //
- // If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set,
- // these value are infered.
- //
- TrustType: ULONG;
- TrustAttributes: ULONG;
- //
- // The SID of the trusted domain.
- //
- // If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set,
- // this value will be NULL.
- //
- DomainSid: PSID;
- //
- // The GUID of the trusted domain.
- //
- DomainGuid: GUID;
- end;
- {$EXTERNALSYM _DS_DOMAIN_TRUSTSW}
- DS_DOMAIN_TRUSTSW = _DS_DOMAIN_TRUSTSW;
- {$EXTERNALSYM DS_DOMAIN_TRUSTSW}
- TDsDomainTrustsW = DS_DOMAIN_TRUSTSW;
- PDsDomainTrustsW = PDS_DOMAIN_TRUSTSW;
- //
- // ANSI version of the above struct
- //
- PDS_DOMAIN_TRUSTSA = ^DS_DOMAIN_TRUSTSA;
- {$EXTERNALSYM PDS_DOMAIN_TRUSTSA}
- _DS_DOMAIN_TRUSTSA = record
- NetbiosDomainName: LPSTR;
- DnsDomainName: LPSTR;
- Flags: ULONG;
- ParentIndex: ULONG;
- TrustType: ULONG;
- TrustAttributes: ULONG;
- DomainSid: PSID;
- DomainGuid: GUID;
- end;
- {$EXTERNALSYM _DS_DOMAIN_TRUSTSA}
- DS_DOMAIN_TRUSTSA = _DS_DOMAIN_TRUSTSA;
- {$EXTERNALSYM DS_DOMAIN_TRUSTSA}
- TDsDomainTrustsA = DS_DOMAIN_TRUSTSA;
- PDsDomainTrustsA = PDS_DOMAIN_TRUSTSA;
- {$IFDEF UNICODE}
- DS_DOMAIN_TRUSTS = DS_DOMAIN_TRUSTSW;
- {$EXTERNALSYM DS_DOMAIN_TRUSTS}
- PDS_DOMAIN_TRUSTS = PDS_DOMAIN_TRUSTSW;
- {$EXTERNALSYM PDS_DOMAIN_TRUSTS}
- TDsDomainTrusts = TDsDomainTrustsW;
- PDsDomainTrusts = PDsDomainTrustsW;
- {$ELSE}
- DS_DOMAIN_TRUSTS = DS_DOMAIN_TRUSTSA;
- {$EXTERNALSYM DS_DOMAIN_TRUSTS}
- PDS_DOMAIN_TRUSTS = PDS_DOMAIN_TRUSTSA;
- {$EXTERNALSYM PDS_DOMAIN_TRUSTS}
- TDsDomainTrusts = TDsDomainTrustsA;
- PDsDomainTrusts = PDsDomainTrustsA;
- {$ENDIF UNICODE}
- function DsEnumerateDomainTrustsA(ServerName: LPSTR; Flags: ULONG;
- var Domains: PDS_DOMAIN_TRUSTSA; var DomainCount: ULONG): DWORD; stdcall;
- {$EXTERNALSYM DsEnumerateDomainTrustsA}
- function DsEnumerateDomainTrustsW(ServerName: LPWSTR; Flags: ULONG;
- var Domains: PDS_DOMAIN_TRUSTSW; var DomainCount: ULONG): DWORD; stdcall;
- {$EXTERNALSYM DsEnumerateDomainTrustsW}
- function DsEnumerateDomainTrusts(ServerName: LPTSTR; Flags: ULONG;
- var Domains: PDS_DOMAIN_TRUSTS; var DomainCount: ULONG): DWORD; stdcall;
- {$EXTERNALSYM DsEnumerateDomainTrusts}
- //
- // Only define this API if the caller has #included the pre-requisite
- // ntlsa.h or ntsecapi.h
- //
- function DsGetForestTrustInformationW(ServerName, TrustedDomainName: LPCWSTR;
- Flags: DWORD; var ForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION): DWORD; stdcall;
- {$EXTERNALSYM DsGetForestTrustInformationW}
- const
- DS_GFTI_UPDATE_TDO = $1; // Update TDO with information returned
- {$EXTERNALSYM DS_GFTI_UPDATE_TDO}
- DS_GFTI_VALID_FLAGS = $1; // All valid flags to DsGetForestTrustInformation
- {$EXTERNALSYM DS_GFTI_VALID_FLAGS}
- function DsMergeForestTrustInformationW(DomainName: LPCWSTR; NewForestTrustInfo,
- OldForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION;
- var MergedForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION): DWORD; stdcall;
- {$EXTERNALSYM DsMergeForestTrustInformationW}
- function DsGetDcSiteCoverageA(ServerName: LPCSTR; var EntryCount: ULONG;
- var SiteNames: PPChar): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcSiteCoverageA}
- function DsGetDcSiteCoverageW(ServerName: LPCWSTR; var EntryCount: ULONG;
- var SiteNames: PPWideChar): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcSiteCoverageW}
- function DsGetDcSiteCoverage(ServerName: LPCTSTR; var EntryCount: ULONG;
- var SiteNames: PPTCHAR): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcSiteCoverage}
- function DsDeregisterDnsHostRecordsA(ServerName, DnsDomainName: LPSTR;
- DomainGuid, DsaGuid: LPGUID; DnsHostName: LPSTR): DWORD; stdcall;
- {$EXTERNALSYM DsDeregisterDnsHostRecordsA}
- function DsDeregisterDnsHostRecordsW(ServerName, DnsDomainName: LPWSTR;
- DomainGuid, DsaGuid: LPGUID; DnsHostName: LPWSTR): DWORD; stdcall;
- {$EXTERNALSYM DsDeregisterDnsHostRecordsW}
- function DsDeregisterDnsHostRecords(ServerName, DnsDomainName: LPTSTR;
- DomainGuid, DsaGuid: LPGUID; DnsHostName: LPTSTR): DWORD; stdcall;
- {$EXTERNALSYM DsDeregisterDnsHostRecords}
- //
- // Option flags passed to DsGetDcOpen
- //
- const
- DS_ONLY_DO_SITE_NAME = $01; // Non-site specific names should be avoided.
- {$EXTERNALSYM DS_ONLY_DO_SITE_NAME}
- DS_NOTIFY_AFTER_SITE_RECORDS = $02; // Return ERROR_FILEMARK_DETECTED after all
- {$EXTERNALSYM DS_NOTIFY_AFTER_SITE_RECORDS}
- // site specific records have been processed.
- DS_OPEN_VALID_OPTION_FLAGS = DS_ONLY_DO_SITE_NAME or DS_NOTIFY_AFTER_SITE_RECORDS;
- {$EXTERNALSYM DS_OPEN_VALID_OPTION_FLAGS}
- //
- // Valid DcFlags for DsGetDcOpen
- //
- DS_OPEN_VALID_FLAGS =
- DS_FORCE_REDISCOVERY or
- DS_ONLY_LDAP_NEEDED or
- DS_KDC_REQUIRED or
- DS_PDC_REQUIRED or
- DS_GC_SERVER_REQUIRED or
- DS_WRITABLE_REQUIRED;
- {$EXTERNALSYM DS_OPEN_VALID_FLAGS}
- function DsGetDcOpenW(DnsName: LPCWSTR; OptionFlags: ULONG; SiteName: LPCWSTR;
- DomainGuid: PGUID; DnsForestName: LPCWSTR; DcFlags: ULONG;
- var RetGetDcContext: HANDLE): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcOpenW}
- function DsGetDcOpenA(DnsName: LPCSTR; OptionFlags: ULONG; SiteName: LPCSTR;
- DomainGuid: PGUID; DnsForestName: LPCSTR; DcFlags: ULONG;
- var RetGetDcContext: HANDLE): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcOpenA}
- function DsGetDcOpen(DnsName: LPCTSTR; OptionFlags: ULONG; SiteName: LPCTSTR;
- DomainGuid: PGUID; DnsForestName: LPCTSTR; DcFlags: ULONG;
- var RetGetDcContext: HANDLE): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcOpen}
- function DsGetDcNextA(GetDcContextHandle: HANDLE; SockAddressCount: PULONG;
- SockAddresses: LPSOCKET_ADDRESS; DnsHostName: LPSTR): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcNextA}
- function DsGetDcNextW(GetDcContextHandle: HANDLE; SockAddressCount: PULONG;
- SockAddresses: LPSOCKET_ADDRESS; DnsHostName: LPWSTR): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcNextW}
- function DsGetDcNext(GetDcContextHandle: HANDLE; SockAddressCount: PULONG;
- SockAddresses: LPSOCKET_ADDRESS; DnsHostName: LPTSTR): DWORD; stdcall;
- {$EXTERNALSYM DsGetDcNext}
- procedure DsGetDcCloseW(GetDcContextHandle: HANDLE); stdcall;
- {$EXTERNALSYM DsGetDcCloseW}
- procedure DsGetDcClose(GetDcContextHandle: HANDLE); stdcall;
- {$EXTERNALSYM DsGetDcClose}
- implementation
- const
- netapi32 = 'netapi32.dll';
- {$IFDEF UNICODE}
- AWSuffix = 'W';
- {$ELSE}
- AWSuffix = 'A';
- {$ENDIF UNICODE}
- {$IFDEF DYNAMIC_LINK}
- var
- _DsGetDcNameA: Pointer;
- function DsGetDcNameA;
- begin
- GetProcedureAddress(_DsGetDcNameA, netapi32, 'DsGetDcNameA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcNameA]
- end;
- end;
- var
- _DsGetDcNameW: Pointer;
- function DsGetDcNameW;
- begin
- GetProcedureAddress(_DsGetDcNameW, netapi32, 'DsGetDcNameW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcNameW]
- end;
- end;
- var
- _DsGetDcName: Pointer;
- function DsGetDcName;
- begin
- GetProcedureAddress(_DsGetDcName, netapi32, 'DsGetDcName' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcName]
- end;
- end;
- var
- _DsGetSiteNameA: Pointer;
- function DsGetSiteNameA;
- begin
- GetProcedureAddress(_DsGetSiteNameA, netapi32, 'DsGetSiteNameA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetSiteNameA]
- end;
- end;
- var
- _DsGetSiteNameW: Pointer;
- function DsGetSiteNameW;
- begin
- GetProcedureAddress(_DsGetSiteNameW, netapi32, 'DsGetSiteNameW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetSiteNameW]
- end;
- end;
- var
- _DsGetSiteName: Pointer;
- function DsGetSiteName;
- begin
- GetProcedureAddress(_DsGetSiteName, netapi32, 'DsGetSiteName' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetSiteName]
- end;
- end;
- var
- _DsValidateSubnetNameA: Pointer;
- function DsValidateSubnetNameA;
- begin
- GetProcedureAddress(_DsValidateSubnetNameA, netapi32, 'DsValidateSubnetNameA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsValidateSubnetNameA]
- end;
- end;
- var
- _DsValidateSubnetNameW: Pointer;
- function DsValidateSubnetNameW;
- begin
- GetProcedureAddress(_DsValidateSubnetNameW, netapi32, 'DsValidateSubnetNameW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsValidateSubnetNameW]
- end;
- end;
- var
- _DsValidateSubnetName: Pointer;
- function DsValidateSubnetName;
- begin
- GetProcedureAddress(_DsValidateSubnetName, netapi32, 'DsValidateSubnetName' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsValidateSubnetName]
- end;
- end;
- var
- _DsAddressToSiteNamesA: Pointer;
- function DsAddressToSiteNamesA;
- begin
- GetProcedureAddress(_DsAddressToSiteNamesA, netapi32, 'DsAddressToSiteNamesA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsAddressToSiteNamesA]
- end;
- end;
- var
- _DsAddressToSiteNamesW: Pointer;
- function DsAddressToSiteNamesW;
- begin
- GetProcedureAddress(_DsAddressToSiteNamesW, netapi32, 'DsAddressToSiteNamesW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsAddressToSiteNamesW]
- end;
- end;
- var
- _DsAddressToSiteNames: Pointer;
- function DsAddressToSiteNames;
- begin
- GetProcedureAddress(_DsAddressToSiteNames, netapi32, 'DsAddressToSiteNames' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsAddressToSiteNames]
- end;
- end;
- var
- _DsAddressToSiteNamesExA: Pointer;
- function DsAddressToSiteNamesExA;
- begin
- GetProcedureAddress(_DsAddressToSiteNamesExA, netapi32, 'DsAddressToSiteNamesExA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsAddressToSiteNamesExA]
- end;
- end;
- var
- _DsAddressToSiteNamesExW: Pointer;
- function DsAddressToSiteNamesExW;
- begin
- GetProcedureAddress(_DsAddressToSiteNamesExW, netapi32, 'DsAddressToSiteNamesExW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsAddressToSiteNamesExW]
- end;
- end;
- var
- _DsAddressToSiteNamesEx: Pointer;
- function DsAddressToSiteNamesEx;
- begin
- GetProcedureAddress(_DsAddressToSiteNamesEx, netapi32, 'DsAddressToSiteNamesEx' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsAddressToSiteNamesEx]
- end;
- end;
- var
- _DsEnumerateDomainTrustsA: Pointer;
- function DsEnumerateDomainTrustsA;
- begin
- GetProcedureAddress(_DsEnumerateDomainTrustsA, netapi32, 'DsEnumerateDomainTrustsA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsEnumerateDomainTrustsA]
- end;
- end;
- var
- _DsEnumerateDomainTrustsW: Pointer;
- function DsEnumerateDomainTrustsW;
- begin
- GetProcedureAddress(_DsEnumerateDomainTrustsW, netapi32, 'DsEnumerateDomainTrustsW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsEnumerateDomainTrustsW]
- end;
- end;
- var
- _DsEnumerateDomainTrusts: Pointer;
- function DsEnumerateDomainTrusts;
- begin
- GetProcedureAddress(_DsEnumerateDomainTrusts, netapi32, 'DsEnumerateDomainTrusts' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsEnumerateDomainTrusts]
- end;
- end;
- var
- _DsGetForestTrustInformationW: Pointer;
- function DsGetForestTrustInformationW;
- begin
- GetProcedureAddress(_DsGetForestTrustInformationW, netapi32, 'DsGetForestTrustInformationW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetForestTrustInformationW]
- end;
- end;
- var
- _DsMergeForestTrustInformationW: Pointer;
- function DsMergeForestTrustInformationW;
- begin
- GetProcedureAddress(_DsMergeForestTrustInformationW, netapi32, 'DsMergeForestTrustInformationW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsMergeForestTrustInformationW]
- end;
- end;
- var
- _DsGetDcSiteCoverageA: Pointer;
- function DsGetDcSiteCoverageA;
- begin
- GetProcedureAddress(_DsGetDcSiteCoverageA, netapi32, 'DsGetDcSiteCoverageA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcSiteCoverageA]
- end;
- end;
- var
- _DsGetDcSiteCoverageW: Pointer;
- function DsGetDcSiteCoverageW;
- begin
- GetProcedureAddress(_DsGetDcSiteCoverageW, netapi32, 'DsGetDcSiteCoverageW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcSiteCoverageW]
- end;
- end;
- var
- _DsGetDcSiteCoverage: Pointer;
- function DsGetDcSiteCoverage;
- begin
- GetProcedureAddress(_DsGetDcSiteCoverage, netapi32, 'DsGetDcSiteCoverage' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcSiteCoverage]
- end;
- end;
- var
- _DsDeregisterDnsHostRecordsA: Pointer;
- function DsDeregisterDnsHostRecordsA;
- begin
- GetProcedureAddress(_DsDeregisterDnsHostRecordsA, netapi32, 'DsDeregisterDnsHostRecordsA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsDeregisterDnsHostRecordsA]
- end;
- end;
- var
- _DsDeregisterDnsHostRecordsW: Pointer;
- function DsDeregisterDnsHostRecordsW;
- begin
- GetProcedureAddress(_DsDeregisterDnsHostRecordsW, netapi32, 'DsDeregisterDnsHostRecordsW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsDeregisterDnsHostRecordsW]
- end;
- end;
- var
- _DsDeregisterDnsHostRecords: Pointer;
- function DsDeregisterDnsHostRecords;
- begin
- GetProcedureAddress(_DsDeregisterDnsHostRecords, netapi32, 'DsDeregisterDnsHostRecords' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsDeregisterDnsHostRecords]
- end;
- end;
- var
- _DsGetDcOpenW: Pointer;
- function DsGetDcOpenW;
- begin
- GetProcedureAddress(_DsGetDcOpenW, netapi32, 'DsGetDcOpenW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcOpenW]
- end;
- end;
- var
- _DsGetDcOpenA: Pointer;
- function DsGetDcOpenA;
- begin
- GetProcedureAddress(_DsGetDcOpenA, netapi32, 'DsGetDcOpenA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcOpenA]
- end;
- end;
- var
- _DsGetDcOpen: Pointer;
- function DsGetDcOpen;
- begin
- GetProcedureAddress(_DsGetDcOpen, netapi32, 'DsGetDcOpen' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcOpen]
- end;
- end;
- var
- _DsGetDcNextW: Pointer;
- function DsGetDcNextW;
- begin
- GetProcedureAddress(_DsGetDcNextW, netapi32, 'DsGetDcNextW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcNextW]
- end;
- end;
- var
- _DsGetDcNextA: Pointer;
- function DsGetDcNextA;
- begin
- GetProcedureAddress(_DsGetDcNextA, netapi32, 'DsGetDcNextA');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcNextA]
- end;
- end;
- var
- _DsGetDcNext: Pointer;
- function DsGetDcNext;
- begin
- GetProcedureAddress(_DsGetDcNext, netapi32, 'DsGetDcNext' + AWSuffix);
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcNext]
- end;
- end;
- var
- _DsGetDcCloseW: Pointer;
- procedure DsGetDcCloseW;
- begin
- GetProcedureAddress(_DsGetDcCloseW, netapi32, 'DsGetDcCloseW');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcCloseW]
- end;
- end;
- var
- _DsGetDcClose: Pointer;
- procedure DsGetDcClose;
- begin
- GetProcedureAddress(_DsGetDcClose, netapi32, 'DsGetDcClose');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_DsGetDcClose]
- end;
- end;
- {$ELSE}
- function DsGetDcNameA; external netapi32 name 'DsGetDcNameA';
- function DsGetDcNameW; external netapi32 name 'DsGetDcNameW';
- function DsGetDcName; external netapi32 name 'DsGetDcName' + AWSuffix;
- function DsGetSiteNameA; external netapi32 name 'DsGetSiteNameA';
- function DsGetSiteNameW; external netapi32 name 'DsGetSiteNameW';
- function DsGetSiteName; external netapi32 name 'DsGetSiteName' + AWSuffix;
- function DsValidateSubnetNameA; external netapi32 name 'DsValidateSubnetNameA';
- function DsValidateSubnetNameW; external netapi32 name 'DsValidateSubnetNameW';
- function DsValidateSubnetName; external netapi32 name 'DsValidateSubnetName' + AWSuffix;
- function DsAddressToSiteNamesA; external netapi32 name 'DsAddressToSiteNamesA';
- function DsAddressToSiteNamesW; external netapi32 name 'DsAddressToSiteNamesW';
- function DsAddressToSiteNames; external netapi32 name 'DsAddressToSiteNames' + AWSuffix;
- function DsAddressToSiteNamesExA; external netapi32 name 'DsAddressToSiteNamesExA';
- function DsAddressToSiteNamesExW; external netapi32 name 'DsAddressToSiteNamesExW';
- function DsAddressToSiteNamesEx; external netapi32 name 'DsAddressToSiteNamesEx' + AWSuffix;
- function DsEnumerateDomainTrustsA; external netapi32 name 'DsEnumerateDomainTrustsA';
- function DsEnumerateDomainTrustsW; external netapi32 name 'DsEnumerateDomainTrustsW';
- function DsEnumerateDomainTrusts; external netapi32 name 'DsEnumerateDomainTrusts' + AWSuffix;
- function DsGetForestTrustInformationW; external netapi32 name 'DsGetForestTrustInformationW';
- function DsMergeForestTrustInformationW; external netapi32 name 'DsMergeForestTrustInformationW';
- function DsGetDcSiteCoverageA; external netapi32 name 'DsGetDcSiteCoverageA';
- function DsGetDcSiteCoverageW; external netapi32 name 'DsGetDcSiteCoverageW';
- function DsGetDcSiteCoverage; external netapi32 name 'DsGetDcSiteCoverage' + AWSuffix;
- function DsDeregisterDnsHostRecordsA; external netapi32 name 'DsDeregisterDnsHostRecordsA';
- function DsDeregisterDnsHostRecordsW; external netapi32 name 'DsDeregisterDnsHostRecordsW';
- function DsDeregisterDnsHostRecords; external netapi32 name 'DsDeregisterDnsHostRecords' + AWSuffix;
- function DsGetDcOpenW; external netapi32 name 'DsGetDcOpenW';
- function DsGetDcOpenA; external netapi32 name 'DsGetDcOpenA';
- function DsGetDcOpen; external netapi32 name 'DsGetDcOpen' + AWSuffix;
- function DsGetDcNextW; external netapi32 name 'DsGetDcNextW';
- function DsGetDcNextA; external netapi32 name 'DsGetDcNextA';
- function DsGetDcNext; external netapi32 name 'DsGetDcNext' + AWSuffix;
- procedure DsGetDcCloseW; external netapi32 name 'DsGetDcCloseW';
- procedure DsGetDcClose; external netapi32 name 'DsGetDcClose';
- {$ENDIF DYNAMIC_LINK}
- end.
|