📄 jwantdsapi.pas
字号:
{******************************************************************************}
{ }
{ DC and Replication Management API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: ntdsapi.h, released June 2000. The original Pascal }
{ code is: NtDsApi.pas, released December 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.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 home }
{ page, located at http://delphi-jedi.org or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ 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 JwaNtDsApi;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include "ntdsapi.h"'}
{$HPPEMIT ''}
{$HPPEMIT 'typedef PDS_REPSYNCALL_ERRINFOW *PPDS_REPSYNCALL_ERRINFOW'}
{$HPPEMIT 'typedef PDS_REPSYNCALL_ERRINFOA *PPDS_REPSYNCALL_ERRINFOA'}
{$HPPEMIT '#ifdef UNICODE'}
{$HPPEMIT 'typedef PPDS_REPSYNCALL_ERRINFOW PPDS_REPSYNCALL_ERRINFO'}
{$HPPEMIT '#else'}
{$HPPEMIT 'typedef PPDS_REPSYNCALL_ERRINFOA PPDS_REPSYNCALL_ERRINFO'}
{$HPPEMIT '#endif'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
JwaWinBase, JwaWinType, JwaWinNT, JwaWinNLS, JwaRpcDce, JwaSchedule;
//////////////////////////////////////////////////////////////////////////
// //
// Data definitions //
// //
//////////////////////////////////////////////////////////////////////////
// Following constants define the Active Directory Behavior
// Version numbers.
const
DS_BEHAVIOR_WIN2000 = 0;
{$EXTERNALSYM DS_BEHAVIOR_WIN2000}
DS_BEHAVIOR_WIN_DOT_NET_WITH_MIXED_DOMAINS = 1;
{$EXTERNALSYM DS_BEHAVIOR_WIN_DOT_NET_WITH_MIXED_DOMAINS}
DS_BEHAVIOR_WIN_DOT_NET = 2;
{$EXTERNALSYM DS_BEHAVIOR_WIN_DOT_NET}
// (MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT))
DS_DEFAULT_LOCALE = DWORD((DWORD(SORT_DEFAULT) shl 16) or ((SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH));
{$EXTERNALSYM DS_DEFAULT_LOCALE}
DS_DEFAULT_LOCALE_COMPARE_FLAGS = (NORM_IGNORECASE or NORM_IGNOREKANATYPE or
NORM_IGNORENONSPACE or NORM_IGNOREWIDTH or SORT_STRINGSORT);
{$EXTERNALSYM DS_DEFAULT_LOCALE_COMPARE_FLAGS}
// When booted to DS mode, this event is signalled when the DS has completed
// its initial sync attempts. The period of time between system startup and
// this event's state being set is indeterminate from the local service's
// standpoint. In the meantime the contents of the DS should be considered
// incomplete / out-dated, and the machine will not be advertised as a domain
// controller to off-machine clients. Other local services that rely on
// information published in the DS should avoid accessing (or at least
// relying on) the contents of the DS until this event is set.
DS_SYNCED_EVENT_NAME = 'NTDSInitialSyncsCompleted';
{$EXTERNALSYM DS_SYNCED_EVENT_NAME}
DS_SYNCED_EVENT_NAME_W = 'NTDSInitialSyncsCompleted';
{$EXTERNALSYM DS_SYNCED_EVENT_NAME_W}
// Permissions bits used in security descriptors in the directory.
ACTRL_DS_OPEN = $00000000;
{$EXTERNALSYM ACTRL_DS_OPEN}
ACTRL_DS_CREATE_CHILD = $00000001;
{$EXTERNALSYM ACTRL_DS_CREATE_CHILD}
ACTRL_DS_DELETE_CHILD = $00000002;
{$EXTERNALSYM ACTRL_DS_DELETE_CHILD}
ACTRL_DS_LIST = $00000004;
{$EXTERNALSYM ACTRL_DS_LIST}
ACTRL_DS_SELF = $00000008;
{$EXTERNALSYM ACTRL_DS_SELF}
ACTRL_DS_READ_PROP = $00000010;
{$EXTERNALSYM ACTRL_DS_READ_PROP}
ACTRL_DS_WRITE_PROP = $00000020;
{$EXTERNALSYM ACTRL_DS_WRITE_PROP}
ACTRL_DS_DELETE_TREE = $00000040;
{$EXTERNALSYM ACTRL_DS_DELETE_TREE}
ACTRL_DS_LIST_OBJECT = $00000080;
{$EXTERNALSYM ACTRL_DS_LIST_OBJECT}
ACTRL_DS_CONTROL_ACCESS = $00000100;
{$EXTERNALSYM ACTRL_DS_CONTROL_ACCESS}
// generic read
DS_GENERIC_READ = STANDARD_RIGHTS_READ or ACTRL_DS_LIST or ACTRL_DS_READ_PROP or
ACTRL_DS_LIST_OBJECT;
{$EXTERNALSYM DS_GENERIC_READ}
// generic execute
DS_GENERIC_EXECUTE = ((STANDARD_RIGHTS_EXECUTE) or (ACTRL_DS_LIST));
{$EXTERNALSYM DS_GENERIC_EXECUTE}
// generic right
DS_GENERIC_WRITE = ((STANDARD_RIGHTS_WRITE) or (ACTRL_DS_SELF) or
(ACTRL_DS_WRITE_PROP));
{$EXTERNALSYM DS_GENERIC_WRITE}
// generic all
DS_GENERIC_ALL = ((STANDARD_RIGHTS_REQUIRED) or (ACTRL_DS_CREATE_CHILD) or
(ACTRL_DS_DELETE_CHILD) or (ACTRL_DS_DELETE_TREE) or (ACTRL_DS_READ_PROP) or
(ACTRL_DS_WRITE_PROP) or (ACTRL_DS_LIST) or (ACTRL_DS_LIST_OBJECT) or
(ACTRL_DS_CONTROL_ACCESS) or (ACTRL_DS_SELF));
{$EXTERNALSYM DS_GENERIC_ALL}
type
DS_NAME_FORMAT = (
// unknown name type
DS_UNKNOWN_NAME,
// eg: CN=User Name,OU=Users,DC=Example,DC=Microsoft,DC=Com
DS_FQDN_1779_NAME,
// eg: Exmaple\UserName
// Domain-only version includes trailing '\\'.
DS_NT4_ACCOUNT_NAME,
// Probably "User Name" but could be something else. I.e. The
// display name is not necessarily the defining RDN.
DS_DISPLAY_NAME,
// obsolete - see #define later
// DS_DOMAIN_SIMPLE_NAME,
DS_STUB_4,
// obsolete - see #define later
// DS_ENTERPRISE_SIMPLE_NAME,
DS_STUB_5,
// String-ized GUID as returned by IIDFromString().
// eg: {4fa050f0-f561-11cf-bdd9-00aa003a77b6}
DS_UNIQUE_ID_NAME,
// eg: example.microsoft.com/software/user name
// Domain-only version includes trailing '/'.
DS_CANONICAL_NAME,
// eg: usern@example.microsoft.com
DS_USER_PRINCIPAL_NAME,
// Same as DS_CANONICAL_NAME except that rightmost '/' is
// replaced with '\n' - even in domain-only case.
// eg: example.microsoft.com/software\nuser name
DS_CANONICAL_NAME_EX,
// eg: www/www.microsoft.com@example.com - generalized service principal
// names.
DS_SERVICE_PRINCIPAL_NAME,
// This is the string representation of a SID. Invalid for formatDesired.
// See sddl.h for SID binary <--> text conversion routines.
// eg: S-1-5-21-397955417-626881126-188441444-501
DS_SID_OR_SID_HISTORY_NAME,
// Pseudo-name format so GetUserNameEx can return the DNS domain name to
// a caller. This level is not supported by the DS APIs.
DS_DNS_DOMAIN_NAME);
{$EXTERNALSYM DS_NAME_FORMAT}
TDsNameFormat = DS_NAME_FORMAT;
// Map old name formats to closest new format so that old code builds
// against new headers w/o errors and still gets (almost) correct result.
const
DS_DOMAIN_SIMPLE_NAME = DS_USER_PRINCIPAL_NAME;
{$EXTERNALSYM DS_DOMAIN_SIMPLE_NAME}
DS_ENTERPRISE_SIMPLE_NAME = DS_USER_PRINCIPAL_NAME;
{$EXTERNALSYM DS_ENTERPRISE_SIMPLE_NAME}
type
DS_NAME_FLAGS = DWORD;
{$EXTERNALSYM DS_NAME_FLAGS}
TDsNameFlags = DS_NAME_FLAGS;
const
DS_NAME_NO_FLAGS = $0;
{$EXTERNALSYM DS_NAME_NO_FLAGS}
// Perform a syntactical mapping at the client (if possible) without
// going out on the wire. Returns DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING
// if a purely syntactical mapping is not possible.
DS_NAME_FLAG_SYNTACTICAL_ONLY = $1;
{$EXTERNALSYM DS_NAME_FLAG_SYNTACTICAL_ONLY}
// Force a trip to the DC for evaluation, even if this could be
// locally cracked syntactically.
DS_NAME_FLAG_EVAL_AT_DC = $2;
{$EXTERNALSYM DS_NAME_FLAG_EVAL_AT_DC}
// The call fails if the DC is not a GC
DS_NAME_FLAG_GCVERIFY = $4;
{$EXTERNALSYM DS_NAME_FLAG_GCVERIFY}
// Enable cross forest trust referral
DS_NAME_FLAG_TRUST_REFERRAL = $8;
{$EXTERNALSYM DS_NAME_FLAG_TRUST_REFERRAL}
type
DS_NAME_ERROR = (
DS_NAME_NO_ERROR,
// Generic processing error.
DS_NAME_ERROR_RESOLVING,
// Couldn't find the name at all - or perhaps caller doesn't have
// rights to see it.
DS_NAME_ERROR_NOT_FOUND,
// Input name mapped to more than one output name.
DS_NAME_ERROR_NOT_UNIQUE,
// Input name found, but not the associated output format.
// Can happen if object doesn't have all the required attributes.
DS_NAME_ERROR_NO_MAPPING,
// Unable to resolve entire name, but was able to determine which
// domain object resides in. Thus DS_NAME_RESULT_ITEM?.pDomain
// is valid on return.
DS_NAME_ERROR_DOMAIN_ONLY,
// Unable to perform a purely syntactical mapping at the client
// without going out on the wire.
DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING,
// The name is from an external trusted forest.
DS_NAME_ERROR_TRUST_REFERRAL);
{$EXTERNALSYM DS_NAME_ERROR}
TDsNameError = DS_NAME_ERROR;
const
DS_NAME_LEGAL_FLAGS = (DS_NAME_FLAG_SYNTACTICAL_ONLY);
{$EXTERNALSYM DS_NAME_LEGAL_FLAGS}
type
DS_SPN_NAME_TYPE = (
// "paulle-nec.ntwksta.ms.com"
DS_SPN_DNS_HOST,
// "cn=paulle-nec,ou=computers,dc=ntwksta,dc=ms,dc=com"
DS_SPN_DN_HOST,
// "paulle-nec"
DS_SPN_NB_HOST,
// "ntdev.ms.com"
DS_SPN_DOMAIN,
// "ntdev"
DS_SPN_NB_DOMAIN,
// "cn=anRpcService,cn=RPC Services,cn=system,dc=ms,dc=com"
// "cn=aWsService,cn=Winsock Services,cn=system,dc=ms,dc=com"
// "cn=aService,dc=itg,dc=ms,dc=com"
// "www.ms.com", "ftp.ms.com", "ldap.ms.com"
// "products.ms.com"
DS_SPN_SERVICE);
{$EXTERNALSYM DS_SPN_NAME_TYPE}
TDsSpnNameType = DS_SPN_NAME_TYPE;
DS_SPN_WRITE_OP = (
DS_SPN_ADD_SPN_OP, // add SPNs
DS_SPN_REPLACE_SPN_OP, // set all SPNs
DS_SPN_DELETE_SPN_OP); // Delete SPNs
{$EXTERNALSYM DS_SPN_WRITE_OP}
TDsSpnWriteOp = DS_SPN_WRITE_OP;
PDS_NAME_RESULT_ITEMA = ^DS_NAME_RESULT_ITEMA;
{$EXTERNALSYM PDS_NAME_RESULT_ITEMA}
DS_NAME_RESULT_ITEMA = record
status: DWORD; // DS_NAME_ERROR
pDomain: LPSTR; // DNS domain
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -