📄 winldap.h
字号:
/*++
Copyright (c) 1996-1999 Microsoft Corporation
Module Name:
winldap.h LDAP client 32 API header file
Abstract:
This module is the header file for the 32 bit LDAP client API for
Windows NT and Windows 95. This API is based on RFC 1823 with some
enhancements for LDAP v3.
Notes about Unicode support :
If you have UNICODE defined at compile time, you'll pull in the unicode
versions of the calls. Note that your executable may then not work with
other implementations of the LDAP API that don't support Unicode. If
UNICODE is not defined, then we define the LDAP calls without the trailing
'A' (as in ldap_bind rather than ldap_bindA) so that your app may work
with other implementations that don't support Unicode.
The import library has all three forms of the call present... ldap_bindW,
ldap_bindA, and ldap_bind. ldap_bindA simply calls ldap_bind. ldap_bind
simply converts the arguments to unicode and calls ldap_bindW. The
reason this is done is because we have to put UTF-8 on the wire, so if
we converted from Unicode to single byte, we'd loose information. Since
all core processing is done in Unicode, nothing is lost.
Updates :
11/01/96 Modified for new API RFC draft.
Environments :
Win32 user mode
--*/
//
// Only pull in this header file once... controlled by LDAP_CLIENT_DEFINED
// variable.
//
#ifndef LDAP_CLIENT_DEFINED
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
#define LDAP_CLIENT_DEFINED
#if _MSC_VER > 1000
#pragma once
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef BASETYPES
#include <windef.h>
#endif
#ifndef _SCHNLSP_H_
#include <schnlsp.h>
#endif
#if !defined(_WINLDAP_)
#define WINLDAPAPI DECLSPEC_IMPORT
#else
//#define WINLDAPAPI __declspec(dllexport)
#define WINLDAPAPI
#endif
#ifndef LDAPAPI
#define LDAPAPI __cdecl
#endif
//
// The #define LDAP_UNICODE controls if we map the undecorated calls to
// their unicode counterparts or just leave them defined as the normal
// single byte entry points.
//
// If you want to write a UNICODE enabled application, you'd normally
// just have UNICODE defined and then we'll default to using all LDAP
// Unicode calls.
//
#ifndef LDAP_UNICODE
#ifdef UNICODE
#define LDAP_UNICODE 1
#else
#define LDAP_UNICODE 0
#endif
#endif
//
// Global constants
//
#define LDAP_PORT 389
#define LDAP_SSL_PORT 636
#define LDAP_GC_PORT 3268
#define LDAP_SSL_GC_PORT 3269
//
// We currently support going to either v2 or v3 servers, though the API
// is only a V2 API. We'll add support for result sets, server side
// sorting, extended operations, etc as soon as they stabilize.
//
#define LDAP_VERSION1 1
#define LDAP_VERSION2 2
#define LDAP_VERSION3 3
#define LDAP_VERSION LDAP_VERSION2
//
// All tags are CCFTTTTT.
// CC Tag Class 00 = universal
// 01 = application wide
// 10 = context specific
// 11 = private use
//
// F Form 0 primitive
// 1 constructed
//
// TTTTT Tag Number
//
//
// LDAP v2 & v3 commands.
//
#define LDAP_BIND_CMD 0x60L // application + constructed
#define LDAP_UNBIND_CMD 0x42L // application + primitive
#define LDAP_SEARCH_CMD 0x63L // application + constructed
#define LDAP_MODIFY_CMD 0x66L // application + constructed
#define LDAP_ADD_CMD 0x68L // application + constructed
#define LDAP_DELETE_CMD 0x4aL // application + primitive
#define LDAP_MODRDN_CMD 0x6cL // application + constructed
#define LDAP_COMPARE_CMD 0x6eL // application + constructed
#define LDAP_ABANDON_CMD 0x50L // application + primitive
#define LDAP_SESSION_CMD 0x71L // not in base LDAP protocol
#define LDAP_EXTENDED_CMD 0x77L // application + constructed
//
// Responses/Results for LDAP v2 & v3
//
#define LDAP_RES_BIND 0x61L // application + constructed
#define LDAP_RES_SEARCH_ENTRY 0x64L // application + constructed
#define LDAP_RES_SEARCH_RESULT 0x65L // application + constructed
#define LDAP_RES_MODIFY 0x67L // application + constructed
#define LDAP_RES_ADD 0x69L // application + constructed
#define LDAP_RES_DELETE 0x6bL // application + constructed
#define LDAP_RES_MODRDN 0x6dL // application + constructed
#define LDAP_RES_COMPARE 0x6fL // application + constructed
#define LDAP_RES_SESSION 0x72L // not in base LDAP protocol
#define LDAP_RES_REFERRAL 0x73L // application + constructed
#define LDAP_RES_EXTENDED 0x78L // application + constructed
#define LDAP_RES_ANY (-1L)
#define LDAP_INVALID_CMD 0xff
#define LDAP_INVALID_RES 0xff
//
// We'll make the error codes compatible with reference implementation
//
typedef enum {
LDAP_SUCCESS = 0x00,
LDAP_OPERATIONS_ERROR = 0x01,
LDAP_PROTOCOL_ERROR = 0x02,
LDAP_TIMELIMIT_EXCEEDED = 0x03,
LDAP_SIZELIMIT_EXCEEDED = 0x04,
LDAP_COMPARE_FALSE = 0x05,
LDAP_COMPARE_TRUE = 0x06,
LDAP_AUTH_METHOD_NOT_SUPPORTED = 0x07,
LDAP_STRONG_AUTH_REQUIRED = 0x08,
LDAP_REFERRAL_V2 = 0x09,
LDAP_PARTIAL_RESULTS = 0x09,
LDAP_REFERRAL = 0x0a,
LDAP_ADMIN_LIMIT_EXCEEDED = 0x0b,
LDAP_UNAVAILABLE_CRIT_EXTENSION = 0x0c,
LDAP_CONFIDENTIALITY_REQUIRED = 0x0d,
LDAP_SASL_BIND_IN_PROGRESS = 0x0e,
LDAP_NO_SUCH_ATTRIBUTE = 0x10,
LDAP_UNDEFINED_TYPE = 0x11,
LDAP_INAPPROPRIATE_MATCHING = 0x12,
LDAP_CONSTRAINT_VIOLATION = 0x13,
LDAP_ATTRIBUTE_OR_VALUE_EXISTS = 0x14,
LDAP_INVALID_SYNTAX = 0x15,
LDAP_NO_SUCH_OBJECT = 0x20,
LDAP_ALIAS_PROBLEM = 0x21,
LDAP_INVALID_DN_SYNTAX = 0x22,
LDAP_IS_LEAF = 0x23,
LDAP_ALIAS_DEREF_PROBLEM = 0x24,
LDAP_INAPPROPRIATE_AUTH = 0x30,
LDAP_INVALID_CREDENTIALS = 0x31,
LDAP_INSUFFICIENT_RIGHTS = 0x32,
LDAP_BUSY = 0x33,
LDAP_UNAVAILABLE = 0x34,
LDAP_UNWILLING_TO_PERFORM = 0x35,
LDAP_LOOP_DETECT = 0x36,
LDAP_NAMING_VIOLATION = 0x40,
LDAP_OBJECT_CLASS_VIOLATION = 0x41,
LDAP_NOT_ALLOWED_ON_NONLEAF = 0x42,
LDAP_NOT_ALLOWED_ON_RDN = 0x43,
LDAP_ALREADY_EXISTS = 0x44,
LDAP_NO_OBJECT_CLASS_MODS = 0x45,
LDAP_RESULTS_TOO_LARGE = 0x46,
LDAP_AFFECTS_MULTIPLE_DSAS = 0x47,
LDAP_OTHER = 0x50,
LDAP_SERVER_DOWN = 0x51,
LDAP_LOCAL_ERROR = 0x52,
LDAP_ENCODING_ERROR = 0x53,
LDAP_DECODING_ERROR = 0x54,
LDAP_TIMEOUT = 0x55,
LDAP_AUTH_UNKNOWN = 0x56,
LDAP_FILTER_ERROR = 0x57,
LDAP_USER_CANCELLED = 0x58,
LDAP_PARAM_ERROR = 0x59,
LDAP_NO_MEMORY = 0x5a,
LDAP_CONNECT_ERROR = 0x5b,
LDAP_NOT_SUPPORTED = 0x5c,
LDAP_NO_RESULTS_RETURNED = 0x5e,
LDAP_CONTROL_NOT_FOUND = 0x5d,
LDAP_MORE_RESULTS_TO_RETURN = 0x5f,
LDAP_CLIENT_LOOP = 0x60,
LDAP_REFERRAL_LIMIT_EXCEEDED = 0x61
} LDAP_RETCODE;
//
// Bind methods. We support the following methods :
//
// Simple Clear text password... try not to use as it's not secure.
//
// MSN MSN (Microsoft Network) authentication. This package
// may bring up UI to prompt the user for MSN credentials.
//
// DPA Normandy authentication... new MSN authentication. Same
// usage as MSN.
//
// NTLM NT domain authentication. Use NULL credentials and
// we'll try to use default logged in user credentials.
//
// Sicily Negotiate with the server for any of: MSN, DPA, NTLM
// Should be used for LDAPv2 servers only.
//
// Negotiate Use GSSAPI Negotiate package to negotiate security
// package of either Kerberos v5 or NTLM (or any other
// package the client and server negotiate). Pass in
// NULL credentials to specify default logged in user.
// If Negotiate package is not installed on server or
// client, this will fall back to Sicily negotiation.
//
// For all bind methods except for Simple, you may pass in a
// SEC_WINNT_AUTH_IDENTITY_W (defined in rpcdce.h) or the newer
// SEC_WINNT_AUTH_IDENTITY_EXW (defined in secext.h) to specify alternate
// credentials.
//
// All bind methods other than simple are synchronous only calls.
// Calling the asynchronous bind call for any of these messages will
// return LDAP_PARAM_ERROR.
//
// Using any other method besides simple will cause WLDAP32 to pull in
// the SSPI security DLLs (SECURITY.DLL etc).
//
// On non-Simple methods, if you specify NULL credentials, we'll attempt to use
// the default logged in user.
//
#define LDAP_AUTH_SIMPLE 0x80L
#define LDAP_AUTH_SASL 0x83L // don't use... should go away
#define LDAP_AUTH_OTHERKIND 0x86L
// The SICILY type covers package negotiation to MSN servers.
// Each of the supported types can also be specified without
// doing the package negotiation, assuming the caller knows
// what the server supports.
#define LDAP_AUTH_SICILY (LDAP_AUTH_OTHERKIND | 0x0200)
#define LDAP_AUTH_MSN (LDAP_AUTH_OTHERKIND | 0x0800)
#define LDAP_AUTH_NTLM (LDAP_AUTH_OTHERKIND | 0x1000)
#define LDAP_AUTH_DPA (LDAP_AUTH_OTHERKIND | 0x2000)
// This will cause the client to use the GSSAPI negotiation
// package to determine the most appropriate authentication type.
// This type should be used when talking to NT5.
#define LDAP_AUTH_NEGOTIATE (LDAP_AUTH_OTHERKIND | 0x0400)
// backward compatible #define for older constant name.
#define LDAP_AUTH_SSPI LDAP_AUTH_NEGOTIATE
//
// Client applications typically don't have to encode/decode LDAP filters,
// but if they do, we define the operators here.
//
// Filter types.
#define LDAP_FILTER_AND 0xa0 // context specific + constructed - SET OF Filters.
#define LDAP_FILTER_OR 0xa1 // context specific + constructed - SET OF Filters.
#define LDAP_FILTER_NOT 0xa2 // context specific + constructed - Filter
#define LDAP_FILTER_EQUALITY 0xa3 // context specific + constructed - AttributeValueAssertion.
#define LDAP_FILTER_SUBSTRINGS 0xa4 // context specific + constructed - SubstringFilter
#define LDAP_FILTER_GE 0xa5 // context specific + constructed - AttributeValueAssertion.
#define LDAP_FILTER_LE 0xa6 // context specific + constructed - AttributeValueAssertion.
#define LDAP_FILTER_PRESENT 0x87 // context specific + primitive - AttributeType.
#define LDAP_FILTER_APPROX 0xa8 // context specific + constructed - AttributeValueAssertion.
#define LDAP_FILTER_EXTENSIBLE 0xa9 // context specific + constructed - MatchingRuleAssertion.
// Substring filter types
#define LDAP_SUBSTRING_INITIAL 0x80L // class context specific
#define LDAP_SUBSTRING_ANY 0x81L // class context specific
#define LDAP_SUBSTRING_FINAL 0x82L // class context specific
//
// Possible values for ld_deref field.
// "Never" - never deref aliases. return only the alias.
// "Searching" - only deref aliases when searching, not when locating
// the base object of a search.
// "Finding" - dereference the alias when locating the base object but
// not during a search.
// "Always" - always dereference aliases.
//
#define LDAP_DEREF_NEVER 0
#define LDAP_DEREF_SEARCHING 1
#define LDAP_DEREF_FINDING 2
#define LDAP_DEREF_ALWAYS 3
// Special values for ld_sizelimit :
#define LDAP_NO_LIMIT 0
// Flags for ld_options field :
#define LDAP_OPT_DNS 0x00000001 // utilize DN & DNS
#define LDAP_OPT_CHASE_REFERRALS 0x00000002 // chase referrals
#define LDAP_OPT_RETURN_REFS 0x00000004 // return referrals to calling app
//
// LDAP structure per connection
//
#if !defined(_WIN64)
#pragma pack(push, 4)
#endif
typedef struct ldap {
struct {
UINT_PTR sb_sd;
UCHAR Reserved1[(10*sizeof(ULONG))+1];
ULONG_PTR sb_naddr; // notzero implies CLDAP available
UCHAR Reserved2[(6*sizeof(ULONG))];
} ld_sb;
//
// Following parameters MAY match up to reference implementation of LDAP
//
PCHAR ld_host;
ULONG ld_version;
UCHAR ld_lberoptions;
//
// Safe to assume that these parameters are in same location as
// reference implementation of LDAP API.
//
ULONG ld_deref;
ULONG ld_timelimit;
ULONG ld_sizelimit;
ULONG ld_errno;
PCHAR ld_matched;
PCHAR ld_error;
ULONG ld_msgid;
UCHAR Reserved3[(6*sizeof(ULONG))+1];
//
// Following parameters may match up to reference implementation of LDAP API.
//
ULONG ld_cldaptries;
ULONG ld_cldaptimeout;
ULONG ld_refhoplimit;
ULONG ld_options;
} LDAP, * PLDAP;
//
// Our timeval structure is a bit different from the reference implementation
// since Win32 defines a _timeval structure that is different from the LDAP
// one.
//
typedef struct l_timeval {
LONG tv_sec;
LONG tv_usec;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -