WindowsXP-SP1/ds/adsi/ldapc/srchutil.hxx
2020-09-30 16:53:49 +02:00

253 lines
6.4 KiB
C++

//---------------------------------------------------------------------------
//
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995
//
// File: srchutil.hxx
//
// Contents: Microsoft ADs LDAP Provider search utility functions
//
//
// History: 03-02-97 ShankSh Created.
//
//----------------------------------------------------------------------------
#ifndef _SRCHUTIL_H_INCLUDED_
#define _SRCHUTIL_H_INCLUDED_
typedef struct _ldap_search_pref {
BOOL _fAttrsOnly;
BOOL _fAsynchronous;
DWORD _dwSearchScope;
DWORD _dwSizeLimit;
DWORD _dwTimeLimit;
DWORD _dwPagedTimeLimit;
struct l_timeval _timeout;
DWORD _dwPageSize;
DWORD _dwDerefAliases;
DWORD _dwChaseReferrals;
PLDAPSortKey _pSortKeys;
DWORD _nSortKeys;
BOOL _fCacheResults;
BOOL _fDirSync;
PADS_PROV_SPECIFIC _pProvSpecific;
BOOL _fTombStone;
PLDAPVLVInfo _pVLVInfo; // VLV search
LPWSTR _pAttribScoped; // attribute-scoped query
BOOL _fSecurityDescriptorControl; // security descriptor retrieval
SECURITY_INFORMATION _SecurityDescriptorMask; // ""
}LDAP_SEARCH_PREF, *PLDAP_SEARCH_PREF;
//
// LDAP search structure; Contains all the information pertaining to the
// current search
//
typedef struct _ldap_searchinfo {
ADS_LDP *_pConnection;
LPWSTR _pszADsPathContext;
LPWSTR _pszLdapServer;
LPWSTR _pszBindContextDn;
LPWSTR _pszSearchFilter;
LPWSTR *_ppszAttrs;
LPWSTR _pszAttrNameBuffer;
LDAPMessage **_pSearchResults;
DWORD _cSearchResults;
DWORD _dwCurrResult;
DWORD _dwMaxResultGot;
ULONG _currMsgId;
LDAPMessage *_pCurrentRow;
void *_pFirstAttr;
LDAP_SEARCH_PREF _SearchPref;
PLDAPSearch _hPagedSearch;
DWORD _dwPort;
PLDAPControl *_ServerControls;
PLDAPControl *_ClientControls;
HRESULT _hrLastSearch;
BOOL _fAbandon;
PBERVAL _pBerVal;
DWORD _dwVLVOffset; // VirtualListViewResponse
DWORD _dwVLVCount; // ""
PBERVAL _pVLVContextID; // ""
PBERVAL _pBerValAttribScoped; // attribute-scoped query control value
//
// We use bitfields to store the booleans to try to cut down on the size
// of this structure. Keep them together to permit the compiler to pack them
// into the minimum space without added padding.
//
BOOL _fLastResult:1;
BOOL _fLastPage:1;
BOOL _fBefFirstRow:1;
BOOL _fADsPathPresent:1;
BOOL _fADsPathReturned:1;
BOOL _fADsPathOnly:1; // TRUE = user requested only ADsPath attrib
BOOL _fMoreDirSync:1;
BOOL _fNonFatalErrors:1; // TRUE = non-fatal error occurred, need to warn
}LDAP_SEARCHINFO, *PLDAP_SEARCHINFO;
HRESULT
ADsSetSearchPreference(
IN PADS_SEARCHPREF_INFO pSearchPrefs,
IN DWORD dwNumPrefs,
OUT LDAP_SEARCH_PREF * pLdapPref,
IN LPWSTR pszLDAPServer,
IN LPWSTR pszLDAPDn,
IN CCredentials& Credentials,
IN DWORD dwPort
);
HRESULT
ADsExecuteSearch(
IN LDAP_SEARCH_PREF LdapPref,
IN LPWSTR pszADsPath,
IN LPWSTR pszLdapServer,
IN LPWSTR pszLdapDn,
IN LPWSTR pszSearchFilter,
IN LPWSTR * pAttributeNames,
IN DWORD dwNumberAttributes,
OUT PADS_SEARCH_HANDLE phSearchHandle
);
HRESULT
ADsAbandonSearch(
IN ADS_SEARCH_HANDLE hSearchHandle
);
HRESULT
ADsCloseSearchHandle (
IN ADS_SEARCH_HANDLE hSearchHandle
);
HRESULT
ADsGetFirstRow(
IN ADS_SEARCH_HANDLE hSearchHandle,
IN CCredentials& CCredentials
);
HRESULT
ADsGetNextRow(
IN ADS_SEARCH_HANDLE hSearchHandle,
IN CCredentials& CCredentials
);
HRESULT
ADsGetPreviousRow(
IN ADS_SEARCH_HANDLE hSearchHandle,
IN CCredentials& CCredentials
);
HRESULT
ADsGetColumn(
IN ADS_SEARCH_HANDLE hSearchHandle,
IN LPWSTR pszColumnName,
IN CCredentials& CCredentials,
DWORD dwPort,
OUT PADS_SEARCH_COLUMN pColumn
);
HRESULT
ADsGetNextColumnName(
IN ADS_SEARCH_HANDLE hSearchHandle,
OUT LPWSTR * ppszColumnName
);
HRESULT
ADsFreeColumn(
IN PADS_SEARCH_COLUMN pColumn
);
HRESULT
ADsGetResults(
IN PLDAP_SEARCHINFO phSearchInfo
);
HRESULT
ADsGetMoreResults(
IN PLDAP_SEARCHINFO phSearchInfo
);
HRESULT
AddSearchControls(
PLDAP_SEARCHINFO phSearchInfo,
CCredentials& Credentials
);
void
FreeSortKeys(
IN PLDAPSortKey pSortKeys,
IN DWORD dwSortKeys
);
HRESULT
CopyLDAPVLVInfo(
PLDAPVLVInfo pVLVInfoSource,
PLDAPVLVInfo *ppVLVInfoTarget
);
void
FreeLDAPVLVInfo(
IN PLDAPVLVInfo pVLVInfo
);
HRESULT
StoreVLVInfo(
LDAPMessage *pLDAPMsg,
PLDAP_SEARCHINFO phSearchInfo
);
HRESULT
StoreAttribScopedInfo(
LDAPMessage *pLDAPMsg,
PLDAP_SEARCHINFO phSearchInfo
);
HRESULT
StoreDirSyncCookie(
IN LDAPMessage *pLDAPMsg,
IN PLDAP_SEARCHINFO phSearchInfo
);
HRESULT
BerEncodeReplicationCookie(
PBYTE pCookie,
DWORD dwLen,
PBERVAL *ppBerVal
);
HRESULT
BerEncodeAttribScopedControlValue(
LPCWSTR pAttribScoped,
PBERVAL *ppBerVal
);
HRESULT
ADsGetMoreResultsDirSync(
IN PLDAP_SEARCHINFO phSearchInfo,
IN CCredentials& Credentials
);
//
// Helper routine to initialize search preferences.
//
void
LdapInitializeSearchPreferences(
LDAP_SEARCH_PREF *pSearchPrefs,
BOOL fCacheResults
);
//
// This routine is used in Umi search support.
//
HRESULT
ADsHelperGetCurrentRowMessage(
IN ADS_SEARCH_HANDLE hSearchHandle,
OUT PADSLDP *ppAdsLdp,
OUT LDAPMessage **ppLdapMsg
);
#endif // _SRCHUTIL_H_INCLUDED_