📄 ntdsapi.pas
字号:
{******************************************************************}
{ }
{ Borland Delphi Runtime Library }
{ DC and Replication Management interface unit }
{ }
{ Portions created by Microsoft are }
{ Copyright (C) 1995-1999 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@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 NtDsApi;
{$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
WinBase, WinType, WinNT, WinNLS, RpcDce, Schedule;
//////////////////////////////////////////////////////////////////////////
// //
// Data definitions //
// //
//////////////////////////////////////////////////////////////////////////
const
// (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);
{$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=Spencer Katt,OU=Users,DC=Engineering,DC=Widget,DC=Com
DS_FQDN_1779_NAME,
// eg: Engineering\SpencerK
// Domain-only version includes trailing '\\'.
DS_NT4_ACCOUNT_NAME,
// Probably "Spencer Katt" 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: engineering.widget.com/software/spencer katt
// Domain-only version includes trailing '/'.
DS_CANONICAL_NAME,
// eg: spencerk@engineering.widget.com
DS_USER_PRINCIPAL_NAME,
// Same as DS_CANONICAL_NAME except that rightmost '/' is
// replaced with '\n' - even in domain-only case.
// eg: engineering.widget.com/software\nspencer katt
DS_CANONICAL_NAME_EX,
// eg: www/www.widget.com@widget.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);
{$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 = (
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,
// Force a trip to the DC for evaluation, even if this could be
// locally cracked syntactically.
DS_NAME_FLAG_EVAL_AT_DC);
{$EXTERNALSYM DS_NAME_FLAGS}
TDsNameFlags = DS_NAME_FLAGS;
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);
{$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
pName: LPSTR; // name in requested format
end;
{$EXTERNALSYM DS_NAME_RESULT_ITEMA}
TDsNameResultItemA = DS_NAME_RESULT_ITEMA;
PDsNameResultItemA = PDS_NAME_RESULT_ITEMA;
PDS_NAME_RESULTA = ^DS_NAME_RESULTA;
{$EXTERNALSYM PDS_NAME_RESULTA}
DS_NAME_RESULTA = record
cItems: DWORD; // item count
rItems: PDS_NAME_RESULT_ITEMA; // item array
end;
{$EXTERNALSYM DS_NAME_RESULTA}
TDsNameResultA = DS_NAME_RESULTA;
PDsNameResultA = PDS_NAME_RESULTA;
PDS_NAME_RESULT_ITEMW = ^DS_NAME_RESULT_ITEMW;
{$EXTERNALSYM PDS_NAME_RESULT_ITEMW}
DS_NAME_RESULT_ITEMW = record
status: DWORD; // DS_NAME_ERROR
pDomain: LPWSTR; // DNS domain
pName: LPWSTR; // name in requested format
end;
{$EXTERNALSYM DS_NAME_RESULT_ITEMW}
TDsNameResultItemW = DS_NAME_RESULT_ITEMW;
PDsNameResultItemW = PDS_NAME_RESULT_ITEMW;
PDS_NAME_RESULTW = ^DS_NAME_RESULTW;
{$EXTERNALSYM PDS_NAME_RESULTW}
DS_NAME_RESULTW = record
cItems: DWORD; // item count
rItems: PDS_NAME_RESULT_ITEMW; // item array
end;
{$EXTERNALSYM DS_NAME_RESULTW}
TDsNameResultW = DS_NAME_RESULTW;
PDsNameResultW = PDS_NAME_RESULTW;
{$IFDEF UNICODE}
DS_NAME_RESULT = DS_NAME_RESULTW;
{$EXTERNALSYM DS_NAME_RESULT}
PDS_NAME_RESULT = PDS_NAME_RESULTW;
{$EXTERNALSYM PDS_NAME_RESULT}
DS_NAME_RESULT_ITEM = DS_NAME_RESULT_ITEMW;
{$EXTERNALSYM DS_NAME_RESULT_ITEM}
PDS_NAME_RESULT_ITEM = PDS_NAME_RESULT_ITEMW;
{$EXTERNALSYM PDS_NAME_RESULT_ITEM}
TDsNameResult = TDsNameResultW;
PDsNameResult = PDsNameResultW;
TDsNameResultItem = TDsNameResultItemW;
PDsNameResultItem = PDsNameResultItemW;
{$ELSE}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -