📄 dsgetdc.pas
字号:
{******************************************************************}
{ }
{ Borland Delphi Runtime Library }
{ Directory Service Functions interface unit }
{ }
{ Portions created by Microsoft are }
{ Copyright (C) 1995-1999 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@bart.nl). }
{ }
{ Portions created by Marcel van Brakel are }
{ Copyright (C) 1999 Marcel van Brakel. }
{ }
{ Obtained through: }
{ Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project }
{ JEDI home page, located at http://delphi-jedi.org }
{ }
{ 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. }
{ }
{******************************************************************}
unit DsGetDC;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include "DsGetDC.h"'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
WinNT, WinType;
//
// 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}
//
// 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_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}
{$IFDEF UNICODE}
function DsGetDcName(ComputerName, DomainName: LPCWSTR; DomainGuid: LPGUID;
SiteName: LPCWSTR; Flags: ULONG; var DomainControllerInfo: PDOMAIN_CONTROLLER_INFOW): DWORD; stdcall;
{$EXTERNALSYM DsGetDcName}
{$ELSE}
function DsGetDcName(ComputerName, DomainName: LPCSTR; DomainGuid: LPGUID;
SiteName: LPCSTR; Flags: ULONG; var DomainControllerInfo: PDOMAIN_CONTROLLER_INFOA): DWORD; stdcall;
{$EXTERNALSYM DsGetDcName}
{$ENDIF}
function DsGetSiteNameA(ComputerName: LPCSTR; var SiteName: LPSTR): DWORD; stdcall;
{$EXTERNALSYM DsGetSiteNameA}
function DsGetSiteNameW(ComputerName: LPCWSTR; var SiteName: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM DsGetSiteNameW}
{$IFDEF UNICODE}
function DsGetSiteName(ComputerName: LPCWSTR; var SiteName: LPWSTR): DWORD; stdcall;
{$EXTERNALSYM DsGetSiteName}
{$ELSE}
function DsGetSiteName(ComputerName: LPCSTR; var SiteName: LPSTR): DWORD; stdcall;
{$EXTERNALSYM DsGetSiteName}
{$ENDIF}
function DsValidateSubnetNameA(SubnetName: LPCSTR): DWORD; stdcall;
{$EXTERNALSYM DsValidateSubnetNameA}
function DsValidateSubnetNameW(SubnetName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM DsValidateSubnetNameW}
{$IFDEF UNICODE}
function DsValidateSubnetName(SubnetName: LPCWSTR): DWORD; stdcall;
{$EXTERNALSYM DsValidateSubnetName}
{$ELSE}
function DsValidateSubnetName(SubnetName: LPCSTR): DWORD; stdcall;
{$EXTERNALSYM DsValidateSubnetName}
{$ENDIF}
//
// 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -