/* * Copyright 2005 Francois Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "oaidl.idl"; typedef enum { ADS_RIGHT_DS_CREATE_CHILD = 0x00000001, ADS_RIGHT_DS_DELETE_CHILD = 0x00000002, ADS_RIGHT_ACTRL_DS_LIST = 0x00000004, ADS_RIGHT_DS_SELF = 0x00000008, ADS_RIGHT_DS_READ_PROP = 0x00000010, ADS_RIGHT_DS_WRITE_PROP = 0x00000020, ADS_RIGHT_DS_DELETE_TREE = 0x00000040, ADS_RIGHT_DS_LIST_OBJECT = 0x00000080, ADS_RIGHT_DS_CONTROL_ACCESS = 0x00000100, ADS_RIGHT_DELETE = 0x00010000, ADS_RIGHT_READ_CONTROL = 0x00020000, ADS_RIGHT_WRITE_DAC = 0x00040000, ADS_RIGHT_WRITE_OWNER = 0x00080000, ADS_RIGHT_SYNCHRONIZE = 0x00100000, ADS_RIGHT_ACCESS_SYSTEM_SECURITY = 0x00200000, ADS_RIGHT_GENERIC_ALL = 0x10000000, ADS_RIGHT_GENERIC_EXECUTE = 0x20000000, ADS_RIGHT_GENERIC_WRITE = 0x40000000, ADS_RIGHT_GENERIC_READ = 0x80000000 } ADS_RIGHTS_ENUM; typedef enum { ADS_SECURE_AUTHENTICATION = 0x1, ADS_USE_ENCRYPTION = 0x2, ADS_USE_SSL = 0x2, ADS_READONLY_SERVER = 0x4, ADS_PROMPT_CREDENTIALS = 0x8, ADS_NO_AUTHENTICATION = 0x10, ADS_FAST_BIND = 0x20, ADS_USE_SIGNING = 0x40, ADS_USE_SEALING = 0x80, ADS_USE_DELEGATION = 0x100, ADS_SERVER_BIND = 0x200, ADS_NO_REFERRAL_CHASING = 0x400, ADS_AUTH_RESERVED = 0x80000000 } ADS_AUTHENTICATION_ENUM; typedef enum { ADS_SEARCHPREF_ASYNCHRONOUS, ADS_SEARCHPREF_DEREF_ALIASES, ADS_SEARCHPREF_SIZE_LIMIT, ADS_SEARCHPREF_TIME_LIMIT, ADS_SEARCHPREF_ATTRIBTYPES_ONLY, ADS_SEARCHPREF_SEARCH_SCOPE, ADS_SEARCHPREF_TIMEOUT, ADS_SEARCHPREF_PAGESIZE, ADS_SEARCHPREF_PAGED_TIME_LIMIT, ADS_SEARCHPREF_CHASE_REFERRALS, ADS_SEARCHPREF_SORT_ON, ADS_SEARCHPREF_CACHE_RESULTS, ADS_SEARCHPREF_DIRSYNC, ADS_SEARCHPREF_TOMBSTONE, ADS_SEARCHPREF_VLV, ADS_SEARCHPREF_ATTRIBUTE_QUERY, ADS_SEARCHPREF_SECURITY_MASK, ADS_SEARCHPREF_DIRSYNC_FLAG, ADS_SEARCHPREF_EXTENDED_DN } ADS_SEARCHPREF_ENUM; typedef ADS_SEARCHPREF_ENUM *PADS_SEARCHPREF_INFO; typedef enum { ADS_STATUS_S_OK, ADS_STATUS_INVALID_SEARCHPREF, ADS_STATUS_INVALID_SEARCHPREFVALUE } ADS_STATUSENUM; typedef enum { ADSTYPE_INVALID, ADSTYPE_DN_STRING, ADSTYPE_CASE_EXACT_STRING, ADSTYPE_CASE_IGNORE_STRING, ADSTYPE_PRINTABLE_STRING, ADSTYPE_NUMERIC_STRING, ADSTYPE_BOOLEAN, ADSTYPE_INTEGER, ADSTYPE_OCTET_STRING, ADSTYPE_UTC_TIME, ADSTYPE_LARGE_INTEGER, ADSTYPE_PROV_SPECIFIC, ADSTYPE_OBJECT_CLASS, ADSTYPE_CASEIGNORE_LIST, ADSTYPE_OCTET_LIST, ADSTYPE_PATH, ADSTYPE_POSTALADDRESS, ADSTYPE_TIMESTAMP, ADSTYPE_BACKLINK, ADSTYPE_TYPEDNAME, ADSTYPE_HOLD, ADSTYPE_NETADDRESS, ADSTYPE_REPLICAPOINTER, ADSTYPE_FAXNUMBER, ADSTYPE_EMAIL, ADSTYPE_NT_SECURITY_DESCRIPTOR, ADSTYPE_UNKNOWN, ADSTYPE_DN_WITH_BINARY, ADSTYPE_DN_WITH_STRING } ADSTYPEENUM; typedef enum { ADS_PASSWORD_ENCODE_REQUIRE_SSL, ADS_PASSWORD_ENCODE_CLEAR } ADS_PASSWORD_ENCODING_ENUM; typedef struct _ADS_CASEIGNORE_LIST { struct _ADS_CASEIGNORE_LIST *Next; LPWSTR String; } ADS_CASEIGNORE_LIST; typedef struct _ADS_OCTET_LIST { struct _ADS_OCTET_LIST *Next; DWORD Length; BYTE *Data; } ADS_OCTET_LIST; typedef struct { DWORD Type; LPWSTR VolumeName; LPWSTR Path; } ADS_PATH, *PADS_PATH; typedef struct { DWORD WholeSeconds; DWORD EventID; } ADS_TIMESTAMP; typedef ADSTYPEENUM ADSTYPE; typedef LPWSTR ADS_DN_STRING; typedef LPWSTR *PADS_DN_STRING; typedef LPWSTR ADS_CASE_EXACT_STRING; typedef LPWSTR *PADS_CASE_EXACT_STRING; typedef LPWSTR ADS_CASE_IGNORE_STRING; typedef LPWSTR *PADS_CASE_IGNORE_STRING; typedef LPWSTR ADS_PRINTABLE_STRING; typedef LPWSTR *PADS_PRINTABLE_STRING; typedef LPWSTR ADS_NUMERIC_STRING; typedef LPWSTR *PADS_NUMERIC_STRING; typedef DWORD ADS_BOOLEAN; typedef DWORD *LPNDS_BOOLEAN; typedef DWORD ADS_INTEGER; typedef DWORD *PADS_INTEGER; typedef SYSTEMTIME ADS_UTC_TIME; typedef SYSTEMTIME *PADS_UTC_TIME; typedef LARGE_INTEGER ADS_LARGE_INTEGER; typedef LARGE_INTEGER *PADS_LARGE_INTEGER; typedef LPWSTR ADS_OBJECT_CLASS; typedef LPWSTR *PADS_OBJECT_CLASS; typedef struct _ADS_OCTET_LIST *PADS_OCTET_LIST; typedef struct _ADS_CASEIGNORE_LIST *PADS_CASEIGNORE_LIST; typedef ADS_STATUSENUM ADS_STATUS; typedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF; typedef HANDLE ADS_SEARCH_HANDLE; typedef HANDLE *PADS_SEARCH_HANDLE; typedef struct { DWORD dwLength; BYTE *lpValue; } ADS_OCTET_STRING; typedef struct { DWORD dwLength; BYTE *lpValue; } ADS_PROV_SPECIFIC; typedef struct { LPWSTR PostalAddress[ 6 ]; } ADS_POSTALADDRESS, *PADS_POSTALADDRESS; typedef struct { LPWSTR ObjectName; DWORD Level; DWORD Interval; } ADS_TYPEDNAME, *PADS_TYPEDNAME; typedef struct { DWORD RemoteID; LPWSTR ObjectName; } ADS_BACKLINK; typedef struct { LPWSTR ObjectName; DWORD Amount; } ADS_HOLD; typedef struct { DWORD AddressType; DWORD AddressLength; BYTE *Address; } ADS_NETADDRESS, *PADS_NETADDRESS; typedef struct { LPWSTR ServerName; DWORD ReplicaType; DWORD ReplicaNumber; DWORD Count; PADS_NETADDRESS ReplicaAddressHints; } ADS_REPLICAPOINTER, *PADS_REPLICAPOINTER; typedef struct { LPWSTR TelephoneNumber; DWORD NumberOfBits; BYTE *Parameters; } ADS_FAXNUMBER, *PADS_FAXNUMBER; typedef struct { LPWSTR Address; DWORD Type; } ADS_EMAIL, *PADS_EMAIL; typedef struct { DWORD dwLength; BYTE *lpValue; } ADS_NT_SECURITY_DESCRIPTOR; typedef struct { DWORD dwLength; BYTE *lpBinaryValue; LPWSTR pszDNString; } ADS_DN_WITH_BINARY, *PADS_DN_WITH_BINARY; typedef struct { LPWSTR pszStringValue; LPWSTR pszDNString; } ADS_DN_WITH_STRING, *PADS_DN_WITH_STRING; typedef struct _adsvalue { ADSTYPE dwType; union { ADS_DN_STRING DNString; ADS_CASE_EXACT_STRING CaseExactString; ADS_CASE_IGNORE_STRING CaseIgnoreString; ADS_PRINTABLE_STRING PrintableString; ADS_NUMERIC_STRING NumericString; ADS_BOOLEAN Boolean; ADS_INTEGER Integer; ADS_OCTET_STRING OctetString; ADS_UTC_TIME UTCTime; ADS_LARGE_INTEGER LargeInteger; ADS_OBJECT_CLASS ClassName; ADS_PROV_SPECIFIC ProviderSpecific; PADS_CASEIGNORE_LIST pCaseIgnoreList; PADS_OCTET_LIST pOctetList; PADS_PATH pPath; PADS_POSTALADDRESS pPostalAddress; ADS_TIMESTAMP Timestamp; ADS_BACKLINK BackLink; PADS_TYPEDNAME pTypedName; ADS_HOLD Hold; PADS_NETADDRESS pNetAddress; PADS_REPLICAPOINTER pReplicaPointer; PADS_FAXNUMBER pFaxNumber; ADS_EMAIL Email; ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor; PADS_DN_WITH_BINARY pDNWithBinary; PADS_DN_WITH_STRING pDNWithString; }; } ADSVALUE, *PADSVALUE; typedef struct ads_searchpref_info { ADS_SEARCHPREF dwSearchPref; ADSVALUE vValue; ADS_STATUS dwStatus; } ADS_SEARCHPREF_INFO; typedef struct ads_search_column { LPWSTR pszAttrName; ADSTYPE dwADsType; PADSVALUE pADsValues; DWORD dwNumValues; HANDLE hReserved; } ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN; /***************************************************************************** * IADsContainer interface */ [ object, uuid(001677d0-fd16-11ce-abc4-02608c9e7553) ] interface IADsContainer: IDispatch { [propget] HRESULT Count( [out, retval] long *retval); [propget, restricted] HRESULT _NewEnum( [out, retval] IUnknown **retval); [propget] HRESULT Filter( [out, retval] VARIANT *pvFilter); [propput] HRESULT Filter( [in] VARIANT vFilter); [propget] HRESULT Hints( [out, retval] VARIANT *pvHints); [propput] HRESULT Hints( [in] VARIANT vHints); HRESULT GetObject( [in] BSTR bstrClassName, [in] BSTR bstrRelativeName, [out, retval] IDispatch **ppObject); HRESULT Create( [in] BSTR bstrClassName, [in] BSTR bstrRelativeName, [out, retval] IDispatch **ppObject); HRESULT Delete( [in] BSTR bstrClassName, [in] BSTR bstrRelativeName); HRESULT CopyHere( [in] BSTR bstrSourceName, [in] BSTR bstrNewName, [out, retval] IDispatch **ppObject); HRESULT MoveHere( [in] BSTR bstrSourceName, [in] BSTR bstrNewName, [out, retval] IDispatch **ppObject); } /***************************************************************************** * IADs interface */ [ odl, uuid(FD8256D0-FD15-11CE-ABC4-02608C9E7553), dual, oleautomation ] interface IADs : IDispatch { [id(0x00000002), propget] HRESULT Name([out, retval] BSTR* retval); [id(0x00000003), propget] HRESULT Class([out, retval] BSTR* retval); [id(0x00000004), propget] HRESULT GUID([out, retval] BSTR* retval); [id(0x00000005), propget] HRESULT ADsPath([out, retval] BSTR* retval); [id(0x00000006), propget] HRESULT Parent([out, retval] BSTR* retval); [id(0x00000007), propget] HRESULT Schema([out, retval] BSTR* retval); [id(0x00000008)] HRESULT GetInfo(); [id(0x00000009)] HRESULT SetInfo(); [id(0x0000000a)] HRESULT Get([in] BSTR bstrName, [out, retval] VARIANT* pvProp); [id(0x0000000b)] HRESULT Put([in] BSTR bstrName, [in] VARIANT vProp); [id(0x0000000c)] HRESULT GetEx([in] BSTR bstrName, [out, retval] VARIANT* pvProp); [id(0x0000000d)] HRESULT PutEx([in] long lnControlCode, [in] BSTR bstrName, [in] VARIANT vProp); [id(0x0000000e)] HRESULT GetInfoEx( [in] VARIANT vProperties, [in] long lnReserved); }; /***************************************************************************** * IADsMembers interface */ [ odl, uuid(451A0030-72EC-11CF-B03B-00AA006E0975), dual, oleautomation ] interface IADsMembers : IDispatch { [id(0x00000002), propget] HRESULT Count([out, retval] long* plCount); [id(0xfffffffc), propget] HRESULT _NewEnum([out, retval] IUnknown** ppEnumerator); [id(0x00000003), propget] HRESULT Filter([out, retval] VARIANT* pvFilter); [id(0x00000003), propput] HRESULT Filter([in] VARIANT pvFilter); }; /***************************************************************************** * IADsGroup interface */ [ odl, uuid(27636B00-410F-11CF-B1FF-02608C9E7553), dual, oleautomation ] interface IADsGroup : IADs { [id(0x0000000f), propget] HRESULT Description([out, retval] BSTR* retval); [id(0x0000000f), propput] HRESULT Description([in] BSTR retval); [id(0x00000010)] HRESULT Members([out, retval] IADsMembers** ppMembers); [id(0x00000011)] HRESULT IsMember([in] BSTR bstrMember, [out, retval] VARIANT_BOOL* bMember); [id(0x00000012)] HRESULT Add([in] BSTR bstrNewItem); [id(0x00000013)] HRESULT Remove([in] BSTR bstrItemToBeRemoved); }; /***************************************************************************** * IADsUser interface */ [ odl, uuid(3E37E320-17E2-11CF-ABC4-02608C9E7553), dual, oleautomation ] interface IADsUser : IADs { [id(0x00000035), propget] HRESULT BadLoginAddress([out, retval] BSTR* retval); [id(0x00000036), propget] HRESULT BadLoginCount([out, retval] long* retval); [id(0x00000038), propget] HRESULT LastLogin([out, retval] DATE* retval); [id(0x00000039), propget] HRESULT LastLogoff([out, retval] DATE* retval); [id(0x0000003a), propget] HRESULT LastFailedLogin([out, retval] DATE* retval); [id(0x0000003b), propget] HRESULT PasswordLastChanged([out, retval] DATE* retval); [id(0x0000000f), propget] HRESULT Description([out, retval] BSTR* retval); [id(0x0000000f), propput] HRESULT Description([in] BSTR retval); [id(0x00000013), propget] HRESULT Division([out, retval] BSTR* retval); [id(0x00000013), propput] HRESULT Division([in] BSTR retval); [id(0x0000007a), propget] HRESULT Department([out, retval] BSTR* retval); [id(0x0000007a), propput] HRESULT Department([in] BSTR retval); [id(0x00000014), propget] HRESULT EmployeeID([out, retval] BSTR* retval); [id(0x00000014), propput] HRESULT EmployeeID([in] BSTR retval); [id(0x00000017), propget] HRESULT FullName([out, retval] BSTR* retval); [id(0x00000017), propput] HRESULT FullName([in] BSTR retval); [id(0x00000016), propget] HRESULT FirstName([out, retval] BSTR* retval); [id(0x00000016), propput] HRESULT FirstName([in] BSTR retval); [id(0x00000019), propget] HRESULT LastName([out, retval] BSTR* retval); [id(0x00000019), propput] HRESULT LastName([in] BSTR retval); [id(0x0000001b), propget] HRESULT OtherName([out, retval] BSTR* retval); [id(0x0000001b), propput] HRESULT OtherName([in] BSTR retval); [id(0x00000072), propget] HRESULT NamePrefix([out, retval] BSTR* retval); [id(0x00000072), propput] HRESULT NamePrefix([in] BSTR retval); [id(0x00000073), propget] HRESULT NameSuffix([out, retval] BSTR* retval); [id(0x00000073), propput] HRESULT NameSuffix([in] BSTR retval); [id(0x00000024), propget] HRESULT Title([out, retval] BSTR* retval); [id(0x00000024), propput] HRESULT Title([in] BSTR retval); [id(0x0000001a), propget] HRESULT Manager([out, retval] BSTR* retval); [id(0x0000001a), propput] HRESULT Manager([in] BSTR retval); [id(0x00000020), propget] HRESULT TelephoneHome([out, retval] VARIANT* retval); [id(0x00000020), propput] HRESULT TelephoneHome([in] VARIANT retval); [id(0x00000021), propget] HRESULT TelephoneMobile([out, retval] VARIANT* retval); [id(0x00000021), propput] HRESULT TelephoneMobile([in] VARIANT retval); [id(0x00000022), propget] HRESULT TelephoneNumber([out, retval] VARIANT* retval); [id(0x00000022), propput] HRESULT TelephoneNumber([in] VARIANT retval); [id(0x00000011), propget] HRESULT TelephonePager([out, retval] VARIANT* retval); [id(0x00000011), propput] HRESULT TelephonePager([in] VARIANT retval); [id(0x00000010), propget] HRESULT FaxNumber([out, retval] VARIANT* retval); [id(0x00000010), propput] HRESULT FaxNumber([in] VARIANT retval); [id(0x0000001c), propget] HRESULT OfficeLocations([out, retval] VARIANT* retval); [id(0x0000001c), propput] HRESULT OfficeLocations([in] VARIANT retval); [id(0x0000001e), propget] HRESULT PostalAddresses([out, retval] VARIANT* retval); [id(0x0000001e), propput] HRESULT PostalAddresses([in] VARIANT retval); [id(0x0000001f), propget] HRESULT PostalCodes([out, retval] VARIANT* retval); [id(0x0000001f), propput] HRESULT PostalCodes([in] VARIANT retval); [id(0x00000075), propget] HRESULT SeeAlso([out, retval] VARIANT* retval); [id(0x00000075), propput] HRESULT SeeAlso([in] VARIANT retval); [id(0x00000025), propget] HRESULT AccountDisabled([out, retval] VARIANT_BOOL* retval); [id(0x00000025), propput] HRESULT AccountDisabled([in] VARIANT_BOOL retval); [id(0x00000026), propget] HRESULT AccountExpirationDate([out, retval] DATE* retval); [id(0x00000026), propput] HRESULT AccountExpirationDate([in] DATE retval); [id(0x00000029), propget] HRESULT GraceLoginsAllowed([out, retval] long* retval); [id(0x00000029), propput] HRESULT GraceLoginsAllowed([in] long retval); [id(0x0000002a), propget] HRESULT GraceLoginsRemaining([out, retval] long* retval); [id(0x0000002a), propput] HRESULT GraceLoginsRemaining([in] long retval); [id(0x0000002b), propget] HRESULT IsAccountLocked([out, retval] VARIANT_BOOL* retval); [id(0x0000002b), propput] HRESULT IsAccountLocked([in] VARIANT_BOOL retval); [id(0x0000002d), propget] HRESULT LoginHours([out, retval] VARIANT* retval); [id(0x0000002d), propput] HRESULT LoginHours([in] VARIANT retval); [id(0x0000002e), propget] HRESULT LoginWorkstations([out, retval] VARIANT* retval); [id(0x0000002e), propput] HRESULT LoginWorkstations([in] VARIANT retval); [id(0x0000002f), propget] HRESULT MaxLogins([out, retval] long* retval); [id(0x0000002f), propput] HRESULT MaxLogins([in] long retval); [id(0x00000030), propget] HRESULT MaxStorage([out, retval] long* retval); [id(0x00000030), propput] HRESULT MaxStorage([in] long retval); [id(0x00000031), propget] HRESULT PasswordExpirationDate([out, retval] DATE* retval); [id(0x00000031), propput] HRESULT PasswordExpirationDate([in] DATE retval); [id(0x00000032), propget] HRESULT PasswordMinimumLength([out, retval] long* retval); [id(0x00000032), propput] HRESULT PasswordMinimumLength([in] long retval); [id(0x00000033), propget] HRESULT PasswordRequired([out, retval] VARIANT_BOOL* retval); [id(0x00000033), propput] HRESULT PasswordRequired([in] VARIANT_BOOL retval); [id(0x00000034), propget] HRESULT RequireUniquePassword([out, retval] VARIANT_BOOL* retval); [id(0x00000034), propput] HRESULT RequireUniquePassword([in] VARIANT_BOOL retval); [id(0x0000003c), propget] HRESULT EmailAddress([out, retval] BSTR* retval); [id(0x0000003c), propput] HRESULT EmailAddress([in] BSTR retval); [id(0x0000003d), propget] HRESULT HomeDirectory([out, retval] BSTR* retval); [id(0x0000003d), propput] HRESULT HomeDirectory([in] BSTR retval); [id(0x0000003e), propget] HRESULT Languages([out, retval] VARIANT* retval); [id(0x0000003e), propput] HRESULT Languages([in] VARIANT retval); [id(0x0000003f), propget] HRESULT Profile([out, retval] BSTR* retval); [id(0x0000003f), propput] HRESULT Profile([in] BSTR retval); [id(0x00000040), propget] HRESULT LoginScript([out, retval] BSTR* retval); [id(0x00000040), propput] HRESULT LoginScript([in] BSTR retval); [id(0x00000041), propget] HRESULT Picture([out, retval] VARIANT* retval); [id(0x00000041), propput] HRESULT Picture([in] VARIANT retval); [id(0x00000078), propget] HRESULT HomePage([out, retval] BSTR* retval); [id(0x00000078), propput] HRESULT HomePage([in] BSTR retval); [id(0x00000042)] HRESULT Groups([out, retval] IADsMembers** ppGroups); [id(0x00000043)] HRESULT SetPassword([in] BSTR NewPassword); [id(0x00000044)] HRESULT ChangePassword([in] BSTR bstrOldPassword, [in] BSTR bstrNewPassword); }; /***************************************************************************** * IDirectorySearch interface */ [ odl, local, uuid(109BA8EC-92F0-11D0-A790-00C04FD8D5A8) ] interface IDirectorySearch : IUnknown { HRESULT SetSearchPreference([in] PADS_SEARCHPREF_INFO pSearchPrefs, [in] DWORD dwNumPrefs); HRESULT ExecuteSearch([in] LPWSTR pszSearchFilter, [in] LPWSTR* pAttributeNames, [in] DWORD dwNumberAttributes, [out] PADS_SEARCH_HANDLE phSearchResult); HRESULT AbandonSearch([in] ADS_SEARCH_HANDLE phSearchResult); HRESULT GetFirstRow([in] ADS_SEARCH_HANDLE hSearchResult); HRESULT GetNextRow([in] ADS_SEARCH_HANDLE hSearchResult); HRESULT GetPreviousRow([in] ADS_SEARCH_HANDLE hSearchResult); HRESULT GetNextColumnName([in] ADS_SEARCH_HANDLE hSearchHandle, [out] LPWSTR* ppszColumnName); HRESULT GetColumn( [in] ADS_SEARCH_HANDLE hSearchResult, [in] LPWSTR szColumnName, [out] PADS_SEARCH_COLUMN pSearchColumn); HRESULT FreeColumn([in] PADS_SEARCH_COLUMN pSearchColumn); HRESULT CloseSearchHandle([in] ADS_SEARCH_HANDLE hSearchResult); };